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