mirror of
https://github.com/migatu/astrololo.git
synced 2026-07-14 21:38:37 +00:00
e69c0714b9
Pierwszy increment implementacji warstwy logicznej (ścieżka A). LOG-24: interfejs EphemerisEngine z dwoma backendami — SkyfieldEngine (własny, permisywny: Skyfield MIT + dane JPL public domain) oraz RemoteEngine (klient izolowanej usługi swisseph). Fabryka + leniwa inicjalizacja; endpointy /chart/positions i /chart/compare. LOG-01: pozycje obiektów (długość/szerokość ekliptyczna, prędkość, kierunek, formaty: w znaku / absolutny / dziesiętny). LOG-25/28: harness porównawczy (compare.py) z progami tolerancji oraz wspólny kontrakt parzystości; pełen zestaw testów. LOG-27: services/engine-swisseph — osobna, opcjonalna usługa AGPL (pyswisseph, tryb Moshiera), licencjonowana osobno, w compose pod profilem "comparison"; nie wchodzi do zamkniętego produktu. Walidacja: SkyfieldEngine zgadza się ze Swiss Ephemeris co do ~1" dla wszystkich 10 obiektów na horoskopie referencyjnym (30.04.1984, Warszawa); 12 testów przechodzi (silnik B pomijany gdy nieskonfigurowany). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
29 lines
813 B
Python
29 lines
813 B
Python
"""Testy formatowania (czyste, bez efemeryd)."""
|
|
from app.engine import formats
|
|
|
|
|
|
def test_sign_index():
|
|
assert formats.sign_index(0) == 0 # Aries
|
|
assert formats.sign_index(35) == 1 # Taurus
|
|
assert formats.sign_index(359.9) == 11 # Pisces
|
|
|
|
|
|
def test_in_sign_basic():
|
|
# 40°08'21" absolutnie = Taurus 10°08'21"
|
|
assert formats.in_sign(40.139166) == "Tau 10°08'21\""
|
|
|
|
|
|
def test_absolute():
|
|
assert formats.absolute(40.139166) == "40°08'21\""
|
|
|
|
|
|
def test_wraparound_and_norm():
|
|
assert formats.norm360(370.0) == 10.0
|
|
assert formats.norm360(-1.0) == 359.0
|
|
|
|
|
|
def test_rounding_carry_into_next_sign():
|
|
# tuż przy granicy znaku zaokrąglenie nie może dać "30°"
|
|
s = formats.in_sign(59.99999)
|
|
assert s.startswith("Gem 0°") or s.startswith("Tau 29°59")
|