64 lines
1.4 KiB
Plaintext
64 lines
1.4 KiB
Plaintext
package random_test;
|
|
|
|
import random;
|
|
|
|
@test fn seq() void = {
|
|
let r: random.random = random.init(1234567u64);
|
|
assert(!(random.next(&r) != 6457827717110365317u64));
|
|
assert(!(random.next(&r) != 3203168211198807973u64));
|
|
assert(!(random.next(&r) != 9817491932198370423u64));
|
|
assert(!(random.next(&r) != 4593380528125082431u64));
|
|
assert(!(random.next(&r) != 16408922859458223821u64));
|
|
};
|
|
|
|
@test fn deterministic() void = {
|
|
let a: random.random = random.init(42u64);
|
|
let b: random.random = random.init(42u64);
|
|
let i: i32 = 0;
|
|
for (i < 32) {
|
|
assert(!(random.next(&a) != random.next(&b)));
|
|
i += 1;
|
|
};
|
|
};
|
|
|
|
@test fn u32n_inrange() void = {
|
|
let r: random.random = random.init(7u64);
|
|
let i: i32 = 0;
|
|
for (i < 200) {
|
|
let v: u32 = random.u32n(&r, 17u32);
|
|
// v stored as u64 with possible high bits — mask before compare.
|
|
let vv: u64 = (v: u64) & 0xFFFFFFFFu64;
|
|
assert(!(vv >= 17u64));
|
|
i += 1;
|
|
};
|
|
};
|
|
|
|
@test fn u64n_pow2() void = {
|
|
let r: random.random = random.init(99u64);
|
|
let i: i32 = 0;
|
|
for (i < 200) {
|
|
let v: u64 = random.u64n(&r, 16u64);
|
|
assert(!(v >= 16u64));
|
|
i += 1;
|
|
};
|
|
};
|
|
|
|
@test fn u64n_nonpow2() void = {
|
|
let r: random.random = random.init(123u64);
|
|
let i: i32 = 0;
|
|
for (i < 200) {
|
|
let v: u64 = random.u64n(&r, 100u64);
|
|
assert(!(v >= 100u64));
|
|
i += 1;
|
|
};
|
|
};
|
|
|
|
export fn main() i32 = {
|
|
seq();
|
|
deterministic();
|
|
u32n_inrange();
|
|
u64n_pow2();
|
|
u64n_nonpow2();
|
|
return 0;
|
|
};
|