mirror of
https://github.com/vlang/v.git
synced 2025-08-04 02:07:28 -04:00
78 lines
1.6 KiB
V
78 lines
1.6 KiB
V
// Copyright (c) 2022, 2024 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_encode_decode_numericstring_basic() {
|
|
str := '98'
|
|
exp := [u8(0x12), 0x02, 57, 56]
|
|
|
|
ns := NumericString.new(str)!
|
|
out := encode(ns)!
|
|
assert out == exp
|
|
|
|
// decode back
|
|
nsback, _ := NumericString.decode(out)!
|
|
|
|
assert nsback.tag().tag_class() == .universal
|
|
assert nsback.tag().is_constructed() == false
|
|
assert nsback.tag().tag_number() == int(TagType.numericstring)
|
|
assert nsback.value == str
|
|
}
|
|
|
|
struct NumericalTest {
|
|
inp string
|
|
exp_length int
|
|
exp_bytelength []u8
|
|
exp_values []u8
|
|
exp_out []u8
|
|
err IError
|
|
}
|
|
|
|
fn test_encode_decode_numericstring_advanced() ! {
|
|
// maps string to repeat
|
|
m := {
|
|
'1': 1
|
|
'2': 10
|
|
'3': 128
|
|
'4': 256
|
|
'5': 65536 // its too long to repeat
|
|
//'6': 16777215
|
|
}
|
|
mut exp := []NumericalTest{}
|
|
for k, v in m {
|
|
s := k.repeat(v) // strings.repeat_string(k, v)
|
|
b := s.bytes()
|
|
ln := Length.new(b.len)!
|
|
mut dst := []u8{}
|
|
ln.encode(mut dst)!
|
|
|
|
d := NumericalTest{
|
|
inp: s
|
|
exp_length: dst.len
|
|
exp_bytelength: dst
|
|
exp_values: b
|
|
err: none
|
|
}
|
|
|
|
exp << d
|
|
}
|
|
|
|
for c in exp {
|
|
mut exp_out := [u8(TagType.numericstring)]
|
|
exp_out << c.exp_bytelength
|
|
exp_out << c.exp_values
|
|
ns := NumericString.new(c.inp) or {
|
|
assert err == c.err
|
|
continue
|
|
}
|
|
out := encode(ns)!
|
|
assert out == exp_out
|
|
|
|
// decode back
|
|
back, _ := NumericString.decode(out)!
|
|
|
|
assert back.value == c.inp
|
|
}
|
|
}
|