Files
snake-python/tests/test_GameQuality.py
daniel156161 c704fbc742
Build and Push Docker Container / build-and-push (push) Successful in 8m3s
feat: add Prism snake and gameplay database lifecycle
- Add bitboard-accelerated Prism and versioned Supreme snake implementations.
- Add database-backed move benchmarks and focused strategy tests.
- Normalize gameplay storage while preserving replay compatibility.
- Add deterministic game quality scoring and replay retention tiers.
- Add backup-first SQLite cleanup, verification, and replacement tooling.
- Add safe compact-plus-delta database merging with conflict detection.
- Extend SQLite and PostgreSQL schemas for replay and quality metadata.
- Add PostgreSQL development service and pytest import configuration.
- Update gameplay documentation and the quart_common submodule revision.
2026-08-01 16:21:02 +02:00

44 lines
1.7 KiB
Python

import unittest
from server.database.game_quality import GameQualityInput, quality_meets_minimum, rate_game_quality
class TestGameQuality(unittest.TestCase):
def test_complete_competitive_game_is_high_quality(self):
quality = rate_game_quality(GameQualityInput(
status="finished", final_turn=80, turn_rows=80, min_turn=1, max_turn=80,
valid_moves=80, thinking_rows=80, distinct_moves=4,
snake_turn_rows=160, winner_name="PrismBattleSnake",
))
self.assertEqual(quality.tier, "high")
self.assertGreaterEqual(quality.score, 80)
def test_short_but_valid_game_is_not_invalid(self):
quality = rate_game_quality(GameQualityInput(
status="finished", final_turn=5, turn_rows=5, min_turn=1, max_turn=5,
valid_moves=5, thinking_rows=5, distinct_moves=3,
snake_turn_rows=10, winner_name="PrismBattleSnake",
))
self.assertIn(quality.tier, ("low", "medium"))
self.assertIn("short_game", quality.reasons)
def test_incomplete_game_is_invalid(self):
quality = rate_game_quality(GameQualityInput(
status="finished", final_turn=100, turn_rows=10, min_turn=1, max_turn=10,
valid_moves=10, thinking_rows=10, distinct_moves=4,
snake_turn_rows=20, winner_name=None,
))
self.assertEqual(quality.tier, "invalid")
self.assertIn("incomplete_turn_sequence", quality.reasons)
def test_minimum_tier_order(self):
self.assertTrue(quality_meets_minimum("high", "medium"))
self.assertTrue(quality_meets_minimum("medium", "medium"))
self.assertFalse(quality_meets_minimum("low", "medium"))
self.assertFalse(quality_meets_minimum("invalid", "low"))
if __name__ == "__main__":
unittest.main()