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

101 lines
3.2 KiB
Python

#!/usr/bin/env python3
"""Tests for bhava_chalit.py — unequal house boundaries and Rashi vs Bhava shifts."""
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 bhava_chalit import BhavaChalitCalculator
def test_equal_house_cusps_are_30_degrees_apart():
calc = BhavaChalitCalculator()
cusps = calc.calculate_cusps(asc_lon=12.5, mc_lon=280.0, house_system='equal')
assert len(cusps) == 12
assert cusps[0] == 12.5
assert cusps[1] == 42.5
assert cusps[11] == 342.5
def test_whole_sign_cusps_use_sign_midpoints():
calc = BhavaChalitCalculator()
cusps = calc.calculate_cusps(asc_lon=28.0, mc_lon=270.0, house_system='whole_sign')
assert cusps[:3] == [15, 45, 75]
def test_sandhis_for_equal_house_wrap_correctly():
calc = BhavaChalitCalculator()
cusps = calc.calculate_cusps(asc_lon=15.0, mc_lon=270.0, house_system='equal')
sandhis = calc.calculate_sandhis(cusps)
assert len(sandhis) == 12
assert sandhis[0] == 0.0
assert sandhis[1] == 30.0
assert sandhis[11] == 330.0
def test_planet_bhava_assignment_equal_house():
calc = BhavaChalitCalculator()
cusps = calc.calculate_cusps(asc_lon=15.0, mc_lon=270.0, house_system='equal')
sandhis = calc.calculate_sandhis(cusps)
assert calc._planet_bhava(1.0, sandhis) == 1
assert calc._planet_bhava(31.0, sandhis) == 2
assert calc._planet_bhava(359.0, sandhis) == 12
def test_bhava_chart_reports_shifted_planets():
calc = BhavaChalitCalculator()
planet_lons = {'Sun': 29.0, 'Moon': 31.0, 'Mars': 359.0}
chart = calc.get_bhava_chalit_chart(
planet_lons=planet_lons,
asc_lon=15.0,
mc_lon=270.0,
house_system='equal',
)
assert chart['summary']['total_planets'] == 3
assert chart['planets']['Sun']['rashi_house'] == 1
assert chart['planets']['Sun']['bhava_house'] == 1
assert chart['planets']['Moon']['bhava_house'] == 2
assert chart['planets']['Mars']['bhava_house'] == 12
def test_compare_rashi_vs_bhava_contains_boundaries_and_shifts():
calc = BhavaChalitCalculator()
result = calc.compare_rashi_vs_bhava(
{'Sun': 29.0, 'Moon': 31.0},
asc_lon=15.0,
mc_lon=270.0,
house_system='equal',
)
assert result['house_system'] == 'equal'
assert 'boundaries' in result
assert 'rashi_chart' in result
assert 'bhava_chart' in result
assert isinstance(result['shifts'], list)
def test_porophyry_like_system_returns_12_cusps_and_houses():
calc = BhavaChalitCalculator()
boundaries = calc.calculate_bhava_boundaries(
asc_lon=100.0,
mc_lon=20.0,
house_system='sripati',
)
assert len(boundaries['cusps']) == 12
assert len(boundaries['sandhis']) == 12
assert len(boundaries['houses']) == 12
assert all(0 <= h['span_degrees'] <= 360 for h in boundaries['houses'])
def test_invalid_house_system_raises():
calc = BhavaChalitCalculator()
try:
calc.calculate_cusps(asc_lon=0, mc_lon=90, house_system='invalid')
except ValueError as exc:
assert '不支持的宫位制' in str(exc)
else:
raise AssertionError('expected ValueError')