import proteus.game.scenarios # noqa: F401 from proteus.game.engine.difficulty import Difficulty from proteus.providers import FakeProvider from proteus.game.agents import VanillaAgent from proteus.game.runtime import SessionRunner def test_each_turn_records_pre_and_post_bfs_distance(): prov = FakeProvider(["ACTION: up"] * 10, model_name="demo") trace = SessionRunner( "template", VanillaAgent(prov), difficulty=Difficulty.EASY, seed=42, play_turns=4, use_probe=False, ).run() for t in trace.turns: assert t.pre_bfs_distance is not None assert t.post_bfs_distance is not None assert t.post_focal_pos is not None # spec ยง9: away-move quality is measured vs the PRE-move predator cell first = trace.turns[0] assert first.agent_distance_delta is not None def test_episode_records_turn_order_capture_rule_horizon(): prov = FakeProvider(["ACTION: up"] * 10, model_name="demo") trace = SessionRunner( "template", VanillaAgent(prov), difficulty=Difficulty.EASY, seed=42, play_turns=4, use_probe=False, ).run() assert trace.turn_order == "focal_then_predator" assert trace.capture_rule == "same_cell" assert trace.horizon == 4