From 6c875082474431a39596b1547b436a9bec1f5533 Mon Sep 17 00:00:00 2001 From: Lizzy Fleckenstein Date: Fri, 10 Feb 2023 15:53:15 +0100 Subject: Initial commit --- tests/.gitignore | 2 ++ tests/random.rs | 49 ++++++++++++++++++++++++++++++++++++++++++++ tests/reserialize/.gitignore | 1 + tests/reserialize/go.mod | 10 +++++++++ tests/reserialize/go.sum | 6 ++++++ tests/reserialize/main.go | 16 +++++++++++++++ 6 files changed, 84 insertions(+) create mode 100644 tests/.gitignore create mode 100644 tests/random.rs create mode 100644 tests/reserialize/.gitignore create mode 100644 tests/reserialize/go.mod create mode 100644 tests/reserialize/go.sum create mode 100644 tests/reserialize/main.go (limited to 'tests') diff --git a/tests/.gitignore b/tests/.gitignore new file mode 100644 index 0000000..4fffb2f --- /dev/null +++ b/tests/.gitignore @@ -0,0 +1,2 @@ +/target +/Cargo.lock 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(type_name: &'static str) -> impl Iterator +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::(&mut writer) + .map_err(|e| format!("serialize error: {e}\ninput: {input:?}"))?; + + let mut reader = std::io::Cursor::new(writer); + let output = T::mt_deserialize::(&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> { + let args = Arguments::from_args(); + let tests = test_reserialize::("ToSrvPkt") + .chain(test_reserialize::("ToCltPkt")) + .collect(); + libtest_mimic::run(&args, tests).exit(); +} diff --git a/tests/reserialize/.gitignore b/tests/reserialize/.gitignore new file mode 100644 index 0000000..49a0751 --- /dev/null +++ b/tests/reserialize/.gitignore @@ -0,0 +1 @@ +validate diff --git a/tests/reserialize/go.mod b/tests/reserialize/go.mod new file mode 100644 index 0000000..414ffb6 --- /dev/null +++ b/tests/reserialize/go.mod @@ -0,0 +1,10 @@ +module github.com/minetest-rust/mt_net/tests/reserialize + +go 1.20 + +replace github.com/dragonfireclient/mt => /home/fleckenstein/src/mt + +require ( + github.com/dragonfireclient/mt v0.0.1 // indirect + github.com/klauspost/compress v1.15.15 // indirect +) diff --git a/tests/reserialize/go.sum b/tests/reserialize/go.sum new file mode 100644 index 0000000..c92cbb7 --- /dev/null +++ b/tests/reserialize/go.sum @@ -0,0 +1,6 @@ +github.com/dragonfireclient/mt v0.0.2-0.20220709120709-173ad6e339cf h1:0CY1XyRPpNTgPQJjgsqvBzBgXdf6NN6deKw81G0qeHQ= +github.com/dragonfireclient/mt v0.0.2-0.20220709120709-173ad6e339cf/go.mod h1:3oHbcSQytW21mTF7ozw3Il3UzdOAG30gPzO2XUAqvGs= +github.com/klauspost/compress v1.15.5 h1:qyCLMz2JCrKADihKOh9FxnW3houKeNsp2h5OEz0QSEA= +github.com/klauspost/compress v1.15.5/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU= +github.com/klauspost/compress v1.15.15 h1:EF27CXIuDsYJ6mmvtBRlEuB2UVOqHG1tAXgZ7yIO+lw= +github.com/klauspost/compress v1.15.15/go.mod h1:ZcK2JAFqKOpnBlxcLsJzYfrS9X1akm9fHZNnD9+Vo/4= diff --git a/tests/reserialize/main.go b/tests/reserialize/main.go new file mode 100644 index 0000000..101f3bf --- /dev/null +++ b/tests/reserialize/main.go @@ -0,0 +1,16 @@ +package main + +import ( + "github.com/dragonfireclient/mt" + "os" +) + +// WIP: test against the Go mt package +func main() { + pkt, err := mt.DeserializePkt(os.Stdin, false) + if err != nil { + panic(err) + } + + mt.SerializePkt(*pkt, os.Stdout, false) +} -- cgit v1.2.3