Spaces:
Runtime error
Runtime error
File size: 2,368 Bytes
8dc7642 | 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 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 | from __future__ import annotations
from freeciv_env.models import FreecivAction
from freeciv_env.server.freeciv_environment import FreecivEnvironment
from tests.fakes import FakeFreecivSession
def make_env() -> FreecivEnvironment:
return FreecivEnvironment(session_factory=FakeFreecivSession, max_turns=5)
def test_reset_exposes_expected_action_surface() -> None:
env = make_env()
obs = env.reset()
assert obs.status == "ready"
assert obs.turn == 1
assert any(action.action_type == "end_turn" for action in obs.legal_actions)
assert any(action.action_type == "move_unit" for action in obs.legal_actions)
assert any(action.action_type == "build_city" for action in obs.legal_actions)
assert any(action.action_type == "set_city_production" for action in obs.legal_actions)
assert any(action.action_type == "set_research" for action in obs.legal_actions)
env.close()
def test_invalid_action_is_penalized_without_advancing_state() -> None:
env = make_env()
env.reset()
obs = env.step(FreecivAction(action_type="move_unit", unit_id=999, direction=7))
assert obs.status == "invalid_action"
assert obs.reward == -0.25
assert obs.turn == 1
assert env.state.turn == 1
env.close()
def test_move_unit_rewards_exploration_progress() -> None:
env = make_env()
env.reset()
obs = env.step(FreecivAction(action_type="move_unit", unit_id=201, direction=0))
assert obs.status == "ok"
assert obs.known_tiles == 5
assert obs.reward > 0.01
assert obs.unit_count == 1
env.close()
def test_build_city_rewards_city_growth() -> None:
env = make_env()
env.reset()
obs = env.step(FreecivAction(action_type="build_city", unit_id=201))
assert obs.city_count == 2
assert obs.unit_count == 0
assert obs.reward >= 0.66
env.close()
def test_set_research_rewards_tech_progress() -> None:
env = make_env()
env.reset()
obs = env.step(FreecivAction(action_type="set_research", target="Pottery"))
assert obs.techs_researched == 1
assert obs.reward >= 0.30
env.close()
def test_end_turn_advances_turn_counter() -> None:
env = make_env()
env.reset()
obs = env.step(FreecivAction(action_type="end_turn"))
assert obs.turn == 2
assert env.state.turn == 2
assert obs.reward > 0.0
env.close()
|