// Seed once; every successful sampling call advances this explicit generator.
import aner.random

let rng = random.generator(seed: 20261019) // Omit seed for a fresh OS-derived seed.
print(random.engine())
print("Replay seed: " + String(rng.seed()))
let first = rng.uniform()
print(first)
print(rng.integer(low: 1, high: 10))
print(rng.bernoulli(probability: 0.8))
print(cast<String>(rng.choice(List("tails", "heads"), weights: List(2, 8))))
print(cast<String>(rng.choice(List("N", "E", "W", "S"))))
print(rng.normal(mean: 10.0, stddev: 2.0))
print(rng.weighted_index(weights: List(1, 3)))

let samples = Array<Float64>(size: 8, fill: 0.0)
for index in Range(samples.len()) { samples[index] = rng.uniform() }
print(samples)
print("Next draw: " + String(rng.position()))

rng.reseed(seed: 20261019)
print("Replay first draw: " + String(first == rng.uniform()))
let alias = rng // Shared handle, not a copied sequence.
print(alias.uniform())
print("Shared next draw: " + String(rng.position()))

let fresh = random.generator()
print("Fresh run seed: " + String(fresh.seed()))
print(fresh.uniform())
