summary refs log tree commit diff stats
path: root/tests/stdlib/trandom.nim
blob: c7c6a3f5693794dd8522ffca6861e7673918aeed (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
discard """
  action: compile
"""

import random

proc main =
  var occur: array[1000, int]

  var x = 8234
  for i in 0..100_000:
    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()

  var a = [0, 1]
  shuffle(a)
  doAssert a[0] == 1
  doAssert a[1] == 0

  doAssert rand(0) == 0
  doAssert sample("a") == 'a'

  when compileOption("rangeChecks"):
    try:
      discard rand(-1)
      doAssert false
    except RangeDefect:
      discard

    try:
      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()