c704fbc742
Build and Push Docker Container / build-and-push (push) Successful in 8m3s
- 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.
44 lines
1.7 KiB
Python
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()
|