v2 / vlib / v / slow_tests / valgrind / base64.v
59 lines · 48 sloc · 1.61 KB · 19f080ffb8f8f01976692f6b79d9f857c685e109
Raw
1import encoding.base64
2
3fn main() {
4 repeats := 1000
5 input_size := 3000
6
7 s_original := []u8{len: input_size, init: `a`}
8 s_encoded := base64.encode(s_original)
9 s_encoded_bytes := s_encoded.bytes()
10 s_decoded := base64.decode(s_encoded)
11
12 assert s_encoded.len > s_original.len
13 assert s_original == s_decoded
14
15 ebuffer := unsafe { malloc(s_encoded.len) }
16 dbuffer := unsafe { malloc(s_decoded.len) }
17 defer {
18 unsafe { free(ebuffer) }
19 unsafe { free(dbuffer) }
20 }
21
22 encoded_size := base64.encode_in_buffer(s_original, ebuffer)
23 mut encoded_in_buf := []u8{len: encoded_size}
24 unsafe { vmemcpy(encoded_in_buf.data, ebuffer, encoded_size) }
25 assert input_size * 4 / 3 == encoded_size
26 assert encoded_in_buf[0] == `Y`
27 assert encoded_in_buf[1] == `W`
28 assert encoded_in_buf[2] == `F`
29 assert encoded_in_buf[3] == `h`
30
31 assert encoded_in_buf[encoded_size - 4] == `Y`
32 assert encoded_in_buf[encoded_size - 3] == `W`
33 assert encoded_in_buf[encoded_size - 2] == `F`
34 assert encoded_in_buf[encoded_size - 1] == `h`
35
36 assert encoded_in_buf == s_encoded_bytes
37
38 decoded_size := base64.decode_in_buffer(s_encoded, dbuffer)
39 assert decoded_size == input_size
40 mut decoded_in_buf := []u8{len: decoded_size}
41 unsafe { vmemcpy(decoded_in_buf.data, dbuffer, decoded_size) }
42 assert decoded_in_buf == s_original
43
44 mut s := 0
45 for _ in 0 .. repeats {
46 resultsize := base64.encode_in_buffer(s_original, ebuffer)
47 s += resultsize
48 assert resultsize == s_encoded.len
49 }
50
51 for _ in 0 .. repeats {
52 resultsize := base64.decode_in_buffer(s_encoded, dbuffer)
53 s += resultsize
54 assert resultsize == s_decoded.len
55 }
56
57 println('Final s: ${s}')
58 // assert s == 39147008
59}
60