]> git.lizzy.rs Git - rust.git/blob - tests/ui/unboxed-closures/unboxed-closures-extern-fn.rs
Rollup merge of #106856 - vadorovsky:fix-atomic-annotations, r=joshtriplett
[rust.git] / tests / ui / unboxed-closures / unboxed-closures-extern-fn.rs
1 // run-pass
2 // Checks that extern fn pointers implement the full range of Fn traits.
3
4 use std::ops::{Fn,FnMut,FnOnce};
5
6 fn square(x: isize) -> isize { x * x }
7
8 fn call_it<F:Fn(isize)->isize>(f: &F, x: isize) -> isize {
9     f(x)
10 }
11
12 fn call_it_mut<F:FnMut(isize)->isize>(f: &mut F, x: isize) -> isize {
13     f(x)
14 }
15
16 fn call_it_once<F:FnOnce(isize)->isize>(f: F, x: isize) -> isize {
17     f(x)
18 }
19
20 fn main() {
21     let x = call_it(&square, 22);
22     let y = call_it_mut(&mut square, 22);
23     let z = call_it_once(square, 22);
24     assert_eq!(x, square(22));
25     assert_eq!(y, square(22));
26     assert_eq!(z, square(22));
27 }