diff options
author | flywind <43030857+xflywind@users.noreply.github.com> | 2020-12-10 14:58:42 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-12-10 07:58:42 +0100 |
commit | 73299b048f57838d83a3a8159909386a0905e553 (patch) | |
tree | 1347bc7fb546fe7ab2bebee8e7fec8b6d4af461c | |
parent | 82bb4db4b72e4ca61e2853755fd8ed8527c1a42a (diff) | |
download | Nim-73299b048f57838d83a3a8159909386a0905e553.tar.gz |
enable tests for random (#16297)
-rw-r--r-- | tests/stdlib/trandom.nim | 75 |
1 files changed, 41 insertions, 34 deletions
diff --git a/tests/stdlib/trandom.nim b/tests/stdlib/trandom.nim index c7c6a3f56..f8797944e 100644 --- a/tests/stdlib/trandom.nim +++ b/tests/stdlib/trandom.nim @@ -1,59 +1,66 @@ discard """ - action: compile + joinable: false + targets: "c js" """ -import random +import std/[random, stats] + +randomize(233) proc main = var occur: array[1000, int] - var x = 8234 for i in 0..100_000: - x = rand(high(occur)) + let x = rand(high(occur)) inc occur[x] - for i, oc in occur: - if oc < 69: - doAssert false, "too few occurrences of " & $i - elif oc > 150: - doAssert false, "too many occurrences of " & $i - - when false: - var rs: RunningStat - for j in 1..5: - for i in 1 .. 1_000: - rs.push(gauss()) - echo("mean: ", rs.mean, - " stdDev: ", rs.standardDeviation(), - " min: ", rs.min, - " max: ", rs.max) - rs.clear() + + doAssert max(occur) <= 140 and min(occur) >= 60 # gives some slack var a = [0, 1] shuffle(a) - doAssert a[0] == 1 - doAssert a[1] == 0 + doAssert a in [[0,1], [1,0]] doAssert rand(0) == 0 doAssert sample("a") == 'a' when compileOption("rangeChecks"): - try: + doAssertRaises(RangeDefect): discard rand(-1) - doAssert false - except RangeDefect: - discard - try: + doAssertRaises(RangeDefect): discard rand(-1.0) - doAssert false - except RangeDefect: - discard - # don't use causes integer overflow doAssert compiles(rand[int](low(int) .. high(int))) -randomize(223) -for i in 0 .. 10: - main() +main() + +import math + +block: + when not defined(js): + doAssert almostEqual(rand(12.5), 4.012897747078944) + doAssert almostEqual(rand(2233.3322), 879.702755321298) + + type DiceRoll = range[0..6] + doAssert rand(DiceRoll).int == 4 + +var rs: RunningStat +for j in 1..5: + for i in 1 .. 100_000: + rs.push(gauss()) + doAssert abs(rs.mean-0) < 0.08, $rs.mean + doAssert abs(rs.standardDeviation()-1.0) < 0.1 + let bounds = [3.5, 5.0] + for a in [rs.max, -rs.min]: + doAssert a >= bounds[0] and a <= bounds[1] + rs.clear() + +block: + type DiceRoll = range[3..6] + var flag = false + for i in 0..<100: + if rand(5.DiceRoll) < 3: + flag = true + doAssert flag # because of: rand(max: int): int |