| //! Specialized fuzzing for flags types using `arbitrary`. |
| |
| use crate::Flags; |
| |
| /** |
| Generate some arbitrary flags value with only known bits set. |
| */ |
| pub fn arbitrary<'a, B: Flags>(u: &mut arbitrary::Unstructured<'a>) -> arbitrary::Result<B> |
| where |
| B::Bits: arbitrary::Arbitrary<'a>, |
| { |
| B::from_bits(u.arbitrary()?).ok_or_else(|| arbitrary::Error::IncorrectFormat) |
| } |
| |
| #[cfg(test)] |
| mod tests { |
| use arbitrary::Arbitrary; |
| |
| bitflags! { |
| #[derive(Arbitrary)] |
| struct Color: u32 { |
| const RED = 0x1; |
| const GREEN = 0x2; |
| const BLUE = 0x4; |
| } |
| } |
| |
| #[test] |
| fn test_arbitrary() { |
| let mut unstructured = arbitrary::Unstructured::new(&[0_u8; 256]); |
| let _color = Color::arbitrary(&mut unstructured); |
| } |
| } |