v / vlib / hash / adler32 / adler32_test.v
64 lines · 56 sloc · 1.61 KB · c410aee218fca542202f5601d77f214746dceb5f
Raw
1import hash.adler32
2
3fn test_adler32_rfc_vectors() {
4 assert adler32.sum([]u8{}) == u32(0x00000001)
5 assert adler32.sum('123456789'.bytes()) == u32(0x091e01de)
6 assert adler32.sum('Wikipedia'.bytes()) == u32(0x11e60398)
7}
8
9fn test_adler32_basic_aliases() {
10 data := 'Hello world!'.bytes()
11 expected := u32(0x1d09045e)
12 assert adler32.checksum(data) == expected
13 assert adler32.sum(data) == expected
14}
15
16fn test_adler32_update_matches_full_sum() {
17 data := 'streaming adler32 data'.bytes()
18 part1 := data[..8]
19 part2 := data[8..14]
20 part3 := data[14..]
21
22 mut state := u32(1)
23 state = adler32.update(state, part1)
24 state = adler32.update(state, part2)
25 state = adler32.update(state, part3)
26
27 assert state == adler32.sum(data)
28}
29
30fn test_adler32_update_state_matches_update() {
31 data := ('chunked data '.repeat(80)).bytes()
32 mut via_state := u32(1)
33 mut via_update := u32(1)
34 for chunk_size in [1, 2, 3, 5, 8, 16, 64, 257] {
35 mut state_a := u32(1)
36 mut state_b := u32(1)
37 mut i := 0
38 for i < data.len {
39 end := if i + chunk_size < data.len { i + chunk_size } else { data.len }
40 chunk := data[i..end]
41 state_a = adler32.update_state(state_a, chunk)
42 state_b = adler32.update(state_b, chunk)
43 i = end
44 }
45 assert state_a == adler32.sum(data)
46 assert state_b == adler32.sum(data)
47 via_state = state_a
48 via_update = state_b
49 }
50 assert via_state == via_update
51}
52
53fn test_adler32_all_bytes() {
54 mut all_bytes := []u8{len: 256}
55 for i in 0 .. 256 {
56 all_bytes[i] = u8(i)
57 }
58 assert adler32.sum(all_bytes) == u32(0xadf67f81)
59}
60
61fn test_adler32_large_input() {
62 data := 'a'.repeat(7000).bytes()
63 assert adler32.sum(data) == u32(0x1a305cef)
64}
65