65 lines
1.6 KiB
V
65 lines
1.6 KiB
V
import hash.adler32
|
|
|
|
fn test_adler32_rfc_vectors() {
|
|
assert adler32.sum([]u8{}) == u32(0x00000001)
|
|
assert adler32.sum('123456789'.bytes()) == u32(0x091e01de)
|
|
assert adler32.sum('Wikipedia'.bytes()) == u32(0x11e60398)
|
|
}
|
|
|
|
fn test_adler32_basic_aliases() {
|
|
data := 'Hello world!'.bytes()
|
|
expected := u32(0x1d09045e)
|
|
assert adler32.checksum(data) == expected
|
|
assert adler32.sum(data) == expected
|
|
}
|
|
|
|
fn test_adler32_update_matches_full_sum() {
|
|
data := 'streaming adler32 data'.bytes()
|
|
part1 := data[..8]
|
|
part2 := data[8..14]
|
|
part3 := data[14..]
|
|
|
|
mut state := u32(1)
|
|
state = adler32.update(state, part1)
|
|
state = adler32.update(state, part2)
|
|
state = adler32.update(state, part3)
|
|
|
|
assert state == adler32.sum(data)
|
|
}
|
|
|
|
fn test_adler32_update_state_matches_update() {
|
|
data := ('chunked data '.repeat(80)).bytes()
|
|
mut via_state := u32(1)
|
|
mut via_update := u32(1)
|
|
for chunk_size in [1, 2, 3, 5, 8, 16, 64, 257] {
|
|
mut state_a := u32(1)
|
|
mut state_b := u32(1)
|
|
mut i := 0
|
|
for i < data.len {
|
|
end := if i + chunk_size < data.len { i + chunk_size } else { data.len }
|
|
chunk := data[i..end]
|
|
state_a = adler32.update_state(state_a, chunk)
|
|
state_b = adler32.update(state_b, chunk)
|
|
i = end
|
|
}
|
|
assert state_a == adler32.sum(data)
|
|
assert state_b == adler32.sum(data)
|
|
via_state = state_a
|
|
via_update = state_b
|
|
}
|
|
assert via_state == via_update
|
|
}
|
|
|
|
fn test_adler32_all_bytes() {
|
|
mut all_bytes := []u8{len: 256}
|
|
for i in 0 .. 256 {
|
|
all_bytes[i] = u8(i)
|
|
}
|
|
assert adler32.sum(all_bytes) == u32(0xadf67f81)
|
|
}
|
|
|
|
fn test_adler32_large_input() {
|
|
data := 'a'.repeat(7000).bytes()
|
|
assert adler32.sum(data) == u32(0x1a305cef)
|
|
}
|