]>
Commit | Line | Data |
---|---|---|
f035d41b XL |
1 | // run-pass |
2 | #![allow(dead_code)] | |
3 | #![feature(variant_count)] | |
4 | #![feature(never_type)] | |
5 | ||
6 | use std::mem::variant_count; | |
7 | ||
8 | enum Void {} | |
9 | ||
10 | enum Foo { | |
11 | A, | |
12 | B, | |
13 | C, | |
14 | } | |
15 | ||
16 | enum Bar { | |
17 | A, | |
18 | B, | |
19 | C, | |
20 | D(usize), | |
21 | E { field_1: usize, field_2: Foo }, | |
22 | } | |
23 | ||
24 | struct Baz { | |
25 | a: u32, | |
26 | b: *const u8, | |
27 | } | |
28 | ||
29 | const TEST_VOID: usize = variant_count::<Void>(); | |
30 | const TEST_FOO: usize = variant_count::<Foo>(); | |
31 | const TEST_BAR: usize = variant_count::<Bar>(); | |
32 | ||
33 | const NO_ICE_STRUCT: usize = variant_count::<Baz>(); | |
34 | const NO_ICE_BOOL: usize = variant_count::<bool>(); | |
35 | const NO_ICE_PRIM: usize = variant_count::<*const u8>(); | |
36 | ||
37 | fn main() { | |
38 | assert_eq!(TEST_VOID, 0); | |
39 | assert_eq!(TEST_FOO, 3); | |
40 | assert_eq!(TEST_BAR, 5); | |
41 | assert_eq!(variant_count::<Void>(), 0); | |
42 | assert_eq!(variant_count::<Foo>(), 3); | |
43 | assert_eq!(variant_count::<Bar>(), 5); | |
44 | assert_eq!(variant_count::<Option<char>>(), 2); | |
45 | assert_eq!(variant_count::<Option<!>>(), 2); | |
46 | assert_eq!(variant_count::<Result<!, !>>(), 2); | |
47 | } |