aboutsummaryrefslogtreecommitdiff
path: root/src/structs/tests.rs
diff options
context:
space:
mode:
authorIgor Tolmachev <me@igorek.dev>2024-06-16 21:36:13 +0900
committerIgor Tolmachev <me@igorek.dev>2024-06-23 15:34:34 +0900
commitd6055b5ac4f3ff5016bc4881cf1cc109a22c40ba (patch)
tree40a9044f923945e6effc13c627261630dddc574c /src/structs/tests.rs
parent6444bee8f3e188be014841ea8cd7cfb53eb03ed9 (diff)
downloadarchivator-d6055b5ac4f3ff5016bc4881cf1cc109a22c40ba.tar.gz
archivator-d6055b5ac4f3ff5016bc4881cf1cc109a22c40ba.zip
Implement serialize
Diffstat (limited to 'src/structs/tests.rs')
-rw-r--r--src/structs/tests.rs88
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 @@
1use crate::structs::{ByteOrder, Settings, VariantIndexType};
2use serde::Serialize;
3
4#[derive(Serialize)]
5struct 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)]
16enum Enum<'a> {
17 Unit,
18 Type(u16),
19 Tuple(u16, &'a str),
20 Struct { u32: u32, u64: u64 },
21}
22
23#[test]
24fn 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]
57fn 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}