v2 / vlib / net / conv / conv_test.v
82 lines · 74 sloc · 2.1 KB · 4c30d357fe411947f52e414e10fad153fdccbb12
Raw
1import net.conv
2
3fn check[T](f fn (a T) T, finv fn (b T) T, x T) {
4 a := f(x)
5 b := finv(a)
6 assert b == x
7 // eprintln('> x: ${x:10} | a: ${a:10} | b: ${b:10}')
8 $if little_endian {
9 assert a != b
10 }
11 $if big_endian {
12 assert a == b
13 }
14}
15
16fn test_hton64_ntoh64() {
17 assert 0 == conv.hton64(0)
18 assert 0 == conv.ntoh64(0)
19 assert 0xFFFF_FFFF_FFFF_FFFF == conv.ntoh64(0xFFFF_FFFF_FFFF_FFFF)
20 assert 0xFFFF_FFFF_FFFF_FFFF == conv.hton64(0xFFFF_FFFF_FFFF_FFFF)
21 for x in [u64(1), 2, 128, 65536, 2147483648] {
22 check(conv.hton64, conv.ntoh64, x)
23 }
24}
25
26fn test_hton32_ntoh32() {
27 assert 0 == conv.hton32(0)
28 assert 0 == conv.ntoh32(0)
29 assert 0xFFFF_FFFF == conv.ntoh32(0xFFFF_FFFF)
30 assert 0x0101_0101 == conv.hton32(0x0101_0101)
31 for x in [u32(1), 2, 128, 65536, 2147483648] {
32 check(conv.hton32, conv.ntoh32, x)
33 }
34}
35
36fn test_hton16_ntoh16() {
37 assert 0 == conv.hton16(0)
38 assert 0 == conv.ntoh16(0)
39 assert 0xFFFF == conv.ntoh16(0xFFFF)
40 assert 0x0101 == conv.hton16(0x0101)
41 for x in [u16(1), 2, 128, 65534] {
42 check(conv.hton16, conv.ntoh16, x)
43 }
44}
45
46fn test_varinttou64_u64tovarint() {
47 b0 := conv.u64tovarint(0)!
48 assert b0 == [u8(0)]
49 b1 := conv.u64tovarint(1)!
50 assert b1 == [u8(1)]
51 mp := {
52 u64(128): [u8(0b01000000), 0b10000000]
53 1024: [u8(0b01000100), 0b00000000]
54 0xffff: [u8(0b10000000), 0, 0xff, 0xff]
55 u64(1) << 62 - 1: [u8(0xff), 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff]
56 }
57 for k, v in mp {
58 println('${k:b}:${v}')
59 n, len := conv.varinttou64(v)!
60 assert n == k
61 rn := conv.u64tovarint(k)!
62 assert rn == v
63 }
64}
65
66fn test_reverse_bytes_u64() {
67 assert 0 == conv.reverse_bytes_u64(0)
68 assert 0xFFFF_FFFF_FFFF_FFFF == conv.reverse_bytes_u64(0xFFFF_FFFF_FFFF_FFFF)
69 assert 0x12345678ABCDEF00 == conv.reverse_bytes_u64(0x00EFCDAB78563412)
70}
71
72fn test_reverse_bytes_u32() {
73 assert 0 == conv.reverse_bytes_u32(0)
74 assert 0xFFFF_FFFF == conv.reverse_bytes_u32(0xFFFF_FFFF)
75 assert 0x12345678 == conv.reverse_bytes_u32(0x78563412)
76}
77
78fn test_reverse_bytes_u16() {
79 assert 0 == conv.reverse_bytes_u16(0)
80 assert 0xFFFF == conv.reverse_bytes_u16(0xFFFF)
81 assert 0x1234 == conv.reverse_bytes_u16(0x3412)
82}
83