diff --git a/tests/run-pass/function_pointers.rs b/tests/run-pass/function_pointers.rs index 2e75a5a3ea2a..e7368004069f 100644 --- a/tests/run-pass/function_pointers.rs +++ b/tests/run-pass/function_pointers.rs @@ -2,6 +2,10 @@ fn f() -> i32 { 42 } +fn g(i: i32) -> i32 { + i*42 +} + fn return_fn_ptr() -> fn() -> i32 { f } @@ -10,8 +14,22 @@ fn call_fn_ptr() -> i32 { return_fn_ptr()() } +fn indirect i32>(f: F) -> i32 { f() } +fn indirect_mut i32>(mut f: F) -> i32 { f() } +fn indirect_once i32>(f: F) -> i32 { f() } + +fn indirect2 i32>(f: F) -> i32 { f(10) } +fn indirect_mut2 i32>(mut f: F) -> i32 { f(10) } +fn indirect_once2 i32>(f: F) -> i32 { f(10) } + fn main() { assert_eq!(call_fn_ptr(), 42); + assert_eq!(indirect(f), 42); + assert_eq!(indirect_mut(f), 42); + assert_eq!(indirect_once(f), 42); + assert_eq!(indirect2(g), 420); + assert_eq!(indirect_mut2(g), 420); + assert_eq!(indirect_once2(g), 420); assert!(return_fn_ptr() == f); assert!(return_fn_ptr() as unsafe fn() -> i32 == f as fn() -> i32 as unsafe fn() -> i32); }