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