macro_rules! test_roundtrip_versioned {
($t:ty, $min:expr_2021, $max:expr_2021, $name:ident) => {
#[allow(unused_imports)]
use proptest::prelude::*;
proptest! {
#![proptest_config(ProptestConfig{fork: false, ..Default::default()})]
#[test]
fn $name(orig: $t) {
#[allow(unused_imports)]
use std::io::Cursor;
for v in ($min.0.0)..=($max.0.0) {
let v = ApiVersion(Int16(v));
let mut buf = Cursor::new(Vec::<u8>::new());
match orig.write_versioned(&mut buf, v) {
Err(_) => {
}
Ok(()) => {
buf.set_position(0);
let restored_1 = <$t>::read_versioned(&mut buf, v).unwrap();
let mut buf = Cursor::new(Vec::<u8>::new());
restored_1.write_versioned(&mut buf, v).unwrap();
let l = buf.position();
buf.set_position(0);
let restored_2 = <$t>::read_versioned(&mut buf, v).unwrap();
assert_eq!(restored_1, restored_2);
assert_eq!(buf.position(), l);
}
}
}
}
}
};
}
pub(crate) use test_roundtrip_versioned;