aboutsummaryrefslogtreecommitdiff
path: root/src/test_macros.rs
diff options
context:
space:
mode:
authorJoey Sacchini <joey@sacchini.net>2020-09-29 17:05:58 -0400
committerJoey Sacchini <joey@sacchini.net>2020-09-29 17:05:58 -0400
commit56181da142f5e95a067feea5c4558fef2a2d49a7 (patch)
tree08d5bbcaaa13cf915248cf9dba2a0955d4b573cf /src/test_macros.rs
parent2e6119a65f260f460dd67860dd5f5af7286bcb42 (diff)
downloadmcproto-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.rs80
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