v2 / vlib / v / tests / bench / bench_random_number_generation.c.v
50 lines · 43 sloc · 1.14 KB · 0da00cc457215a9269c21b1f95e7691f9df0e64d
Raw
1import os
2import rand
3import rand.wyrand
4import rand.musl
5import rand.pcg32
6import benchmark
7
8const max_iterations = os.getenv_opt('MAX_ITERATIONS') or { '1000' }.int()
9
10fn main() {
11 mut sum := 0
12 mut bigsum := u64(0)
13 mut b := benchmark.start()
14
15 C.srand(7868768)
16 for _ in 0 .. max_iterations {
17 sum += C.rand()
18 }
19 b.measure('C.rand called ${max_iterations} times, sum: ${sum}')
20
21 rand.seed([u32(545123), 87834597])
22 for _ in 0 .. max_iterations {
23 bigsum += rand.u64()
24 }
25 b.measure('rand.u64 called ${max_iterations} times, bigsum: ${bigsum}')
26
27 bigsum = 0
28 mut wy := &wyrand.WyRandRNG{}
29 wy.seed([u32(2345345), 8787671])
30 for _ in 0 .. max_iterations {
31 bigsum += wy.u64()
32 }
33 b.measure('wy.u64 called ${max_iterations} times, bigsum: ${bigsum}')
34
35 bigsum = 0
36 mut mu := &musl.MuslRNG{}
37 mu.seed([u32(2345345)])
38 for _ in 0 .. max_iterations {
39 bigsum += mu.u64()
40 }
41 b.measure('mu.u64 called ${max_iterations} times, bigsum: ${bigsum}')
42
43 bigsum = 0
44 mut pc := &pcg32.PCG32RNG{}
45 pc.seed([u32(2345345), 34345, 77634, 12381])
46 for _ in 0 .. max_iterations {
47 bigsum += pc.u64()
48 }
49 b.measure('pc.u64 called ${max_iterations} times, bigsum: ${bigsum}')
50}
51