81 lines
1.6 KiB
Standard ML
81 lines
1.6 KiB
Standard ML
#!/usr/bin/env fun
|
|
|
|
/*
|
|
* This file is part of the Fun programming language.
|
|
* https://fun-lang.xyz/
|
|
*
|
|
* Copyright 2025 Johannes Findeisen <you@hanez.org>
|
|
* Licensed under the terms of the Apache-2.0 license.
|
|
* https://opensource.org/license/apache-2-0
|
|
*
|
|
* Added: 2025-12-11
|
|
*/
|
|
|
|
// Demonstrates usage of RANDOM_SEED and RANDOM_INT opcodes via
|
|
// the built-ins: random_seed(seed) and random_int(lo, hiExclusive).
|
|
|
|
print("-- Random demo: seed reproducibility and bounds --")
|
|
|
|
// Seed with a fixed value and produce a short sequence
|
|
seed = 123456
|
|
random_seed(seed)
|
|
a1 = random_int(0, 10) // in [0,10)
|
|
a2 = random_int(0, 10)
|
|
a3 = random_int(5, 8) // in [5,8)
|
|
|
|
print("First run:")
|
|
print(a1)
|
|
print(a2)
|
|
print(a3)
|
|
|
|
// Re-seed with the same value: the sequence should repeat
|
|
random_seed(seed)
|
|
b1 = random_int(0, 10)
|
|
b2 = random_int(0, 10)
|
|
b3 = random_int(5, 8)
|
|
|
|
print("Second run (after re-seed):")
|
|
print(b1)
|
|
print(b2)
|
|
print(b3)
|
|
|
|
print("Reproducible? (a1==b1, a2==b2, a3==b3)")
|
|
print(a1 == b1)
|
|
print(a2 == b2)
|
|
print(a3 == b3)
|
|
|
|
// Show that the upper bound is exclusive by sampling multiple times
|
|
// and tracking the maximum seen value; it should never reach hi.
|
|
lo = 10
|
|
hi = 20
|
|
max_seen = lo
|
|
i = 0
|
|
while i < 100
|
|
v = random_int(lo, hi)
|
|
if (v > max_seen) max_seen = v
|
|
i = i + 1
|
|
|
|
print("Max seen in [" + to_string(lo) + "," + to_string(hi) + ") over 100 samples:")
|
|
print(max_seen)
|
|
print("Is max_seen < hi? ")
|
|
print(max_seen < hi)
|
|
|
|
/* Expected output:
|
|
-- Random demo: seed reproducibility and bounds --
|
|
First run:
|
|
9
|
|
3
|
|
5
|
|
Second run (after re-seed):
|
|
9
|
|
3
|
|
5
|
|
Reproducible? (a1==b1, a2==b2, a3==b3)
|
|
true
|
|
true
|
|
true
|
|
Max seen in [10,20) over 100 samples:
|
|
19
|
|
Is max_seen < hi?
|
|
1
|
|
*/
|