use super::*;
#[test]
fn wire_flags_roundtrip_every_combination() {
for &verb in ClientVerb::ALL {
for &conflict_mode in WireConflictMode::ALL {
for &probe_mode in WireProbeMode::ALL {
for (bits, &lane) in (0..4u8).flat_map(|bits| WireLane::ALL.iter().map(move |l| (bits, l))) {
let f = WireFlags {
verb,
conflict_mode,
probe_mode,
continuation: bits & 1 != 0,
scan_last: bits & 2 != 0,
lane,
};
assert_eq!(WireFlags::unpack(f.pack()), Ok(f), "{f:?}");
}
}
}
}
}
#[test]
fn wire_flags_reject_unknown() {
for bit in (16..32).chain(40..64) {
assert!(WireFlags::unpack(1 << bit).is_err(), "bit {bit}");
}
assert_eq!(WireFlags::unpack(3 << 32), Ok(WireFlags::default()));
let bad_verb = (0..=u8::MAX).find(|&b| ClientVerb::from_wire(b).is_none()).unwrap();
let bad_mode = (0..=u8::MAX)
.find(|&b| WireConflictMode::from_wire(b).is_none())
.unwrap();
assert!(WireFlags::unpack(bad_verb as u64).is_err());
assert!(WireFlags::unpack((bad_mode as u64) << 8).is_err());
}