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