aboutsummaryrefslogtreecommitdiff
path: root/v_windows/v/cmd/tools/bench/wyhash.v
diff options
context:
space:
mode:
Diffstat (limited to 'v_windows/v/cmd/tools/bench/wyhash.v')
-rw-r--r--v_windows/v/cmd/tools/bench/wyhash.v56
1 files changed, 56 insertions, 0 deletions
diff --git a/v_windows/v/cmd/tools/bench/wyhash.v b/v_windows/v/cmd/tools/bench/wyhash.v
new file mode 100644
index 0000000..b760ad6
--- /dev/null
+++ b/v_windows/v/cmd/tools/bench/wyhash.v
@@ -0,0 +1,56 @@
+module main
+
+import hash.fnv1a
+import hash as wyhash
+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()
+ mut bytepile := []byte{}
+ for _ in 0 .. sample_size * max_str_len {
+ bytepile << byte(rand.int_in_range(40, 125))
+ }
+ mut str_lens := []int{}
+ for _ in 0 .. sample_size {
+ str_lens << rand.int_in_range(min_str_len, max_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
+ checksum ^= wyhash.wyhash_c(unsafe { &byte(bytepile.data) + start_pos }, u64(len),
+ 1)
+ start_pos = end_pos
+ }
+ 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
+ checksum ^= wyhash.sum64(bytepile[start_pos..end_pos], 1)
+ start_pos = end_pos
+ }
+ 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
+ checksum ^= fnv1a.sum64(bytepile[start_pos..end_pos])
+ start_pos = end_pos
+ }
+ bhashing_3.measure('fnv1a.sum64 | checksum: ${checksum:22}')
+}