//
// Copyright (c) 2011, Brian Frank and Andy Frank
// Licensed under the Academic Free License version 3.0
//
// History:
// 03 Jan 11 Brian Frank Creation
//
class RandomTest : Test
{
Void test()
{
f := |Random r->Obj[]| { [r.next, r.nextBool, r.nextFloat, r.nextBuf(3).toHex] }
r1 := Random.makeSeeded(123456789)
r2 := Random.makeSeeded(123456789)
verifyEq(f(r1), f(r2))
verifyEq(f(r1), f(r2))
r2 = Random.makeSeeded(123456780)
verifyNotEq(f(r1), f(r2))
verifyNotEq(f(r1), f(r2))
verifyRandom(Random.makeSeeded)
verifyRandom(Random.makeSeeded(1234))
verifyRandom(Random.makeSecure)
}
Void verifyRandom(Random r)
{
// next w/out range
acc := Int[,]
10.times { acc.add(r.next) }
verifyEq(acc.unique.size, 10)
// next w/ range (positives)
acc.clear
300.times { acc.add(r.next(0..10)) }
verify(acc.all { 0 <= it && it <= 10 })
verifyEq(acc.unique.size, 11)
// next w/ range (negatives)
acc.clear
300.times { acc.add(r.next(-20..<-10)) }
verify(acc.all { -20 <= it && it < -10 })
verifyEq(acc.unique.size, 10)
// nextBool
b := r.nextBool
verify(b == true || b == false)
// nextFloat
100.times
{
f := r.nextFloat
verify(0.0f <= f && f <= 1.0f)
}
// nextBuf
buf := r.nextBuf(4)
verify(buf is Buf)
verifyEq(buf.size, 4)
}
}