v/vlib/x/encoding/asn1/set_test.v

107 lines
2.6 KiB
V

// Copyright (c) 2022, 2023 blackshirt. All rights reserved.
// Use of this source code is governed by a MIT License
// that can be found in the LICENSE file.
module asn1
fn test_sort_the_set() {
mut objs := Set.new()!
val12 := Integer.from_i64(12)
val32 := Integer.from_i64(32)
valbol := Boolean.new(false)
valnull := Null{}
valapp := RawElement.new(Tag{.application, false, 34}, [u8(44), 45])!
valctx := RawElement.new(Tag{.context_specific, false, 35}, [u8(50), 55])!
objs.add_element(val12)! // tag: 2
objs.add_element(val32)! // tag: 2
objs.add_element(valctx)! //
objs.add_element(valapp)! //
objs.add_element(valbol)! // tag: 1
objs.add_element(valnull)! // tag: 5
awal := objs.fields.clone()
mut exp := Set.new()!
exp.add_element(valbol)!
exp.add_element(val12)!
exp.add_element(val32)!
exp.add_element(valnull)!
exp.add_element(valapp)!
exp.add_element(valctx)!
// [valbol, val12, val32, valnull, valapp, valctx]}
objs.sort_set_fields()
// this not compiled with -cstrict option
// assert awal != objs.fields
assert objs.equal(exp)
}
fn test_sort_the_setof() ! {
mut objs := SetOf.new[Integer]()!
val1 := Integer.from_i64(1)
val2 := Integer.from_i64(12)
val3 := Integer.from_i64(323)
val4 := Integer.from_i64(4325)
val5 := Integer.from_i64(44446)
val0 := Integer.from_i64(0)
val6 := Boolean.new(false)
// randomly added to array
objs.add_element(val4)! // tag: 2
objs.add_element(val2)! // tag: 2
objs.add_element(val5)! // tag: 2
objs.add_element(val1)! // tag: 2
objs.add_element(val3)! // tag: 2
objs.add_element(val0)! // tag: 2
awal := objs.fields.clone()
awalexp := [val4, val2, val5, val1, val3, val0]
assert awal == awalexp
// dump(objs)
objs.sort_setof_fields()
// dump(objs)
exp := [val0, val1, val2, val3, val4, val5]
assert awal != objs.fields
assert objs.fields == exp
}
fn test_set_encode() ! {
mut set1 := Set.new()!
set1.add_element(Boolean.new(false))!
set1.add_element(Null{})!
set1.add_element(Integer.from_int(4))!
// boolean tag:1 length: 3, integer tag:2 length: 3, null tag: 5 length: 2, total length: 8
// so, it should sort to
// [boolean, integer, null]
exp := [u8(0x31), 8, 1, 1, 0, 2, 1, 4, 5, 0]
out := encode(set1)!
assert out == exp
back, _ := Set.decode(exp)!
backout := encode(back)!
assert out == backout
}
fn test_setof_encode() ! {
mut set1 := SetOf.new[Integer]()!
set1.add_element(Integer.from_int(55))!
set1.add_element(Integer.from_int(4))!
set1.add_element(Integer.from_int(666))!
// 666 serialized to [2, 154]
// encoded sort: [int1, int2, int3]
exp := [u8(0x31), 10, 2, 1, 4, 2, 1, 55, 2, 2, 2, 0x9a]
out := encode(set1)!
assert out == exp
// todo : decode back
}