Files
Jyotisha/tests/test_dasha_reference_audit.py
2026-07-16 23:45:00 +08:00

79 lines
2.5 KiB
Python

#!/usr/bin/env python3
"""Regression tests for the Vimshottari Dasha reference-drift audit."""
from __future__ import annotations
import json
import subprocess
import sys
from pathlib import Path
ROOT = Path(__file__).resolve().parents[1]
def test_dasha_reference_audit_quantifies_synthetic_boundary_gap() -> None:
completed = subprocess.run(
[
sys.executable,
"scripts/dasha_reference_audit.py",
"--year",
"1990",
"--month",
"4",
"--day",
"17",
"--hour",
"14",
"--minute",
"45",
"--second",
"20",
"--lat",
"36.466667",
"--lon",
"114.2",
"--tz",
"8",
"--target-start-date",
"2021-05-18",
"--target-source",
"synthetic_fixture",
],
cwd=ROOT,
text=True,
capture_output=True,
timeout=45,
check=False,
)
assert completed.returncode == 0, completed.stderr or completed.stdout
report = json.loads(completed.stdout)
assert report["scope"] == "vimshottari_dasha_reference_boundary_audit"
assert report["case"]["birth_time"] == "14:45:20"
assert report["engine"]["nakshatra"]
assert report["engine"]["start_lord"]
assert report["engine"]["start_datetime"]
assert report["target_reference"]["source"] == "synthetic_fixture"
assert isinstance(report["target_reference"]["date_delta_days"], int)
clock = report["clock_precision_sensitivity"]
assert clock["with_seconds"]["birth_time"] == "14:45:20"
assert clock["minute_only"]["birth_time"] == "14:45:00"
assert clock["seconds_effect"]["clock_translation_seconds"] == 20
assert clock["seconds_effect"]["start_delta_seconds"] < -100000
assert clock["seconds_effect"]["moon_recalculation_seconds"] < -100000
assert clock["seconds_effect"]["moon_delta_degrees"] > 0
year_lengths = {row["year_length"]: row for row in report["year_length_sensitivity"]}
assert 365.0 in year_lengths
assert 365.2422 in year_lengths
assert 365.25 in year_lengths
assert year_lengths[365.25]["start_datetime"] == report["engine"]["start_datetime"]
moon_gap = report["target_reference"]["required_moon_delta_arcmin_range"]
assert moon_gap["min"] > 0
assert moon_gap["max"] > moon_gap["min"]
assert "无法由秒级输入或年长常数单独解释" in report["finding"]