| 1 | import hash.adler32 |
| 2 | |
| 3 | fn 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 | |
| 9 | fn 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 | |
| 16 | fn 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 | |
| 30 | fn 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 | |
| 53 | fn 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 | |
| 61 | fn test_adler32_large_input() { |
| 62 | data := 'a'.repeat(7000).bytes() |
| 63 | assert adler32.sum(data) == u32(0x1a305cef) |
| 64 | } |
| 65 | |