1 use libtest_mimic::{Arguments, Failed, Trial};
3 use mt_net::{generate_random::GenerateRandomVariant, rand, ToCltPkt, ToSrvPkt};
4 use mt_ser::{DefCfg, MtDeserialize, MtSerialize};
5 use std::{error::Error, fmt::Debug};
7 fn test_reserialize<T>(type_name: &'static str) -> impl Iterator<Item = Trial>
9 T: MtSerialize + MtDeserialize + GenerateRandomVariant + PartialEq + Debug,
11 (0..T::num_variants()).map(move |i| {
12 Trial::test(format!("{type_name}::{}", T::variant_name(i)), move || {
13 let mut rng = rand::thread_rng();
16 let input = T::generate_random_variant(&mut rng, i);
18 let mut writer = Vec::new();
20 .mt_serialize::<DefCfg>(&mut writer)
21 .map_err(|e| format!("serialize error: {e}\ninput: {input:?}"))?;
23 let mut reader = std::io::Cursor::new(writer);
24 let output = T::mt_deserialize::<DefCfg>(&mut reader)
25 .map_err(|e| format!("deserialize error: {e}\ninput: {input:?}"))?;
29 "output did not match input\n\
43 fn main() -> Result<(), Box<dyn Error>> {
44 let args = Arguments::from_args();
45 let tests = test_reserialize::<ToSrvPkt>("ToSrvPkt")
46 .chain(test_reserialize::<ToCltPkt>("ToCltPkt"))
48 libtest_mimic::run(&args, tests).exit();