use super::*; use crate::Flags; #[test] fn cases() { case( TestFlags::empty(), &[ (TestFlags::A, 0), (TestFlags::empty(), 0), (TestFlags::from_bits_retain(1 << 3), 0), ], TestFlags::remove, TestFlags::set, ); case( TestFlags::A, &[ (TestFlags::A, 0), (TestFlags::empty(), 1), (TestFlags::B, 1), ], TestFlags::remove, TestFlags::set, ); case( TestFlags::ABC, &[ (TestFlags::A, 1 << 1 | 1 << 2), (TestFlags::A | TestFlags::C, 1 << 1), ], TestFlags::remove, TestFlags::set, ); } #[track_caller] fn case( value: T, inputs: &[(T, T::Bits)], mut inherent_remove: impl FnMut(&mut T, T), mut inherent_set: impl FnMut(&mut T, T, bool), ) where T::Bits: std::fmt::Debug + PartialEq + Copy, { for (input, expected) in inputs { assert_eq!( *expected, { let mut value = value; inherent_remove(&mut value, *input); value } .bits(), "{:?}.remove({:?})", value, input ); assert_eq!( *expected, { let mut value = value; Flags::remove(&mut value, *input); value } .bits(), "Flags::remove({:?}, {:?})", value, input ); assert_eq!( *expected, { let mut value = value; inherent_set(&mut value, *input, false); value } .bits(), "{:?}.set({:?}, false)", value, input ); assert_eq!( *expected, { let mut value = value; Flags::set(&mut value, *input, false); value } .bits(), "Flags::set({:?}, {:?}, false)", value, input ); } }