| 1 | module binary |
| 2 | |
| 3 | fn 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 | |
| 96 | fn 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 | |
| 195 | struct St { |
| 196 | i int |
| 197 | } |
| 198 | |
| 199 | fn 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 | |
| 349 | struct 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 | |
| 370 | fn 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 | |
| 398 | struct MyStruct_SkipFields { |
| 399 | mut: |
| 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 | |
| 420 | fn 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 | |
| 452 | struct 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 | |
| 461 | fn 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 | |
| 535 | struct SharedFieldStruct { |
| 536 | pub mut: |
| 537 | a int |
| 538 | b shared map[string]string |
| 539 | c int |
| 540 | } |
| 541 | |
| 542 | fn 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 | |