Spaces:
Sleeping
Sleeping
File size: 1,497 Bytes
426093b 14842f9 93cd78f 14842f9 93cd78f 14842f9 93cd78f | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | from proteus.game.engine.difficulty import Difficulty
from proteus.game.metrics.rollout import RolloutResult, optimal_rollout
def test_optimal_rollout_is_deterministic():
a = optimal_rollout("template", seed=42, difficulty=Difficulty.EASY, n_turns=5)
b = optimal_rollout("template", seed=42, difficulty=Difficulty.EASY, n_turns=5)
assert isinstance(a, RolloutResult)
assert a.focal_positions == b.focal_positions
assert a.final_safety_distance == b.final_safety_distance
def test_optimal_rollout_length_capped_by_n_turns():
r = optimal_rollout("template", seed=42, difficulty=Difficulty.EASY, n_turns=3)
assert len(r.focal_positions) <= 3
# Each recorded position is the PRE-move focal cell for that optimal turn.
assert all(isinstance(p, tuple) and len(p) == 2 for p in r.focal_positions)
def test_optimal_rollout_first_position_is_handover():
# The first optimal pre-move position equals the focal's spawn cell (template
# has no Cut pre-roll, so the handover IS the spawn). Self-derived, not hardcoded.
import random
from proteus.game.engine.grid import MotiveGridGame
from proteus.game.scenarios.base import get_scenario
scenario = get_scenario("template")()
game = MotiveGridGame(scenario, random.Random(42), Difficulty.EASY, max_steps=10)
spawn = (game.focal_sprite.x, game.focal_sprite.y)
r = optimal_rollout("template", seed=42, difficulty=Difficulty.EASY, n_turns=5)
assert r.focal_positions[0] == spawn
|