monop-state/test_parser.py

56 lines
1.9 KiB
Python
Raw Permalink Normal View History

#!/usr/bin/env python3
"""
Test the monop parser by replaying historical log and validating checkpoints.
"""
import sys
import os
sys.path.insert(0, os.path.dirname(__file__))
from monop_parser import MonopParser, SQUARE_BY_NAME
def test_log_replay(filepath="test_data/monop.log"):
parser = MonopParser()
total_lines = 0
bot_lines = 0
with open(filepath, 'r') as f:
for line in f:
line = line.rstrip('\n')
total_lines += 1
parts = line.split('\t')
if len(parts) >= 3 and parts[1].strip() == "monop":
bot_lines += 1
parser.parse_line(line)
print(f"=== Log Replay Results ===")
print(f"Total lines: {total_lines}")
print(f"Bot lines: {bot_lines}")
print(f"Games found: {len(parser.games)}")
print(f"Checkpoints validated: {parser.checkpoints_validated}")
print(f"Checkpoints failed: {parser.checkpoints_failed}")
print(f"Mismatch rate: {parser.checkpoints_failed}/{parser.checkpoints_validated + parser.checkpoints_failed}")
if parser.checkpoint_errors:
print(f"\n=== First 50 Errors ===")
for err in parser.checkpoint_errors[:50]:
print(f" {err}")
# 2 mismatches are expected: lines 11674 and 11682 have 7 IRC disconnects
# between checkpoints, causing lost bot output that can't be reconstructed
max_acceptable = 2
status = "PASS" if parser.checkpoints_failed <= max_acceptable else "FAIL"
print(f"\n{status}: "
f"{parser.checkpoints_validated} checkpoints validated, "
f"{parser.checkpoints_failed} mismatches "
f"(max acceptable: {max_acceptable}, caused by IRC disconnects)")
return parser.checkpoints_failed <= max_acceptable
if __name__ == "__main__":
os.chdir(os.path.dirname(__file__) or ".")
success = test_log_replay()
sys.exit(0 if success else 1)