97 lines
3.4 KiB
Python
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
|