v / vlib / encoding / binary / serialize_test.v
559 lines · 525 sloc · 17.07 KB · ab626909afbab80067d7d7550400ac75ec29a316
Raw
1module binary
2
3fn test_encode_decode_primitive_string() ! {
4 a_u8 := u8(137)
5 a_u16 := u16(5325)
6 a_u32 := u32(255421)
7 a_u64 := u64(2483294832)
8 a_i8 := i8(-11)
9 a_i16 := i16(-2321)
10 a_i32 := i32(-54322)
11 a_i64 := i64(-54212245)
12 a_int := int(-32135)
13 a_f32 := f32(1.37)
14 a_f64 := f64(-32144.3133)
15 a_bool := bool(true)
16 a_rune := `♥`
17 a_isize := isize(-45433)
18 a_usize := usize(432211)
19 a_string := '♥🖊dsser333100'
20
21 b_u8 := encode_binary(a_u8)!
22 b_u16 := encode_binary(a_u16)!
23 b_u32 := encode_binary(a_u32)!
24 b_u64 := encode_binary(a_u64)!
25 b_i8 := encode_binary(a_i8)!
26 b_i16 := encode_binary(a_i16)!
27 b_i32 := encode_binary(a_i32)!
28 b_i64 := encode_binary(a_i64)!
29 b_int := encode_binary(a_int)!
30 b_f32 := encode_binary(a_f32)!
31 b_f64 := encode_binary(a_f64)!
32 b_bool := encode_binary(a_bool)!
33 b_rune := encode_binary(a_rune)!
34 b_isize := encode_binary(a_isize)!
35 b_usize := encode_binary(a_usize)!
36 b_string := encode_binary(a_string)!
37
38 c_u8 := decode_binary[u8](b_u8)!
39 c_u16 := decode_binary[u16](b_u16)!
40 c_u32 := decode_binary[u32](b_u32)!
41 c_u64 := decode_binary[u64](b_u64)!
42 c_i8 := decode_binary[i8](b_i8)!
43 c_i16 := decode_binary[i16](b_i16)!
44 c_i32 := decode_binary[i32](b_i32)!
45 c_i64 := decode_binary[i64](b_i64)!
46 c_int := decode_binary[int](b_int)!
47 c_f32 := decode_binary[f32](b_f32)!
48 c_f64 := decode_binary[f64](b_f64)!
49 c_bool := decode_binary[bool](b_bool)!
50 c_rune := decode_binary[rune](b_rune)!
51 c_isize := decode_binary[isize](b_isize)!
52 c_usize := decode_binary[usize](b_usize)!
53 c_string := decode_binary[string](b_string)!
54
55 assert a_u8 == c_u8
56 assert a_u16 == c_u16
57 assert a_u32 == c_u32
58 assert a_u64 == c_u64
59 assert a_i8 == c_i8
60 assert a_i16 == c_i16
61 assert a_i32 == c_i32
62 assert a_i64 == c_i64
63 assert a_int == c_int
64 assert a_f32 == c_f32
65 assert a_f64 == c_f64
66 assert a_bool == c_bool
67 assert a_rune == c_rune
68 assert a_isize == c_isize
69 assert a_usize == c_usize
70 assert a_string == c_string
71
72 assert b_u8 == [u8(137)]
73 assert b_u16 == [u8(205), 20]
74 assert b_u32 == [u8(189), 229, 3, 0]
75 assert b_u64 == [u8(112), 18, 4, 148, 0, 0, 0, 0]
76 assert b_i8 == [u8(245)]
77 assert b_i16 == [u8(239), 246]
78 assert b_i32 == [u8(206), 43, 255, 255]
79 assert b_i64 == [u8(107), 201, 196, 252, 255, 255, 255, 255]
80 assert b_int == [u8(121), 130, 255, 255, 255, 255, 255, 255]
81 assert b_f32 == [u8(41), 92, 175, 63]
82 assert b_f64 == [u8(118), 113, 27, 13, 20, 100, 223, 192]
83 assert b_bool == [u8(1)]
84 assert b_rune == [u8(101), 38, 0, 0]
85 assert b_string == [u8(18), 0, 0, 0, 0, 0, 0, 0, 226, 153, 165, 240, 159, 150, 138, 100, 115,
86 115, 101, 114, 51, 51, 51, 49, 48, 48]
87 $if x64 {
88 assert b_isize == [u8(135), 78, 255, 255, 255, 255, 255, 255]
89 assert b_usize == [u8(83), 152, 6, 0, 0, 0, 0, 0]
90 } $else {
91 assert b_isize == [u8(135), 78, 255, 255]
92 assert b_usize == [u8(83), 152, 6, 0]
93 }
94}
95
96fn test_encode_decode_array() {
97 a_u8 := [u8(137), 21]
98 a_u16 := [u16(5325), 322]
99 a_u32 := [u32(255421), 34255]
100 a_u64 := [u64(2483294832), 321554321]
101 a_i8 := [i8(-11), 17]
102 a_i16 := [i16(-2321), 6543]
103 a_i32 := [i32(-54322), 23326]
104 a_i64 := [i64(-54212245), 54223333]
105 a_int := [int(-32135), 732561]
106 a_f32 := [f32(1.37), -5442.3]
107 a_f64 := [f64(-32144.3133), 432e-13]
108 a_bool := [bool(true), false]
109 a_rune := [`♥`, `🖊`]
110 a_isize := [isize(-45433), 24342]
111 a_usize := [usize(432211), 888533]
112 a_string := ['♥', '🖊', 'dfd21']
113
114 b_u8 := encode_binary(a_u8)!
115 b_u16 := encode_binary(a_u16)!
116 b_u32 := encode_binary(a_u32)!
117 b_u64 := encode_binary(a_u64)!
118 b_i8 := encode_binary(a_i8)!
119 b_i16 := encode_binary(a_i16)!
120 b_i32 := encode_binary(a_i32)!
121 b_i64 := encode_binary(a_i64)!
122 b_int := encode_binary(a_int)!
123 b_f32 := encode_binary(a_f32)!
124 b_f64 := encode_binary(a_f64)!
125 b_bool := encode_binary(a_bool)!
126 b_rune := encode_binary(a_rune)!
127 b_isize := encode_binary(a_isize)!
128 b_usize := encode_binary(a_usize)!
129 b_string := encode_binary(a_string)!
130
131 c_u8 := decode_binary[[]u8](b_u8)!
132 c_u16 := decode_binary[[]u16](b_u16)!
133 c_u32 := decode_binary[[]u32](b_u32)!
134 c_u64 := decode_binary[[]u64](b_u64)!
135 c_i8 := decode_binary[[]i8](b_i8)!
136 c_i16 := decode_binary[[]i16](b_i16)!
137 c_i32 := decode_binary[[]i32](b_i32)!
138 c_i64 := decode_binary[[]i64](b_i64)!
139 c_int := decode_binary[[]int](b_int)!
140 c_f32 := decode_binary[[]f32](b_f32)!
141 c_f64 := decode_binary[[]f64](b_f64)!
142 c_bool := decode_binary[[]bool](b_bool)!
143 c_rune := decode_binary[[]rune](b_rune)!
144 c_isize := decode_binary[[]isize](b_isize)!
145 c_usize := decode_binary[[]usize](b_usize)!
146 c_string := decode_binary[[]string](b_string)!
147
148 assert a_u8 == c_u8
149 assert a_u16 == c_u16
150 assert a_u32 == c_u32
151 assert a_u64 == c_u64
152 assert a_i8 == c_i8
153 assert a_i16 == c_i16
154 assert a_i32 == c_i32
155 assert a_i64 == c_i64
156 assert a_int == c_int
157 assert a_f32 == c_f32
158 assert a_f64 == c_f64
159 assert a_bool == c_bool
160 assert a_rune == c_rune
161 assert a_isize == c_isize
162 assert a_usize == c_usize
163 assert a_string == c_string
164
165 assert b_u8 == [u8(2), 0, 0, 0, 0, 0, 0, 0, 137, 21]
166 assert b_u16 == [u8(2), 0, 0, 0, 0, 0, 0, 0, 205, 20, 66, 1]
167 assert b_u32 == [u8(2), 0, 0, 0, 0, 0, 0, 0, 189, 229, 3, 0, 207, 133, 0, 0]
168 assert b_u64 == [u8(2), 0, 0, 0, 0, 0, 0, 0, 112, 18, 4, 148, 0, 0, 0, 0, 145, 135, 42, 19,
169 0, 0, 0, 0]
170 assert b_i8 == [u8(2), 0, 0, 0, 0, 0, 0, 0, 245, 17]
171 assert b_i16 == [u8(2), 0, 0, 0, 0, 0, 0, 0, 239, 246, 143, 25]
172 assert b_i32 == [u8(2), 0, 0, 0, 0, 0, 0, 0, 206, 43, 255, 255, 30, 91, 0, 0]
173 assert b_i64 == [u8(2), 0, 0, 0, 0, 0, 0, 0, 107, 201, 196, 252, 255, 255, 255, 255, 229, 97,
174 59, 3, 0, 0, 0, 0]
175 assert b_int == [u8(2), 0, 0, 0, 0, 0, 0, 0, 121, 130, 255, 255, 255, 255, 255, 255, 145, 45,
176 11, 0, 0, 0, 0, 0]
177 assert b_f32 == [u8(2), 0, 0, 0, 0, 0, 0, 0, 41, 92, 175, 63, 102, 18, 170, 197]
178 assert b_f64 == [u8(2), 0, 0, 0, 0, 0, 0, 0, 118, 113, 27, 13, 20, 100, 223, 192, 253, 251,
179 253, 7, 220, 191, 199, 61]
180 assert b_bool == [u8(2), 0, 0, 0, 0, 0, 0, 0, 1, 0]
181 assert b_rune == [u8(2), 0, 0, 0, 0, 0, 0, 0, 101, 38, 0, 0, 138, 245, 1, 0]
182 assert b_string == [u8(3), 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 226, 153, 165, 4, 0,
183 0, 0, 0, 0, 0, 0, 240, 159, 150, 138, 5, 0, 0, 0, 0, 0, 0, 0, 100, 102, 100, 50, 49]
184 $if x64 {
185 assert b_isize == [u8(2), 0, 0, 0, 0, 0, 0, 0, 135, 78, 255, 255, 255, 255, 255, 255, 22,
186 95, 0, 0, 0, 0, 0, 0]
187 assert b_usize == [u8(2), 0, 0, 0, 0, 0, 0, 0, 83, 152, 6, 0, 0, 0, 0, 0, 213, 142, 13,
188 0, 0, 0, 0, 0]
189 } $else {
190 assert b_isize == [u8(2), 0, 0, 0, 0, 0, 0, 0, 135, 78, 255, 255, 22, 95, 0, 0]
191 assert b_usize == [u8(2), 0, 0, 0, 0, 0, 0, 0, 83, 152, 6, 0, 213, 142, 13, 0]
192 }
193}
194
195struct St {
196 i int
197}
198
199fn test_encode_decode_map() {
200 a_map_string_string := {
201 'abc': 'def'
202 }
203 a_map_string_int := {
204 'abc': int(21343)
205 }
206 a_map_string_u8 := {
207 'abc': u8(37)
208 }
209 a_map_string_u16 := {
210 'abc': u16(3347)
211 }
212 a_map_string_u32 := {
213 'abc': u32(333347)
214 }
215 a_map_string_u64 := {
216 'abc': u64(64423)
217 }
218 a_map_string_i8 := {
219 'abc': i8(-37)
220 }
221 a_map_string_i16 := {
222 'abc': i16(-3347)
223 }
224 a_map_string_i32 := {
225 'abc': i32(-333347)
226 }
227 a_map_string_i64 := {
228 'abc': i64(-64423)
229 }
230 a_map_string_f32 := {
231 'abc': f32(1.543)
232 }
233 a_map_string_f64 := {
234 'abc': f64(1.54e31)
235 }
236 a_map_string_bool := {
237 'abc': true
238 }
239 a_map_string_rune := {
240 'abc': `♥`
241 }
242 a_map_string_isize := {
243 'abc': isize(-45433)
244 }
245 a_map_string_usize := {
246 'abc': usize(432211)
247 }
248
249 a_map_string_struct := {
250 's': St{1}
251 }
252
253 b_map_string_string := encode_binary(a_map_string_string)!
254 b_map_string_int := encode_binary(a_map_string_int)!
255 b_map_string_u8 := encode_binary(a_map_string_u8)!
256 b_map_string_u16 := encode_binary(a_map_string_u16)!
257 b_map_string_u32 := encode_binary(a_map_string_u32)!
258 b_map_string_u64 := encode_binary(a_map_string_u64)!
259 b_map_string_i8 := encode_binary(a_map_string_i8)!
260 b_map_string_i16 := encode_binary(a_map_string_i16)!
261 b_map_string_i32 := encode_binary(a_map_string_i32)!
262 b_map_string_i64 := encode_binary(a_map_string_i64)!
263 b_map_string_f32 := encode_binary(a_map_string_f32)!
264 b_map_string_f64 := encode_binary(a_map_string_f64)!
265 b_map_string_bool := encode_binary(a_map_string_bool)!
266 b_map_string_rune := encode_binary(a_map_string_rune)!
267 b_map_string_isize := encode_binary(a_map_string_isize)!
268 b_map_string_usize := encode_binary(a_map_string_usize)!
269 b_map_string_struct := encode_binary(a_map_string_struct)!
270
271 c_map_string_string := decode_binary[map[string]string](b_map_string_string)!
272 c_map_string_int := decode_binary[map[string]int](b_map_string_int)!
273 c_map_string_u8 := decode_binary[map[string]u8](b_map_string_u8)!
274 c_map_string_u16 := decode_binary[map[string]u16](b_map_string_u16)!
275 c_map_string_u32 := decode_binary[map[string]u32](b_map_string_u32)!
276 c_map_string_u64 := decode_binary[map[string]u64](b_map_string_u64)!
277 c_map_string_i8 := decode_binary[map[string]i8](b_map_string_i8)!
278 c_map_string_i16 := decode_binary[map[string]i16](b_map_string_i16)!
279 c_map_string_i32 := decode_binary[map[string]i32](b_map_string_i32)!
280 c_map_string_i64 := decode_binary[map[string]i64](b_map_string_i64)!
281 c_map_string_f32 := decode_binary[map[string]f32](b_map_string_f32)!
282 c_map_string_f64 := decode_binary[map[string]f64](b_map_string_f64)!
283 c_map_string_bool := decode_binary[map[string]bool](b_map_string_bool)!
284 c_map_string_rune := decode_binary[map[string]rune](b_map_string_rune)!
285 c_map_string_isize := decode_binary[map[string]isize](b_map_string_isize)!
286 c_map_string_usize := decode_binary[map[string]usize](b_map_string_usize)!
287 c_map_string_struct := decode_binary[map[string]St](b_map_string_struct)!
288
289 assert a_map_string_string == c_map_string_string
290 assert a_map_string_int == c_map_string_int
291 assert a_map_string_u8 == c_map_string_u8
292 assert a_map_string_u16 == c_map_string_u16
293 assert a_map_string_u32 == c_map_string_u32
294 assert a_map_string_i8 == c_map_string_i8
295 assert a_map_string_i16 == c_map_string_i16
296 assert a_map_string_i32 == c_map_string_i32
297 assert a_map_string_i64 == c_map_string_i64
298 assert a_map_string_f32 == c_map_string_f32
299 assert a_map_string_f64 == c_map_string_f64
300 assert a_map_string_bool == c_map_string_bool
301 assert a_map_string_rune == c_map_string_rune
302 assert a_map_string_isize == c_map_string_isize
303 assert a_map_string_usize == c_map_string_usize
304 assert a_map_string_struct == c_map_string_struct
305
306 assert b_map_string_string == [u8(1), 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 97, 98,
307 99, 3, 0, 0, 0, 0, 0, 0, 0, 100, 101, 102]
308 assert b_map_string_int == [u8(1), 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 97, 98, 99,
309 95, 83, 0, 0, 0, 0, 0, 0]
310 assert b_map_string_u8 == [u8(1), 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 97, 98, 99,
311 37]
312 assert b_map_string_u16 == [u8(1), 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 97, 98, 99,
313 19, 13]
314 assert b_map_string_u32 == [u8(1), 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 97, 98, 99,
315 35, 22, 5, 0]
316 assert b_map_string_u64 == [u8(1), 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 97, 98, 99,
317 167, 251, 0, 0, 0, 0, 0, 0]
318 assert b_map_string_i8 == [u8(1), 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 97, 98, 99,
319 219]
320 assert b_map_string_i16 == [u8(1), 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 97, 98, 99,
321 237, 242]
322 assert b_map_string_i32 == [u8(1), 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 97, 98, 99,
323 221, 233, 250, 255]
324 assert b_map_string_i64 == [u8(1), 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 97, 98, 99,
325 89, 4, 255, 255, 255, 255, 255, 255]
326 assert b_map_string_f32 == [u8(1), 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 97, 98, 99,
327 6, 129, 197, 63]
328 assert b_map_string_f64 == [u8(1), 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 97, 98, 99,
329 212, 186, 221, 173, 2, 76, 104, 70]
330 assert b_map_string_bool == [u8(1), 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 97, 98, 99,
331 1]
332 assert b_map_string_rune == [u8(1), 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 97, 98, 99,
333 101, 38, 0, 0]
334 $if x64 {
335 assert b_map_string_isize == [u8(1), 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 97, 98,
336 99, 135, 78, 255, 255, 255, 255, 255, 255]
337 assert b_map_string_usize == [u8(1), 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 97, 98,
338 99, 83, 152, 6, 0, 0, 0, 0, 0]
339 } $else {
340 assert b_map_string_isize == [u8(1), 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 97, 98,
341 99, 135, 78, 255, 255]
342 assert b_map_string_usize == [u8(1), 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 97, 98,
343 99, 83, 152, 6, 0]
344 }
345 assert b_map_string_struct == [u8(1), 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 115, 1,
346 0, 0, 0, 0, 0, 0, 0]
347}
348
349struct MyStruct {
350 f_u8 u8
351 f_u16 u16
352 f_u32 u32
353 f_u64 u64
354 f_i8 i8
355 f_i16 i16
356 f_i32 i32
357 f_i64 i64
358 f_int int
359 f_f32 f32
360 f_f64 f64
361 f_bool bool
362 f_rune rune
363 f_isize isize
364 f_usize usize
365 f_string string
366 f_array_u8 []u8
367 f_array_string []string
368}
369
370fn test_encode_decode_struct() {
371 a_struct := MyStruct{
372 f_u8: u8(31)
373 f_u16: u16(57)
374 f_u32: u32(6432)
375 f_u64: u64(7896423)
376 f_i8: i8(-22)
377 f_i16: i16(-5433)
378 f_i32: i32(-54244)
379 f_i64: i64(-8322234)
380 f_int: int(4235)
381 f_f32: f32(1.5382)
382 f_f64: f64(22421.32)
383 f_bool: bool(true)
384 f_rune: rune(`♥`)
385 f_isize: isize(42323)
386 f_usize: usize(83842)
387 f_string: 'fds♥323s'
388 f_array_u8: [u8(32), 22, 55, 72]
389 f_array_string: ['dfdss', 'dfsd3', '54344']
390 }
391
392 b_struct := encode_binary(a_struct)!
393 c_struct := decode_binary[MyStruct](b_struct)!
394
395 assert a_struct == c_struct
396}
397
398struct MyStruct_SkipFields {
399mut:
400 f_u8 u8
401 f_u16 u16 @[serialize: '-']
402 f_u32 u32
403 f_u64 u64
404 f_i8 i8
405 f_i16 i16
406 f_i32 i32
407 f_i64 i64
408 f_int int
409 f_f32 f32
410 f_f64 f64
411 f_bool bool
412 f_rune rune
413 f_isize isize
414 f_usize usize
415 f_string string
416 f_array_u8 []u8 @[serialize: '-']
417 f_array_string []string
418}
419
420fn test_encode_decode_struct_skip_fields() {
421 a_struct := MyStruct_SkipFields{
422 f_u8: u8(31)
423 f_u16: u16(57)
424 f_u32: u32(6432)
425 f_u64: u64(7896423)
426 f_i8: i8(-22)
427 f_i16: i16(-5433)
428 f_i32: i32(-54244)
429 f_i64: i64(-8322234)
430 f_int: int(4235)
431 f_f32: f32(1.5382)
432 f_f64: f64(22421.32)
433 f_bool: bool(true)
434 f_rune: rune(`♥`)
435 f_isize: isize(42323)
436 f_usize: usize(83842)
437 f_string: 'fds♥323s'
438 f_array_u8: [u8(32), 22, 55, 72]
439 f_array_string: ['dfdss', 'dfsd3', '54344']
440 }
441
442 b_struct := encode_binary(a_struct)!
443 mut c_struct := decode_binary[MyStruct_SkipFields](b_struct)!
444
445 assert a_struct != c_struct
446
447 c_struct.f_u16 = u16(57)
448 c_struct.f_array_u8 = [u8(32), 22, 55, 72]
449 assert a_struct == c_struct
450}
451
452struct ComplexStruct {
453 f_u8 u8
454 f_u32 u32
455 f_u64 u64
456 f_string string
457 f_structs []MyStruct
458 f_maps []map[string]string
459}
460
461fn test_encode_decode_complex() {
462 a_complex := ComplexStruct{
463 f_u8: u8(78)
464 f_u32: u32(0x11223344)
465 f_u64: u64(0x55667788)
466 f_string: 'complex'
467 f_structs: [
468 MyStruct{
469 f_u8: u8(31)
470 f_u16: u16(57)
471 f_u32: u32(6432)
472 f_u64: u64(7896423)
473 f_i8: i8(-22)
474 f_i16: i16(-5433)
475 f_i32: i32(-54244)
476 f_i64: i64(-8322234)
477 f_int: int(4235)
478 f_f32: f32(1.5382)
479 f_f64: f64(22421.32)
480 f_bool: bool(true)
481 f_rune: rune(`♥`)
482 f_isize: isize(42323)
483 f_usize: usize(83842)
484 f_string: 'fds♥323s'
485 f_array_u8: [u8(32), 22, 55, 72]
486 f_array_string: ['dfdss', 'dfsd3', '54344']
487 },
488 MyStruct{
489 f_u8: u8(41)
490 f_u16: u16(67)
491 f_u32: u32(7432)
492 f_u64: u64(8896423)
493 f_i8: i8(-32)
494 f_i16: i16(-6433)
495 f_i32: i32(-64244)
496 f_i64: i64(-9322234)
497 f_int: int(5235)
498 f_f32: f32(2.5382)
499 f_f64: f64(32421.32)
500 f_bool: bool(true)
501 f_rune: rune(`♥`)
502 f_isize: isize(52323)
503 f_usize: usize(93842)
504 f_string: 'ads♥323s'
505 f_array_u8: [u8(22), 22, 55, 72]
506 f_array_string: ['dxfdss', 'dsefsd3', 'po54344']
507 },
508 ]
509 f_maps: [
510 {
511 'abc': 'def'
512 },
513 {
514 '123': '456'
515 },
516 {
517 ',./': '!@#'
518 },
519 ]
520 }
521
522 b_complex := encode_binary(a_complex)!
523 c_complex := decode_binary[ComplexStruct](b_complex)!
524
525 assert a_complex == c_complex
526
527 // big endian test
528 b_complex_big_endian := encode_binary(a_complex, big_endian: true)!
529 c_complex_big_endian := decode_binary[ComplexStruct](b_complex_big_endian, big_endian: true)!
530
531 assert b_complex != b_complex_big_endian
532 assert a_complex == c_complex_big_endian
533}
534
535struct SharedFieldStruct {
536pub mut:
537 a int
538 b shared map[string]string
539 c int
540}
541
542fn test_skip_shared_field() {
543 x := SharedFieldStruct{
544 a: 100
545 b: {
546 'a': 'a'
547 'b': 'b'
548 }
549 c: 200
550 }
551 x_u8 := encode_binary(x)!
552 assert x_u8 == [u8(100), 0, 0, 0, 0, 0, 0, 0, 200, 0, 0, 0, 0, 0, 0, 0]
553 y := decode_binary[SharedFieldStruct](x_u8)!
554 assert '${y}' == 'binary.SharedFieldStruct{
555 a: 100
556 b: {}
557 c: 200
558}'
559}
560