import numpy as np from tsi_sim.config import SimConfig from tsi_sim.engine import run_trajectory from tsi_sim.rng import rng_for, seedseq_for def test_seedseq_and_rng_deterministic(): cfg = SimConfig(k=8, epochs=3) a = np.random.default_rng(seedseq_for(cfg)).random(5) b = rng_for(cfg).random(5) np.testing.assert_array_equal(a, b) def test_distinct_configs_get_distinct_streams(): c0 = SimConfig(k=8, epochs=3, latency=0) c1 = SimConfig(k=8, epochs=3, latency=1) assert not np.array_equal(rng_for(c0).random(4), rng_for(c1).random(4)) def test_trajectory_is_order_independent_and_reproducible(): cfg = SimConfig(n_nodes=500, k=8, epochs=6, latency=4, max_uncles=2) r1 = run_trajectory(cfg) r2 = run_trajectory(cfg) assert [row["ratio"] for row in r1] == [row["ratio"] for row in r2] def test_replicates_differ(): a = run_trajectory(SimConfig(n_nodes=500, k=8, epochs=6, latency=4, replicate=0)) b = run_trajectory(SimConfig(n_nodes=500, k=8, epochs=6, latency=4, replicate=1)) assert a[-1]["ratio"] != b[-1]["ratio"]