add some sanity tests

This commit is contained in:
Oliver Schneider 2016-09-15 16:32:30 +02:00
parent 092f9d52d1
commit 562c64d86a
No known key found for this signature in database
GPG Key ID: 56D6EEA0FC67AC46

View File

@ -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<F: Fn() -> i32>(f: F) -> i32 { f() }
fn indirect_mut<F: FnMut() -> i32>(mut f: F) -> i32 { f() }
fn indirect_once<F: FnOnce() -> i32>(f: F) -> i32 { f() }
fn indirect2<F: Fn(i32) -> i32>(f: F) -> i32 { f(10) }
fn indirect_mut2<F: FnMut(i32) -> i32>(mut f: F) -> i32 { f(10) }
fn indirect_once2<F: FnOnce(i32) -> 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);
}