v/cmd/tools/bench/wyhash.v

57 lines
1.5 KiB
V
Raw Normal View History

module main
2020-04-26 08:32:05 +02:00
import hash.fnv1a
import hash as wyhash
2020-04-26 08:32:05 +02:00
import rand
import benchmark
fn main() {
rand.seed([u32(42), 0])
sample_size := 10000000
min_str_len := 20
max_str_len := 40
println('Generating $sample_size strings between $min_str_len - $max_str_len chars long...')
mut checksum := u64(0)
mut start_pos := 0
mut bgenerating := benchmark.start()
2020-04-26 13:49:31 +02:00
mut bytepile := []byte{}
for _ in 0 .. sample_size * max_str_len {
2022-04-15 13:58:56 +02:00
bytepile << u8(rand.int_in_range(40, 125) or { 40 })
}
2020-04-26 13:49:31 +02:00
mut str_lens := []int{}
for _ in 0 .. sample_size {
str_lens << rand.int_in_range(min_str_len, max_str_len) or { min_str_len }
}
bgenerating.measure('generating strings')
println('Hashing each of the generated strings...')
//
mut bhashing_1 := benchmark.start()
start_pos = 0
checksum = 0
for len in str_lens {
end_pos := start_pos + len
2022-04-15 13:58:56 +02:00
checksum ^= wyhash.wyhash_c(unsafe { &u8(bytepile.data) + start_pos }, u64(len),
1)
start_pos = end_pos
}
2020-08-22 12:29:15 +02:00
bhashing_1.measure('wyhash.wyhash_c | checksum: ${checksum:22}')
mut bhashing_2 := benchmark.start()
start_pos = 0
checksum = 0
for len in str_lens {
end_pos := start_pos + len
2020-08-22 12:29:15 +02:00
checksum ^= wyhash.sum64(bytepile[start_pos..end_pos], 1)
start_pos = end_pos
}
2020-08-22 12:29:15 +02:00
bhashing_2.measure('wyhash.sum64 | checksum: ${checksum:22}')
mut bhashing_3 := benchmark.start()
start_pos = 0
checksum = 0
for len in str_lens {
end_pos := start_pos + len
2020-08-22 12:29:15 +02:00
checksum ^= fnv1a.sum64(bytepile[start_pos..end_pos])
start_pos = end_pos
}
2020-08-22 12:29:15 +02:00
bhashing_3.measure('fnv1a.sum64 | checksum: ${checksum:22}')
}