diff options
Diffstat (limited to 'src/structs/tests.rs')
| -rw-r--r-- | src/structs/tests.rs | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/src/structs/tests.rs b/src/structs/tests.rs new file mode 100644 index 0000000..0fa5347 --- /dev/null +++ b/src/structs/tests.rs | |||
| @@ -0,0 +1,88 @@ | |||
| 1 | use crate::structs::{ByteOrder, Settings, VariantIndexType}; | ||
| 2 | use serde::Serialize; | ||
| 3 | |||
| 4 | #[derive(Serialize)] | ||
| 5 | struct Struct<'a> { | ||
| 6 | u8: u8, | ||
| 7 | u16: u16, | ||
| 8 | u32: u32, | ||
| 9 | u64: u64, | ||
| 10 | u8arr: [u8; 3], | ||
| 11 | tuple: (u16, u8), | ||
| 12 | str: &'a str, | ||
| 13 | } | ||
| 14 | |||
| 15 | #[derive(Serialize)] | ||
| 16 | enum Enum<'a> { | ||
| 17 | Unit, | ||
| 18 | Type(u16), | ||
| 19 | Tuple(u16, &'a str), | ||
| 20 | Struct { u32: u32, u64: u64 }, | ||
| 21 | } | ||
| 22 | |||
| 23 | #[test] | ||
| 24 | fn struct_serialize_test() { | ||
| 25 | let object = Struct { | ||
| 26 | u8: 42, | ||
| 27 | u16: 26, | ||
| 28 | u32: 69, | ||
| 29 | u64: 11, | ||
| 30 | u8arr: [37, 74, 111], | ||
| 31 | tuple: (24, 13), | ||
| 32 | str: "yes", | ||
| 33 | }; | ||
| 34 | |||
| 35 | let bytes = Settings::default() | ||
| 36 | .byte_order(ByteOrder::Le) | ||
| 37 | .serialize(&object) | ||
| 38 | .unwrap(); | ||
| 39 | assert_eq!( | ||
| 40 | bytes, | ||
| 41 | //u8|-u16--|----u32-----|----------u64-----------|[0]-[1]--[2]|.0 --.1---|-y----e----s| | ||
| 42 | [42, 26, 0, 69, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 37, 74, 111, 24, 0, 13, 121, 101, 115] | ||
| 43 | ); | ||
| 44 | |||
| 45 | let bytes = Settings::default() | ||
| 46 | .byte_order(ByteOrder::Be) | ||
| 47 | .serialize(&object) | ||
| 48 | .unwrap(); | ||
| 49 | assert_eq!( | ||
| 50 | bytes, | ||
| 51 | //u8|-u16--|----u32-----|----------u64-----------|[0]-[1]--[2]|.0 --.1---|-y----e----s| | ||
| 52 | [42, 0, 26, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 11, 37, 74, 111, 0, 24, 13, 121, 101, 115] | ||
| 53 | ); | ||
| 54 | } | ||
| 55 | |||
| 56 | #[test] | ||
| 57 | fn enum_serialize_test() { | ||
| 58 | let bytes = Settings::default() | ||
| 59 | .byte_order(ByteOrder::Le) | ||
| 60 | .variant_index_type(VariantIndexType::U8) | ||
| 61 | .serialize(&Enum::Unit) | ||
| 62 | .unwrap(); | ||
| 63 | assert_eq!(bytes, [0]); | ||
| 64 | |||
| 65 | let bytes = Settings::default() | ||
| 66 | .byte_order(ByteOrder::Le) | ||
| 67 | .variant_index_type(VariantIndexType::U16) | ||
| 68 | .serialize(&Enum::Type(42)) | ||
| 69 | .unwrap(); | ||
| 70 | assert_eq!(bytes, [1, 0, 42, 0]); | ||
| 71 | |||
| 72 | let bytes = Settings::default() | ||
| 73 | .byte_order(ByteOrder::Le) | ||
| 74 | .variant_index_type(VariantIndexType::U32) | ||
| 75 | .serialize(&Enum::Tuple(26, "yes")) | ||
| 76 | .unwrap(); | ||
| 77 | assert_eq!(bytes, [2, 0, 0, 0, 26, 0, 121, 101, 115]); | ||
| 78 | |||
| 79 | let bytes = Settings::default() | ||
| 80 | .byte_order(ByteOrder::Be) | ||
| 81 | .variant_index_type(VariantIndexType::U64) | ||
| 82 | .serialize(&Enum::Struct { u32: 69, u64: 37 }) | ||
| 83 | .unwrap(); | ||
| 84 | assert_eq!( | ||
| 85 | bytes, | ||
| 86 | [0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 37] | ||
| 87 | ); | ||
| 88 | } | ||
