aboutsummaryrefslogtreecommitdiff
path: root/src/structs/tests.rs
diff options
context:
space:
mode:
authorIgor Tolmachev <me@igorek.dev>2024-06-21 02:11:16 +0900
committerIgor Tolmachev <me@igorek.dev>2024-06-23 15:34:35 +0900
commitafb8ab448949eb19e09e1bdb4b263dc487a9be21 (patch)
tree5806bc9bc566dcda64818917a222c313dde3cb55 /src/structs/tests.rs
parentd6055b5ac4f3ff5016bc4881cf1cc109a22c40ba (diff)
downloadarchivator-afb8ab448949eb19e09e1bdb4b263dc487a9be21.tar.gz
archivator-afb8ab448949eb19e09e1bdb4b263dc487a9be21.zip
Implement deserialize
Remove bincode crate and replace it by own written serializer
Diffstat (limited to 'src/structs/tests.rs')
-rw-r--r--src/structs/tests.rs95
1 files changed, 79 insertions, 16 deletions
diff --git a/src/structs/tests.rs b/src/structs/tests.rs
index 0fa5347..9ee7ce5 100644
--- a/src/structs/tests.rs
+++ b/src/structs/tests.rs
@@ -1,27 +1,26 @@
1use crate::structs::{ByteOrder, Settings, VariantIndexType}; 1use crate::structs::{ByteOrder, Settings, VariantIndexType};
2use serde::Serialize; 2use serde::{Deserialize, Serialize};
3 3
4#[derive(Serialize)] 4#[derive(Serialize, Deserialize, Debug, PartialEq)]
5struct Struct<'a> { 5struct Struct {
6 u8: u8, 6 u8: u8,
7 u16: u16, 7 u16: u16,
8 u32: u32, 8 u32: u32,
9 u64: u64, 9 u64: u64,
10 u8arr: [u8; 3], 10 u8arr: [u8; 3],
11 tuple: (u16, u8), 11 tuple: (u16, u8),
12 str: &'a str,
13} 12}
14 13
15#[derive(Serialize)] 14#[derive(Serialize, Deserialize, Debug, PartialEq)]
16enum Enum<'a> { 15enum Enum {
17 Unit, 16 Unit,
18 Type(u16), 17 Type(u16),
19 Tuple(u16, &'a str), 18 Tuple(u16, u8),
20 Struct { u32: u32, u64: u64 }, 19 Struct { u32: u32, u64: u64 },
21} 20}
22 21
23#[test] 22#[test]
24fn struct_serialize_test() { 23fn struct_serialize() {
25 let object = Struct { 24 let object = Struct {
26 u8: 42, 25 u8: 42,
27 u16: 26, 26 u16: 26,
@@ -29,7 +28,6 @@ fn struct_serialize_test() {
29 u64: 11, 28 u64: 11,
30 u8arr: [37, 74, 111], 29 u8arr: [37, 74, 111],
31 tuple: (24, 13), 30 tuple: (24, 13),
32 str: "yes",
33 }; 31 };
34 32
35 let bytes = Settings::default() 33 let bytes = Settings::default()
@@ -38,8 +36,7 @@ fn struct_serialize_test() {
38 .unwrap(); 36 .unwrap();
39 assert_eq!( 37 assert_eq!(
40 bytes, 38 bytes,
41 //u8|-u16--|----u32-----|----------u64-----------|[0]-[1]--[2]|.0 --.1---|-y----e----s| 39 [42, 26, 0, 69, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 37, 74, 111, 24, 0, 13]
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 ); 40 );
44 41
45 let bytes = Settings::default() 42 let bytes = Settings::default()
@@ -48,13 +45,12 @@ fn struct_serialize_test() {
48 .unwrap(); 45 .unwrap();
49 assert_eq!( 46 assert_eq!(
50 bytes, 47 bytes,
51 //u8|-u16--|----u32-----|----------u64-----------|[0]-[1]--[2]|.0 --.1---|-y----e----s| 48 [42, 0, 26, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 11, 37, 74, 111, 0, 24, 13]
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 ); 49 );
54} 50}
55 51
56#[test] 52#[test]
57fn enum_serialize_test() { 53fn enum_serialize() {
58 let bytes = Settings::default() 54 let bytes = Settings::default()
59 .byte_order(ByteOrder::Le) 55 .byte_order(ByteOrder::Le)
60 .variant_index_type(VariantIndexType::U8) 56 .variant_index_type(VariantIndexType::U8)
@@ -72,9 +68,9 @@ fn enum_serialize_test() {
72 let bytes = Settings::default() 68 let bytes = Settings::default()
73 .byte_order(ByteOrder::Le) 69 .byte_order(ByteOrder::Le)
74 .variant_index_type(VariantIndexType::U32) 70 .variant_index_type(VariantIndexType::U32)
75 .serialize(&Enum::Tuple(26, "yes")) 71 .serialize(&Enum::Tuple(26, 15))
76 .unwrap(); 72 .unwrap();
77 assert_eq!(bytes, [2, 0, 0, 0, 26, 0, 121, 101, 115]); 73 assert_eq!(bytes, [2, 0, 0, 0, 26, 0, 15]);
78 74
79 let bytes = Settings::default() 75 let bytes = Settings::default()
80 .byte_order(ByteOrder::Be) 76 .byte_order(ByteOrder::Be)
@@ -86,3 +82,70 @@ fn enum_serialize_test() {
86 [0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 37] 82 [0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 37]
87 ); 83 );
88} 84}
85
86#[test]
87fn struct_deserialize() {
88 let object = Struct {
89 u8: 42,
90 u16: 26,
91 u32: 69,
92 u64: 11,
93 u8arr: [37, 74, 111],
94 tuple: (24, 13),
95 };
96
97 assert_eq!(
98 Settings::default()
99 .byte_order(ByteOrder::Le)
100 .deserialize::<Struct>(&[
101 42, 26, 0, 69, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 37, 74, 111, 24, 0, 13,
102 ])
103 .unwrap(),
104 object
105 );
106 assert_eq!(
107 Settings::default()
108 .byte_order(ByteOrder::Be)
109 .deserialize::<Struct>(&[
110 42, 0, 26, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 11, 37, 74, 111, 0, 24, 13
111 ])
112 .unwrap(),
113 object
114 );
115}
116
117#[test]
118fn enum_deserialize() {
119 assert_eq!(
120 Settings::default()
121 .byte_order(ByteOrder::Le)
122 .variant_index_type(VariantIndexType::U8)
123 .deserialize::<Enum>(&[0])
124 .unwrap(),
125 Enum::Unit
126 );
127 assert_eq!(
128 Settings::default()
129 .byte_order(ByteOrder::Le)
130 .variant_index_type(VariantIndexType::U16)
131 .deserialize::<Enum>(&[1, 0, 42, 0])
132 .unwrap(),
133 Enum::Type(42)
134 );
135 assert_eq!(
136 Settings::default()
137 .byte_order(ByteOrder::Le)
138 .variant_index_type(VariantIndexType::U32)
139 .deserialize::<Enum>(&[2, 0, 0, 0, 26, 0, 15])
140 .unwrap(),
141 Enum::Tuple(26, 15)
142 );
143 assert_eq!(
144 Settings::default()
145 .byte_order(ByteOrder::Be)
146 .variant_index_type(VariantIndexType::U64)
147 .deserialize::<Enum>(&[0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 37])
148 .unwrap(),
149 Enum::Struct { u32: 69, u64: 37 }
150 );
151}