v2 / vlib / x / encoding / asn1 / set_test.v
106 lines · 85 sloc · 2.65 KB · 58fc4dead559901cad648fb695f31d0f6de9945a
Raw
1// Copyright (c) 2022, 2023 blackshirt. All rights reserved.
2// Use of this source code is governed by a MIT License
3// that can be found in the LICENSE file.
4module asn1
5
6fn test_sort_the_set() {
7 mut objs := Set.new()!
8
9 val12 := Integer.from_i64(12)
10 val32 := Integer.from_i64(32)
11 valbol := Boolean.new(false)
12 valnull := Null{}
13 valapp := RawElement.new(Tag{.application, false, 34}, [u8(44), 45])!
14 valctx := RawElement.new(Tag{.context_specific, false, 35}, [u8(50), 55])!
15
16 objs.add_element(val12)! // tag: 2
17 objs.add_element(val32)! // tag: 2
18 objs.add_element(valctx)! //
19 objs.add_element(valapp)! //
20 objs.add_element(valbol)! // tag: 1
21 objs.add_element(valnull)! // tag: 5
22
23 awal := objs.fields.clone()
24 mut exp := Set.new()!
25 exp.add_element(valbol)!
26 exp.add_element(val12)!
27 exp.add_element(val32)!
28 exp.add_element(valnull)!
29 exp.add_element(valapp)!
30 exp.add_element(valctx)!
31 // [valbol, val12, val32, valnull, valapp, valctx]}
32
33 objs.sort_set_fields()
34
35 // this not compiled with -cstrict option
36 // assert awal != objs.fields
37
38 assert objs.equal(exp)
39}
40
41fn test_sort_the_setof() ! {
42 mut objs := SetOf.new[Integer]()!
43
44 val1 := Integer.from_i64(1)
45 val2 := Integer.from_i64(12)
46 val3 := Integer.from_i64(323)
47 val4 := Integer.from_i64(4325)
48 val5 := Integer.from_i64(44446)
49 val0 := Integer.from_i64(0)
50 val6 := Boolean.new(false)
51
52 // randomly added to array
53 objs.add_element(val4)! // tag: 2
54 objs.add_element(val2)! // tag: 2
55 objs.add_element(val5)! // tag: 2
56 objs.add_element(val1)! // tag: 2
57 objs.add_element(val3)! // tag: 2
58 objs.add_element(val0)! // tag: 2
59
60 awal := objs.fields.clone()
61 awalexp := [val4, val2, val5, val1, val3, val0]
62 assert awal == awalexp
63 // dump(objs)
64
65 objs.sort_setof_fields()
66
67 // dump(objs)
68 exp := [val0, val1, val2, val3, val4, val5]
69 assert awal != objs.fields
70 assert objs.fields == exp
71}
72
73fn test_set_encode() ! {
74 mut set1 := Set.new()!
75
76 set1.add_element(Boolean.new(false))!
77 set1.add_element(Null{})!
78 set1.add_element(Integer.from_int(4))!
79 // boolean tag:1 length: 3, integer tag:2 length: 3, null tag: 5 length: 2, total length: 8
80 // so, it should sort to
81 // [boolean, integer, null]
82 exp := [u8(0x31), 8, 1, 1, 0, 2, 1, 4, 5, 0]
83 out := encode(set1)!
84
85 assert out == exp
86
87 back, _ := Set.decode(exp)!
88
89 backout := encode(back)!
90 assert out == backout
91}
92
93fn test_setof_encode() ! {
94 mut set1 := SetOf.new[Integer]()!
95
96 set1.add_element(Integer.from_int(55))!
97 set1.add_element(Integer.from_int(4))!
98 set1.add_element(Integer.from_int(666))!
99 // 666 serialized to [2, 154]
100 // encoded sort: [int1, int2, int3]
101 exp := [u8(0x31), 10, 2, 1, 4, 2, 1, 55, 2, 2, 2, 0x9a]
102 out := encode(set1)!
103
104 assert out == exp
105 // todo : decode back
106}
107