use ferranet::MacAddr;
use proptest::prelude::*;
proptest! {
#[test]
fn mac_addr_roundtrips(octets in any::<[u8; 6]>()) {
let mac = MacAddr(octets);
let parsed: MacAddr = mac.to_string().parse().expect("formatted MAC must parse");
prop_assert_eq!(parsed.octets(), octets);
}
#[test]
fn mac_addr_parse_never_panics(s in ".{0,40}") {
let _ = s.parse::<MacAddr>();
}
}
#[cfg(target_os = "linux")]
mod block_parser {
use ferranet::bench_support::{parse_v3_block, synth_v3_block};
use proptest::prelude::*;
proptest! {
#[test]
fn parse_arbitrary_block_is_safe(
data in proptest::collection::vec(any::<u8>(), 0..8192),
first_off in 0usize..16384,
num_pkts in 0u32..4096,
) {
let (frames, bytes) = parse_v3_block(&data, first_off, num_pkts);
prop_assert!(frames <= num_pkts as usize);
prop_assert!(bytes <= data.len());
}
#[test]
fn synthetic_block_round_trips(num_frames in 1u32..64, payload in 6usize..1500) {
let (buf, first, pkts) = synth_v3_block(num_frames, payload);
let (frames, bytes) = parse_v3_block(&buf, first, pkts);
prop_assert_eq!(frames, num_frames as usize);
prop_assert_eq!(bytes, num_frames as usize * payload);
}
}
}