Revision control
Copy as Markdown
Other Tools
//! 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);
}
}