summaryrefslogtreecommitdiff
path: root/tests/random.rs
diff options
context:
space:
mode:
authorLizzy Fleckenstein <eliasfleckenstein@web.de>2023-02-10 15:53:15 +0100
committerLizzy Fleckenstein <eliasfleckenstein@web.de>2023-02-10 15:53:15 +0100
commit6c875082474431a39596b1547b436a9bec1f5533 (patch)
treebafa770893e6a5a1daea8b57cc5a3f3574da3cb6 /tests/random.rs
downloadmt_net-6c875082474431a39596b1547b436a9bec1f5533.tar.xz
Initial commit
Diffstat (limited to 'tests/random.rs')
-rw-r--r--tests/random.rs49
1 files changed, 49 insertions, 0 deletions
diff --git a/tests/random.rs b/tests/random.rs
new file mode 100644
index 0000000..4d2ad42
--- /dev/null
+++ b/tests/random.rs
@@ -0,0 +1,49 @@
+use libtest_mimic::{Arguments, Failed, Trial};
+
+use mt_net::{generate_random::GenerateRandomVariant, rand, ToCltPkt, ToSrvPkt};
+use mt_ser::{DefCfg, MtDeserialize, MtSerialize};
+use std::{error::Error, fmt::Debug};
+
+fn test_reserialize<T>(type_name: &'static str) -> impl Iterator<Item = Trial>
+where
+ T: MtSerialize + MtDeserialize + GenerateRandomVariant + PartialEq + Debug,
+{
+ (0..T::num_variants()).map(move |i| {
+ Trial::test(format!("{type_name}::{}", T::variant_name(i)), move || {
+ let mut rng = rand::thread_rng();
+
+ for _ in 0..100 {
+ let input = T::generate_random_variant(&mut rng, i);
+
+ let mut writer = Vec::new();
+ input
+ .mt_serialize::<DefCfg>(&mut writer)
+ .map_err(|e| format!("serialize error: {e}\ninput: {input:?}"))?;
+
+ let mut reader = std::io::Cursor::new(writer);
+ let output = T::mt_deserialize::<DefCfg>(&mut reader)
+ .map_err(|e| format!("deserialize error: {e}\ninput: {input:?}"))?;
+
+ if input != output {
+ return Err(format!(
+ "output did not match input\n\
+ input: {input:?}\n\
+ output: {output:?}",
+ )
+ .into());
+ }
+ }
+
+ Ok(())
+ })
+ .with_kind("random")
+ })
+}
+
+fn main() -> Result<(), Box<dyn Error>> {
+ let args = Arguments::from_args();
+ let tests = test_reserialize::<ToSrvPkt>("ToSrvPkt")
+ .chain(test_reserialize::<ToCltPkt>("ToCltPkt"))
+ .collect();
+ libtest_mimic::run(&args, tests).exit();
+}