from crossvenue_arbx.fuzz import ScenarioGenerator, ReplayRunner def test_replay_determinism_same_seed(): gen = ScenarioGenerator(seed=42) events = gen.generate(steps=20) runner1 = ReplayRunner() log1, final1 = runner1.run(events) runner2 = ReplayRunner() # regenerate to ensure fresh objects but same seed gen2 = ScenarioGenerator(seed=42) events2 = gen2.generate(steps=20) log2, final2 = runner2.run(events2) assert log1 == log2, "Replay logs must be identical for same seed" assert final1 == final2, "Final plan signature must match for same seed" def test_replay_variation_different_seed(): gen = ScenarioGenerator(seed=1) events = gen.generate(steps=20) runner = ReplayRunner() log1, final1 = runner.run(events) genb = ScenarioGenerator(seed=2) eventsb = genb.generate(steps=20) runnerb = ReplayRunner() log2, final2 = runnerb.run(eventsb) # usually different seeds will produce different logs or final plan assert (log1 != log2) or (final1 != final2)