feat: add shared integration test framework for garages (#126)
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.
This commit is contained in:
@@ -0,0 +1,30 @@
|
||||
## 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
|
||||
Reference in New Issue
Block a user