v2 / vlib / v / gen / js / sourcemap / vlq / vlq_decode_test.v
52 lines · 43 sloc · 890 bytes · 18e60e77de77785c773cb8908cd99a9514cb9bb8
Raw
1module vlq
2
3import io
4
5struct TestReader {
6pub:
7 bytes []u8
8mut:
9 i int
10}
11
12struct TestData {
13 decode_val string
14 expected i64
15}
16
17type TestDataList = []TestData
18
19fn test_decode_a() {
20 decode_values := [
21 TestData{'A', 0},
22 TestData{'C', 1},
23 TestData{'D', -1},
24 TestData{'2H', 123},
25 TestData{'qxmvrH', 123456789},
26 TestData{'+/////B', 1073741823}, // 2^30-1
27 // TestData{'hgggggggggggI', 9_223_372_036_854_775_808} // 2^63
28 ]
29
30 for _, test_data in decode_values {
31 mut input := make_test_reader(test_data.decode_val)
32
33 res := decode(mut &input)!
34 assert res == test_data.expected
35 }
36}
37
38fn (mut b TestReader) read(mut buf []u8) !int {
39 if !(b.i < b.bytes.len) {
40 return io.Eof{}
41 }
42 n := copy(mut buf, b.bytes[b.i..])
43 b.i += n
44 return n
45}
46
47fn make_test_reader(data string) io.Reader {
48 buf := &TestReader{
49 bytes: data.bytes()
50 }
51 return io.new_buffered_reader(reader: buf)
52}
53