diff options
author | Joey Sacchini <joey@sacchini.net> | 2020-09-29 17:05:58 -0400 |
---|---|---|
committer | Joey Sacchini <joey@sacchini.net> | 2020-09-29 17:05:58 -0400 |
commit | 56181da142f5e95a067feea5c4558fef2a2d49a7 (patch) | |
tree | 08d5bbcaaa13cf915248cf9dba2a0955d4b573cf /src/test_macros.rs | |
parent | 2e6119a65f260f460dd67860dd5f5af7286bcb42 (diff) | |
download | mcproto-rs-56181da142f5e95a067feea5c4558fef2a2d49a7.tar.gz mcproto-rs-56181da142f5e95a067feea5c4558fef2a2d49a7.tar.bz2 mcproto-rs-56181da142f5e95a067feea5c4558fef2a2d49a7.zip |
implement automated testing of all data-types
Diffstat (limited to 'src/test_macros.rs')
-rw-r--r-- | src/test_macros.rs | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/src/test_macros.rs b/src/test_macros.rs new file mode 100644 index 0000000..cc573a7 --- /dev/null +++ b/src/test_macros.rs @@ -0,0 +1,80 @@ +use crate::{Serializer, SerializeResult}; +#[cfg(test)] +#[macro_export] +macro_rules! packet_test_cases { + ($pnam: ident, $varnam: ident, $bodnam: ident, $testnam: ident, $benchnams: ident, $benchnamd: ident) => { + #[test] + fn $testnam() { + for _ in 0..10 { + let packet = $pnam::$varnam($bodnam::test_gen_random()); + let mut out = BytesSerializer::default(); + packet.mc_serialize(&mut out).expect("serialize succeeds"); + let bytes = out.into_bytes(); + + let raw_packet = RawPacket{ + id: packet.id(), + data: bytes, + }; + + let deserialized = <$pnam>::mc_deserialize(raw_packet).expect("deserialize succeeds"); + assert_eq!(packet, deserialized); + } + } + + #[bench] + fn $benchnams(b: &mut Bencher) { + let packet = $pnam::$varnam($bodnam::test_gen_random()); + let mut serializer = BenchSerializer::default(); + packet.mc_serialize(&mut serializer).expect("serialize succeeds"); + b.bytes = serializer.len() as u64; + serializer.reset(); + + b.iter(|| { + packet.mc_serialize(&mut serializer).expect("serialize succeeds"); + serializer.reset(); + }) + } + + #[bench] + fn $benchnamd(b: &mut Bencher) { + let packet = $pnam::$varnam($bodnam::test_gen_random()); + let mut serializer = BytesSerializer::default(); + packet.mc_serialize(&mut serializer).expect("serialize succeeds"); + + let bytes = serializer.into_bytes(); + b.bytes = bytes.len() as u64; + let raw_packet = RawPacket{ + id: packet.id(), + data: bytes, + }; + b.iter(|| { + $pnam::mc_deserialize(raw_packet.clone()).expect("deserialize succeeds"); + }) + } + } +} + +#[cfg(test)] +#[derive(Clone, Debug, Default, PartialEq)] +pub struct BenchSerializer { + data: Vec<u8> +} + +#[cfg(test)] +impl Serializer for BenchSerializer { + fn serialize_bytes(&mut self, data: &[u8]) -> SerializeResult { + self.data.extend_from_slice(data); + Ok(()) + } +} + +#[cfg(test)] +impl BenchSerializer { + pub fn reset(&mut self) { + self.data.clear(); + } + + pub fn len(&self) -> usize { + self.data.len() + } +}
\ No newline at end of file |