summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/.gitignore2
-rw-r--r--tests/random.rs49
-rw-r--r--tests/reserialize/.gitignore1
-rw-r--r--tests/reserialize/go.mod10
-rw-r--r--tests/reserialize/go.sum6
-rw-r--r--tests/reserialize/main.go16
6 files changed, 84 insertions, 0 deletions
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<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();
+}
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)
+}