astro/basic/constellation_regression_test.go

73 lines
2.4 KiB
Go
Raw Normal View History

package basic
import (
_ "embed"
"encoding/json"
"testing"
"time"
)
type constellationBaselineSample struct {
RA float64 `json:"ra"`
Dec float64 `json:"dec"`
JDE float64 `json:"jde"`
Code string `json:"code"`
ZH string `json:"zh"`
}
//go:embed testdata/cst_baseline.json
var constellationBaselineJSON []byte
func loadCstBaseline(t *testing.T) []constellationBaselineSample {
t.Helper()
var samples []constellationBaselineSample
if err := json.Unmarshal(constellationBaselineJSON, &samples); err != nil {
t.Fatalf("unmarshal constellation baseline: %v", err)
}
return samples
}
func TestConstellationBaseline(t *testing.T) {
samples := loadCstBaseline(t)
for index, sample := range samples {
if code := resolveConstellationCode(sample.RA, sample.Dec, sample.JDE); code != sample.Code {
t.Fatalf("sample %d code mismatch: ra=%.6f dec=%.6f jde=%.6f got=%q want=%q", index, sample.RA, sample.Dec, sample.JDE, code, sample.Code)
}
if code := ConstellationCode(sample.RA, sample.Dec, sample.JDE); code != sample.Code {
t.Fatalf("sample %d wrapper mismatch: ra=%.6f dec=%.6f jde=%.6f got=%q want=%q", index, sample.RA, sample.Dec, sample.JDE, code, sample.Code)
}
if zh := ConstellationNameZH(sample.RA, sample.Dec, sample.JDE); zh != sample.ZH {
t.Fatalf("sample %d zh mismatch: ra=%.6f dec=%.6f jde=%.6f got=%q want=%q", index, sample.RA, sample.Dec, sample.JDE, zh, sample.ZH)
}
}
}
func TestConstellationNameLookups(t *testing.T) {
tests := []struct {
code string
zh string
en string
}{
{code: "ORI", zh: "猎户座", en: "Orion"},
{code: "PSC", zh: "双鱼座", en: "Pisces"},
{code: "SER1", zh: "巨蛇座", en: "Serpens Caput"},
{code: "SER2", zh: "巨蛇座", en: "Serpens Cauda"},
{code: "UMI", zh: "小熊座", en: "Ursa Minor"},
}
for _, testCase := range tests {
if zh := ConstellationNameByCodeZH(testCase.code); zh != testCase.zh {
t.Fatalf("ConstellationNameByCodeZH(%q) = %q, want %q", testCase.code, zh, testCase.zh)
}
if en := ConstellationNameByCodeEN(testCase.code); en != testCase.en {
t.Fatalf("ConstellationNameByCodeEN(%q) = %q, want %q", testCase.code, en, testCase.en)
}
}
}
func TestConstellationNameEN(t *testing.T) {
jde := Date2JDE(time.Date(2000, 1, 1, 0, 0, 0, 0, time.UTC))
if en := ConstellationNameEN(88.792939, 7.407064, jde); en != "Orion" {
t.Fatalf("ConstellationNameEN() = %q, want %q", en, "Orion")
}
}