_a2a_hll_x100.nx source
↩ module page · 36 lines · 846 B
1// Run HLL fill 100x consecutively for amortized timing measurement.
2
3import "syscalls.nx"
4import "sketch_hll.nx"
5
6func write_b(buf: *u8, value: i64) -> i64 {
7 var i: i64 = 0
8 var v: i64 = value
9 while i < 8 {
10 buf[i] = (v & 0xFF) as u8
11 v = v >> 8
12 i = i + 1
13 }
14 return 0
15}
16
17func main() -> i64 {
18 let key_raw: *u8 = sys_mmap(8)
19 let key: *u8 = key_raw
20 var iter: i64 = 0
21 while iter < 100 {
22 let hll: *Hll = nx_hll_alloc(12, 42)
23 if hll == (0 as *Hll) { return 1 }
24 var i: i64 = 0
25 while i < 100000 {
26 write_b(key, i + 9000000)
27 nx_hll_add(hll, key, 8)
28 i = i + 1
29 }
30 let est: i64 = nx_hll_estimate(hll)
31 if est < 95000 { return 2 }
32 if est > 105000 { return 3 }
33 iter = iter + 1
34 }
35 return 0
36}