Files
Jyotisha/tests/test_sudarshana_chakra.py
T
2026-06-13 16:18:37 +08:00

97 lines
3.4 KiB
Python

#!/usr/bin/env python3
"""Tests for sudarshana_chakra.py — three reference charts and convergence analysis."""
from __future__ import annotations
import os
import sys
SCRIPTS = os.path.join(os.path.dirname(__file__), '..', 'scripts')
if SCRIPTS not in sys.path:
sys.path.insert(0, SCRIPTS)
from sudarshana_chakra import SudarshanaChakraAnalyzer, calc_sudarshana_chakra, generate_sudarshana_report
def sample_planets():
return {
'Sun': 65.0, # Gemini
'Moon': 125.0, # Leo
'Mars': 280.0, # Capricorn
'Mercury': 75.0, # Gemini
'Jupiter': 100.0, # Cancer
'Venus': 340.0, # Pisces
'Saturn': 310.0, # Aquarius
'Rahu': 210.0, # Scorpio
'Ketu': 30.0, # Taurus
}
def test_generate_three_charts_has_all_reference_points():
analyzer = SudarshanaChakraAnalyzer()
charts = analyzer.generate_three_charts(sample_planets(), asc_lon=10.0)
assert set(charts) == {'ascendant_lagna', 'moon_lagna', 'sun_lagna'}
for chart in charts.values():
assert 'Sun' in chart
assert 'Moon' in chart
assert 1 <= chart['Sun']['house'] <= 12
assert 0 <= chart['Sun']['sign_idx'] <= 11
def test_house_from_refs_wraps_one_to_twelve():
assert SudarshanaChakraAnalyzer._house_from_refs(0, 0) == 1
assert SudarshanaChakraAnalyzer._house_from_refs(1, 0) == 2
assert SudarshanaChakraAnalyzer._house_from_refs(11, 0) == 12
assert SudarshanaChakraAnalyzer._house_from_refs(0, 11) == 2
def test_composite_analysis_scores_range():
analyzer = SudarshanaChakraAnalyzer()
result = analyzer.composite_analysis(sample_planets(), asc_lon=10.0)
assert set(result).issuperset({'Sun', 'Moon', 'Mars'})
for pdata in result.values():
assert 0 <= pdata['composite_score'] <= 1
assert pdata['favorable_count'] + pdata['unfavorable_count'] == 3
assert 'interpretation' in pdata
def test_house_analysis_specific_house():
analyzer = SudarshanaChakraAnalyzer()
result = analyzer.house_analysis(sample_planets(), asc_lon=10.0, house_number=10)
assert result['house'] == 10
assert 'asc_lagna' in result
assert 'moon_lagna' in result
assert 'sun_lagna' in result
assert 'interpretation' in result
def test_house_analysis_rejects_invalid_house():
analyzer = SudarshanaChakraAnalyzer()
result = analyzer.house_analysis(sample_planets(), asc_lon=10.0, house_number=13)
assert 'error' in result
def test_life_area_analysis_has_core_areas():
analyzer = SudarshanaChakraAnalyzer()
result = analyzer.life_area_analysis(sample_planets(), asc_lon=10.0)
for key in ('自我/健康', '财富/家庭', '婚姻/伴侣/合作', '事业/地位/名声', '收益/愿望/朋友圈'):
assert key in result
assert 'composite_strength' in result[key]
def test_full_sudarshana_result_structure():
result = calc_sudarshana_chakra(sample_planets(), asc_lon=10.0, house=7)
assert result['version'] == '2.0'
assert 'reference_points' in result
assert 'three_charts' in result
assert 'composite_analysis' in result
assert 'life_area_analysis' in result
assert 'specific_house' in result
assert 'convergence' in result
assert 'overall_assessment' in result
def test_text_report_contains_title():
report = generate_sudarshana_report(sample_planets(), asc_lon=10.0)
assert isinstance(report, str)
assert 'Sudarshana' in report or '苏达沙那' in report