1 use super::*;
2
3 use crate::Flags;
4
5 #[test]
cases()6 fn cases() {
7 case(Some(0), 0, TestFlags::from_bits);
8 case(Some(1), 1, TestFlags::from_bits);
9 case(
10 Some(1 | 1 << 1 | 1 << 2),
11 1 | 1 << 1 | 1 << 2,
12 TestFlags::from_bits,
13 );
14
15 case(None, 1 << 3, TestFlags::from_bits);
16 case(None, 1 | 1 << 3, TestFlags::from_bits);
17
18 case(Some(1 | 1 << 1), 1 | 1 << 1, TestOverlapping::from_bits);
19
20 case(Some(1 << 1), 1 << 1, TestOverlapping::from_bits);
21
22 case(Some(1 << 5), 1 << 5, TestExternal::from_bits);
23 }
24
25 #[track_caller]
case<T: Flags>( expected: Option<T::Bits>, input: T::Bits, inherent: impl FnOnce(T::Bits) -> Option<T>, ) where <T as Flags>::Bits: std::fmt::Debug + PartialEq,26 fn case<T: Flags>(
27 expected: Option<T::Bits>,
28 input: T::Bits,
29 inherent: impl FnOnce(T::Bits) -> Option<T>,
30 ) where
31 <T as Flags>::Bits: std::fmt::Debug + PartialEq,
32 {
33 assert_eq!(
34 expected,
35 inherent(input).map(|f| f.bits()),
36 "T::from_bits({:?})",
37 input
38 );
39 assert_eq!(
40 expected,
41 T::from_bits(input).map(|f| f.bits()),
42 "Flags::from_bits({:?})",
43 input
44 );
45 }
46