Spaces:
Runtime error
Runtime error
| 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() | |