57a1915b10
Implements: - BattleResult type and JSON-lines parser (#127) - TR server lifecycle manager (#128) - Bot compiler using nim c (#129) - runBattle() orchestrator (#130) - Example test in OscillatorBot_garage (#131) - Framework usage guide (#132) - TestBattleRunner.java for external server (#133) - BattleRunner process lifecycle (#134) Fix: runner_process.nim was redefining TimeoutError locally; now uses std/net.TimeoutError consistently with server_manager.nim.
31 lines
946 B
Nim
31 lines
946 B
Nim
## Integration test: OscillatorBot vs SittingDuck, 3 rounds.
|
|
## Requires a running TR server (set TR_SERVER_JAR / TR_BATTLE_RUNNER env vars).
|
|
|
|
import std/[os, unittest]
|
|
import test_framework/test_framework
|
|
|
|
const
|
|
oscillatorDir = currentSourcePath().parentDir.parentDir # OscillatorBot_garage/
|
|
sittingDuckDir = currentSourcePath().parentDir / "bots" / "SittingDuck"
|
|
|
|
suite "OscillatorBot basic battle":
|
|
test "beats SittingDuck in 3 rounds":
|
|
let r = runBattle(@[oscillatorDir, sittingDuckDir], rounds = 3)
|
|
|
|
check r.rounds.len == 3
|
|
check r.results.len == 2
|
|
|
|
let oscillator = block:
|
|
var found: BotResult
|
|
for b in r.results:
|
|
if b.name == "OscillatorBot": found = b
|
|
found
|
|
let duck = block:
|
|
var found: BotResult
|
|
for b in r.results:
|
|
if b.name == "SittingDuck": found = b
|
|
found
|
|
|
|
check oscillator.totalScore > duck.totalScore
|
|
check "OscillatorBot" in r.winners
|