Files
astro/eclipse/solar_bessel_test.go
T
b612 16c62a97d5 feat: 完善时标与天象几何计算并扩展输出接口
- 新增时标、ΔT 模型、质心时间与 UT1 支持
- 改进日月食、月掩、行星事件及路径边界计算
- 完善恒星三维自行与动态距离传播
- 扩展 SVG、GeoJSON、KML 输出与底层距离换算工具
- 整理中英文手册、示例资源及回归测试
2026-09-23 18:55:12 +08:00

63 lines
2.2 KiB
Go

package eclipse
import (
"math"
"testing"
"b612.me/astro/basic"
)
// 公开包装层与被包装的 basic 结果逐字段一致,模型枚举按 eclipse 层取值。
func TestSolarEclipseBesselianElementsWrapsBasic(t *testing.T) {
options := SolarEclipseBesselianElementsOptions{
DeltaTSeconds: 70.6,
ReferenceJDE: 2460409.25,
}
result, ok := SolarEclipseBesselianElements(2460409.262835, options)
if !ok {
t.Fatal("2024-04-08 should have a solar eclipse")
}
if result.Model != SolarEclipseModelNASABulletinSplitK {
t.Errorf("model = %q, want %q", result.Model, SolarEclipseModelNASABulletinSplitK)
}
if math.Abs(result.Gamma-0.3431) > 1e-4 || math.Abs(result.Magnitude-1.0566) > 1e-3 {
t.Errorf("gamma/magnitude = %g / %g", result.Gamma, result.Magnitude)
}
if math.Abs(result.TanF1-0.0046683) > 1e-6 || math.Abs(result.TanF2-0.0046450) > 1e-6 {
t.Errorf("tan f = %g / %g", result.TanF1, result.TanF2)
}
published := SolarEclipseBesselianMuForPublishedTable(result.Mu, result.DeltaTSeconds)
if math.Abs(published.At(0)-89.59122) > 1e-4 {
t.Errorf("published mu(0) = %g, want 89.59122", published.At(0))
}
if math.Abs(result.X.At(0)-(-0.318157)) > 2e-4 || math.Abs(result.Y.At(0)-0.219747) > 2e-4 {
t.Errorf("x/y at t0 = %g / %g", result.X.At(0), result.Y.At(0))
}
if result.PenumbralK != basic.SolarEclipsePenumbralK || result.UmbralK != basic.SolarEclipseUmbralK {
t.Errorf("k = %g / %g", result.PenumbralK, result.UmbralK)
}
}
func TestSolarEclipseBesselianElementsWithoutEclipse(t *testing.T) {
if _, ok := SolarEclipseBesselianElements(2460486.5, SolarEclipseBesselianElementsOptions{}); ok {
t.Fatal("this new moon has no solar eclipse")
}
}
func TestSolarEclipseBesselianElementsIAUSingleK(t *testing.T) {
result, ok := SolarEclipseBesselianElements(2460409.262835, SolarEclipseBesselianElementsOptions{
Model: SolarEclipseModelIAUSingleK,
DeltaTSeconds: 70.6,
})
if !ok {
t.Fatal("2024-04-08 should have a solar eclipse")
}
if result.Model != SolarEclipseModelIAUSingleK {
t.Errorf("model = %q, want %q", result.Model, SolarEclipseModelIAUSingleK)
}
if result.UmbralK != result.PenumbralK {
t.Errorf("k2 = %g, want k1 = %g", result.UmbralK, result.PenumbralK)
}
}