KAZIK/tools/tests/test_tarot_and_student_mind.py
Artvasil09 ce06659ab2 feat: implement offline neural fortune teller and native tarot divination
- Offline neural worker based on llama.cpp (fortune-engine.exe) with local Qwen3-4B model support

- Native assembly Tarot 3-card spread divination and teacher grade divination mode

- Text input dialog in MODE_FORTUNE communicating over anonymous pipes

- Clean process lifecycle management, WM_CHAR dispatch and fallback handling

- Test suites and packaging tools for offline release
2026-10-21 13:53:06 +03:00

69 lines
3.5 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# -*- coding: utf-8 -*-
"""
Test suite for Tarot Fortune Mind & Teacher Grade Divination.
Exercises the native assembly engine directly.
"""
from pathlib import Path
import subprocess
import re
ROOT = Path(__file__).resolve().parents[2]
def test_tarot_database():
data = (ROOT / "src_graphics/fortune_mind_data.inc").read_bytes().decode("cp1251")
code = (ROOT / "src_graphics/fortune_mind.inc").read_bytes().decode("cp1251")
dialog = (ROOT / "src_graphics/fortune_dialog.inc").read_bytes().decode("cp1251")
# 1. Check all 22 Major Arcana exist in data
cards = ["Шут", "Маг", "Верховная Жрица", "Императрица", "Император", "Иерофант",
"Влюблённые", "Колесница", "Сила", "Отшельник", "Колесо Фортуны", "Справедливость",
"Повешенный", "Смерть", "Умеренность", "Дьявол", "Башня", "Звезда",
"Луна", "Солнце", "Суд", "Мир"]
for c in cards:
assert c in data, f"Card '{c}' missing from database"
print(f"[OK] All 22 Major Arcana found in Tarot database.")
# 2. Check 3-card spread positions: Ситуация, Препятствие, Исход
assert "1. СИТУАЦИЯ" in data, "Position 1 (Ситуация) missing"
assert "2. ПРЕПЯТСТВИЕ" in data, "Position 2 (Препятствие) missing"
assert "3. ИСХОД" in data, "Position 3 (Исход) missing"
print("[OK] Fixed 3-card spread positions verified (Ситуация, Препятствие, Исход).")
# 3. Check student mode components
assert "1. КАРМА УЧЕБЫ" in data, "Student Position 1 missing"
assert "2. ТАЙНЫЙ ГРЕХ" in data, "Student Position 2 missing"
assert "3. СУД ВСЕЛЕННОЙ" in data, "Student Position 3 missing"
assert "КАБИНЕТ ПРЕПОДАВАТЕЛЯ: СУДЬБА СТУДЕНТА" in data, "Teacher mode title missing"
assert "ВЕРДИКТ СУДЬБЫ: СТАВИТЬ" in data, "Verdict string missing"
assert "9 или 10" in data, "Borderline 9-10 choice missing"
assert "8 или 9" in data, "Borderline 8-9 choice missing"
print("[OK] Teacher Grade Divination database & borderline choices verified.")
# 4. Check procedure implementations
procs = ["InitFortuneMindState3D", "DetectTopic3D", "SubStrI3D",
"GenerateTarotReadingMind3D", "GenerateStudentGradeMind3D",
"SubmitStudentGrade3D", "DrawFortuneCardBox3D", "RenderFortuneDialog3D"]
for p in procs:
assert p in code or p in dialog, f"Procedure '{p}' missing from engine implementation"
print(f"[OK] All {len(procs)} required Fortune Mind procedures verified.")
# 5. Check mode transitions
assert "FORTUNE_SUBMODE_MENU" in data
assert "FORTUNE_SUBMODE_TAROT" in data
assert "FORTUNE_SUBMODE_STUDENT" in data
print("[OK] Menu, Tarot, and Student submodes verified.")
def test_hall_expansion_integration():
cmd = ["python", str(ROOT / "tools/tests/check_hall_expansion.py")]
proc = subprocess.run(cmd, cwd=ROOT, capture_output=True, text=True)
assert proc.returncode == 0, f"check_hall_expansion.py failed:\n{proc.stdout}\n{proc.stderr}"
assert "PASS" in proc.stdout, proc.stdout
print("[OK] check_hall_expansion native test suite passed with updated fortune dialogue.")
if __name__ == '__main__':
test_tarot_database()
test_hall_expansion_integration()
print("\nALL TAROT & TEACHER GRADE DIVINATION TESTS PASSED SUCCESSFULLY!")