3a9af3f54d
- Split active strategies, reusable engine code, core classes, and legacy snakes. - Replace implicit snake imports with explicit module registrations. - Extract Prism duel, spatial, and survival behavior into focused mixins. - Improve duel scoring with food races, pressure, caches, and depth metrics. - Add deterministic arena scenarios and paired seeded engine tournaments. - Expand benchmark telemetry and bump Prism to version 1.3.0. - Update documentation and tests for the new package layout and tooling.
55 lines
1.5 KiB
Python
55 lines
1.5 KiB
Python
import io
|
|
import unittest
|
|
from unittest.mock import patch
|
|
|
|
from scripts.run_seeded_snake_tournament import ENGINE_USER_AGENT, run_game
|
|
|
|
class _Completed:
|
|
returncode = 0
|
|
stdout = "INFO Game completed after 42 turns. Prism was the winner.\n"
|
|
|
|
class _OutputFile:
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
self.file = io.BytesIO(
|
|
b'{"turn":0}\n'
|
|
b'{"winnerId":"snake-id","winnerName":"Prism","isDraw":false}\n'
|
|
)
|
|
self.name = "arena-output.jsonl"
|
|
|
|
def __enter__(self):
|
|
return self
|
|
|
|
def __exit__(self, *args):
|
|
self.file.close()
|
|
|
|
def seek(self, offset):
|
|
return self.file.seek(offset)
|
|
|
|
def __iter__(self):
|
|
return iter(self.file)
|
|
|
|
class TestSeededSnakeTournament(unittest.TestCase):
|
|
|
|
def test_proxy_identifies_requests_as_battlesnake_engine(self):
|
|
self.assertIn("BattlesnakeEngine", ENGINE_USER_AGENT)
|
|
|
|
@patch("scripts.run_seeded_snake_tournament.subprocess.run", return_value=_Completed())
|
|
@patch("scripts.run_seeded_snake_tournament.tempfile.NamedTemporaryFile", _OutputFile)
|
|
def test_run_game_reads_official_engine_result(self, run):
|
|
result = run_game(
|
|
cli="battlesnake", seed=7, game_type="standard", map_name="standard",
|
|
players=[("Apex", "http://host:9001"), ("Prism", "http://host:9002")],
|
|
width=11, height=11, timeout_ms=500,
|
|
)
|
|
|
|
self.assertEqual(result, {
|
|
"seed": 7, "winner": "Prism", "draw": False, "turns": 42,
|
|
})
|
|
command = run.call_args.args[0]
|
|
self.assertIn("--seed", command)
|
|
self.assertIn("--output", command)
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|