Files
astro/basic/planet_input_guard_test.go
T
b612 9ee2163cc7 feat: 新增月掩与日月食地理绘图并提升观测计算精度
- 新增月掩恒星和行星:支持搜索、掩甚点、全球掩带及固定地点轨迹计算
- 支持恒星星表坐标转换、有限盘面行星接触事件和月掩 SVG 输出
- 新增日月食及月掩全球投影图、时间标记和 GeoJSON 地理数据接口
- 扩展日食中心线、南北界及偏食足迹采样,支持极区投影
- 修正站心时角、月出月落、月球视半径、折射和恒星自行计算
- 优化内外行星事件搜索、边界选择、极端输入处理和计算稳定性
2026-08-06 12:00:56 +08:00

94 lines
3.1 KiB
Go

package basic
import (
"math"
"testing"
)
func TestPlanetEventsRejectNonFiniteQuery(t *testing.T) {
nan := math.NaN()
events := []struct {
name string
fn func(float64) float64
}{
{"Mars conjunction", NextMarsConjunction},
{"Jupiter conjunction", NextJupiterConjunction},
{"Saturn conjunction", NextSaturnConjunction},
{"Uranus conjunction", NextUranusConjunction},
{"Neptune conjunction", NextNeptuneConjunction},
{"Mercury conjunction", NextMercuryConjunction},
{"Mercury greatest elongation", NextMercuryGreatestElongation},
{"Venus greatest elongation", NextVenusGreatestElongation},
{"Venus station", NextVenusProgradeToRetrograde},
}
for _, tc := range events {
t.Run(tc.name, func(t *testing.T) {
if got := tc.fn(nan); !math.IsNaN(got) {
t.Fatalf("got %v, want NaN", got)
}
})
}
}
func TestPlanetObservationRejectsNonFiniteQuery(t *testing.T) {
nan := math.NaN()
culminations := []struct {
name string
fn func(float64, float64, float64) float64
}{
{"Mercury", MercuryCulminationTime},
{"Venus", VenusCulminationTime},
{"Mars", MarsCulminationTime},
{"Jupiter", JupiterCulminationTime},
{"Saturn", SaturnCulminationTime},
{"Uranus", UranusCulminationTime},
{"Neptune", NeptuneCulminationTime},
}
for _, tc := range culminations {
t.Run(tc.name, func(t *testing.T) {
if got := tc.fn(nan, 0, 0); !math.IsNaN(got) {
t.Fatalf("got %v, want NaN", got)
}
})
}
if got := OrbitCulminationTime(nan, 0, 0, 0, 0, OrbitElements{}); !math.IsNaN(got) {
t.Fatalf("OrbitCulminationTime got %v, want NaN", got)
}
if got := MercuryCulminationTimeN(nan, 0, 0, 16); !math.IsNaN(got) {
t.Fatalf("MercuryCulminationTimeN got %v, want NaN", got)
}
if _, err := MarsRiseTime(nan, 0, 0, 0, 0, 0); err != ErrInvalidObservationInput {
t.Fatalf("MarsRiseTime error = %v, want ErrInvalidObservationInput", err)
}
if _, err := MercuryRiseTimeN(nan, 0, 0, 0, 0, 0, 16); err != ErrInvalidObservationInput {
t.Fatalf("MercuryRiseTimeN error = %v, want ErrInvalidObservationInput", err)
}
if got := JupiterGalileanSatelliteState(nan, 1); !math.IsNaN(got.X) {
t.Fatalf("JupiterGalileanSatelliteState X = %v, want NaN", got.X)
}
}
func TestSharedObservationRejectsNonFiniteQuery(t *testing.T) {
nan := math.NaN()
if got := MoonCulminationTime(nan, 0, 0, 0); !math.IsNaN(got) {
t.Fatalf("MoonCulminationTime got %v, want NaN", got)
}
if got := StarCulminationTime(nan, 0, 0, 0); !math.IsNaN(got) {
t.Fatalf("StarCulminationTime got %v, want NaN", got)
}
if got := CalcMoonSHByJDE(nan, 0); !math.IsNaN(got) {
t.Fatalf("CalcMoonSHByJDE got %v, want NaN", got)
}
if _, err := GetSunRiseTime(nan, 0, 0, 0, 0, 0); err != ErrInvalidObservationInput {
t.Fatalf("GetSunRiseTime error = %v, want ErrInvalidObservationInput", err)
}
if _, err := GetMoonRiseTime(nan, 0, 0, 0, 0, 0); err != ErrInvalidObservationInput {
t.Fatalf("GetMoonRiseTime error = %v, want ErrInvalidObservationInput", err)
}
if _, err := StarRiseTime(nan, 0, 0, 0, 0, 0, 0, false); err != ErrInvalidObservationInput {
t.Fatalf("StarRiseTime error = %v, want ErrInvalidObservationInput", err)
}
}