1 use super::*;
2
3 use crate::Flags;
4
5 #[test]
cases()6 fn cases() {
7 case(0, TestFlags::all(), TestFlags::complement);
8 case(0, TestFlags::from_bits_retain(!0), TestFlags::complement);
9
10 case(1 | 1 << 1, TestFlags::C, TestFlags::complement);
11 case(
12 1 | 1 << 1,
13 TestFlags::C | TestFlags::from_bits_retain(1 << 3),
14 TestFlags::complement,
15 );
16
17 case(
18 1 | 1 << 1 | 1 << 2,
19 TestFlags::empty(),
20 TestFlags::complement,
21 );
22 case(
23 1 | 1 << 1 | 1 << 2,
24 TestFlags::from_bits_retain(1 << 3),
25 TestFlags::complement,
26 );
27
28 case(0, TestZero::empty(), TestZero::complement);
29
30 case(0, TestEmpty::empty(), TestEmpty::complement);
31
32 case(1 << 2, TestOverlapping::AB, TestOverlapping::complement);
33
34 case(!0, TestExternal::empty(), TestExternal::complement);
35 }
36
37 #[track_caller]
case<T: Flags + std::fmt::Debug + std::ops::Not<Output = T> + Copy>( expected: T::Bits, value: T, inherent: impl FnOnce(T) -> T, ) where T::Bits: std::fmt::Debug + PartialEq,38 fn case<T: Flags + std::fmt::Debug + std::ops::Not<Output = T> + Copy>(
39 expected: T::Bits,
40 value: T,
41 inherent: impl FnOnce(T) -> T,
42 ) where
43 T::Bits: std::fmt::Debug + PartialEq,
44 {
45 assert_eq!(expected, inherent(value).bits(), "{:?}.complement()", value);
46 assert_eq!(
47 expected,
48 Flags::complement(value).bits(),
49 "Flags::complement({:?})",
50 value
51 );
52 assert_eq!(expected, (!value).bits(), "!{:?}", value);
53 }
54