]> git.lizzy.rs Git - rust.git/blob - tests/ui/functions-closures/closure-to-fn-coercion.rs
Rollup merge of #106785 - compiler-errors:better-impl-wf-spans, r=estebank
[rust.git] / tests / ui / functions-closures / closure-to-fn-coercion.rs
1 // run-pass
2 use std::mem;
3
4 const FOO: fn(u8) -> u8 = |v: u8| { v };
5
6 const BAR: [fn(&mut u32); 5] = [
7     |_: &mut u32| {},
8     |v: &mut u32| *v += 1,
9     |v: &mut u32| *v += 2,
10     |v: &mut u32| *v += 3,
11     |v: &mut u32| *v += 4,
12 ];
13 fn func_specific() -> fn() -> u32 {
14     || return 42
15 }
16
17 fn generic<T>(_: T) -> fn() -> usize {
18     || mem::size_of::<T>()
19 }
20
21 fn main() {
22     // Items
23     assert_eq!(func_specific()(), 42);
24     let foo: fn(u8) -> u8 = |v: u8| { v };
25     assert_eq!(foo(31), 31);
26     // Constants
27     assert_eq!(FOO(31), 31);
28     let mut a: u32 = 0;
29     assert_eq!({ BAR[0](&mut a); a }, 0);
30     assert_eq!({ BAR[1](&mut a); a }, 1);
31     assert_eq!({ BAR[2](&mut a); a }, 3);
32     assert_eq!({ BAR[3](&mut a); a }, 6);
33     assert_eq!({ BAR[4](&mut a); a }, 10);
34     assert_eq!(generic(0i8)(), 1);
35 }