1 use super::*;
2
3 use crate::Flags;
4
5 #[test]
cases()6 fn cases() {
7 case(
8 TestFlags::empty(),
9 &[
10 (TestFlags::empty(), true),
11 (TestFlags::A, false),
12 (TestFlags::B, false),
13 (TestFlags::C, false),
14 (TestFlags::from_bits_retain(1 << 3), false),
15 ],
16 TestFlags::contains,
17 );
18
19 case(
20 TestFlags::A,
21 &[
22 (TestFlags::empty(), true),
23 (TestFlags::A, true),
24 (TestFlags::B, false),
25 (TestFlags::C, false),
26 (TestFlags::ABC, false),
27 (TestFlags::from_bits_retain(1 << 3), false),
28 (TestFlags::from_bits_retain(1 | (1 << 3)), false),
29 ],
30 TestFlags::contains,
31 );
32
33 case(
34 TestFlags::ABC,
35 &[
36 (TestFlags::empty(), true),
37 (TestFlags::A, true),
38 (TestFlags::B, true),
39 (TestFlags::C, true),
40 (TestFlags::ABC, true),
41 (TestFlags::from_bits_retain(1 << 3), false),
42 ],
43 TestFlags::contains,
44 );
45
46 case(
47 TestFlags::from_bits_retain(1 << 3),
48 &[
49 (TestFlags::empty(), true),
50 (TestFlags::A, false),
51 (TestFlags::B, false),
52 (TestFlags::C, false),
53 (TestFlags::from_bits_retain(1 << 3), true),
54 ],
55 TestFlags::contains,
56 );
57
58 case(
59 TestZero::ZERO,
60 &[(TestZero::ZERO, true)],
61 TestZero::contains,
62 );
63
64 case(
65 TestOverlapping::AB,
66 &[
67 (TestOverlapping::AB, true),
68 (TestOverlapping::BC, false),
69 (TestOverlapping::from_bits_retain(1 << 1), true),
70 ],
71 TestOverlapping::contains,
72 );
73
74 case(
75 TestExternal::all(),
76 &[
77 (TestExternal::A, true),
78 (TestExternal::B, true),
79 (TestExternal::C, true),
80 (TestExternal::from_bits_retain(1 << 5 | 1 << 7), true),
81 ],
82 TestExternal::contains,
83 );
84 }
85
86 #[track_caller]
case<T: Flags + std::fmt::Debug + Copy>( value: T, inputs: &[(T, bool)], mut inherent: impl FnMut(&T, T) -> bool, )87 fn case<T: Flags + std::fmt::Debug + Copy>(
88 value: T,
89 inputs: &[(T, bool)],
90 mut inherent: impl FnMut(&T, T) -> bool,
91 ) {
92 for (input, expected) in inputs {
93 assert_eq!(
94 *expected,
95 inherent(&value, *input),
96 "{:?}.contains({:?})",
97 value,
98 input
99 );
100 assert_eq!(
101 *expected,
102 Flags::contains(&value, *input),
103 "Flags::contains({:?}, {:?})",
104 value,
105 input
106 );
107 }
108 }
109