diff options
Diffstat (limited to 'v_windows/v/vlib/v/tests/bench/gcboehm/GC_bench.v')
-rw-r--r-- | v_windows/v/vlib/v/tests/bench/gcboehm/GC_bench.v | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/v_windows/v/vlib/v/tests/bench/gcboehm/GC_bench.v b/v_windows/v/vlib/v/tests/bench/gcboehm/GC_bench.v new file mode 100644 index 0000000..411b122 --- /dev/null +++ b/v_windows/v/vlib/v/tests/bench/gcboehm/GC_bench.v @@ -0,0 +1,65 @@ +import os +import time +import rand +import math + +struct DataObj { +mut: + data []f64 +} + +struct PtrObj { +mut: + nxt []&DataObj +} + +struct PtrPtrObj { +mut: + nxt []&PtrObj +} + +const ( + log2n = 11 + n = 1 << log2n + n4 = f64(u64(1) << (4 * log2n)) +) + +fn waste_mem() { + mut objs := PtrPtrObj{ + nxt: []&PtrObj{len: n} + } + for { + sz := rand.int_in_range(10, 1000) + mut new_obj := &PtrObj{ + nxt: []&DataObj{len: sz} + } + sz2 := rand.int_in_range(10, 500000) + new_obj2 := &DataObj{ + data: []f64{len: sz2} + } + idx2 := rand.int_in_range(0, sz) + new_obj.nxt[idx2] = new_obj2 + // non-equally distributed random index + idx := int(math.sqrt(math.sqrt(rand.f64n(n4)))) + objs.nxt[idx] = new_obj + } +} + +fn main() { + mut n_iterations := 5_000_000 + if os.args.len == 2 { + n_iterations = os.args[1].int() + } + if os.args.len > 2 || n_iterations <= 0 { + eprintln('usage:\n\t${os.args[0]} [num_iterations]') + exit(1) + } + go waste_mem() + mut last := time.sys_mono_now() + for _ in 0 .. n_iterations { + now := time.sys_mono_now() + interval := now - last + println(f64(interval) / f64(time.millisecond)) + last = now + } +} |