Files
ww/lib/math/random/random_test.ww
Hojun-Cho 99e3393048 lib/test: Go external-test packages (<mod>_test); retire decimaltest (#16 PREP-a)
30 lib test files: package <mod> -> <mod>_test, the sanctioned Go-over-Hare
departure (CLAUDE.md rule-9 carve-out; white-box testing deferred, not
forbidden). decimaltest retired per .ai/rob-16-decimaltest-ruling.md: Hare
ships no decimal_test.ha (engine covered transitively); coverage migrated
losslessly into stoftest rows (all-9s carry, nd>19 pure-decimal) + ftostest
f64_roundtrip mirroring ref/hare strconv ftos_test.ha tcsf64; k=0 micro-gap
documented at site. regex_test keeps its white-box internal probes under a
documented rule-7 divergence (rehome = task #9). 922_decimal_run + its 989
byte-id row removed with the fixture.
2026-06-10 12:11:11 +09:00

64 lines
1.5 KiB
Plaintext

package random_test;
import random;
@test fn seq() void = {
let r: random.random = random.init(1234567u64);
if (random.next(&r) != 6457827717110365317u64) { let _: i32 = 1/0; };
if (random.next(&r) != 3203168211198807973u64) { let _: i32 = 1/0; };
if (random.next(&r) != 9817491932198370423u64) { let _: i32 = 1/0; };
if (random.next(&r) != 4593380528125082431u64) { let _: i32 = 1/0; };
if (random.next(&r) != 16408922859458223821u64) { let _: i32 = 1/0; };
};
@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) {
if (random.next(&a) != random.next(&b)) { let _: i32 = 1/0; };
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;
if (vv >= 17u64) { let _: i32 = 1/0; };
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);
if (v >= 16u64) { let _: i32 = 1/0; };
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);
if (v >= 100u64) { let _: i32 = 1/0; };
i += 1;
};
};
export fn main() i32 = {
seq();
deterministic();
u32n_inrange();
u64n_pow2();
u64n_nonpow2();
return 0;
};