| 1 | import os |
| 2 | import rand |
| 3 | import rand.wyrand |
| 4 | import rand.musl |
| 5 | import rand.pcg32 |
| 6 | import benchmark |
| 7 | |
| 8 | const max_iterations = os.getenv_opt('MAX_ITERATIONS') or { '1000' }.int() |
| 9 | |
| 10 | fn 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 | |