73 lines
2.4 KiB
Go
73 lines
2.4 KiB
Go
|
|
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")
|
||
|
|
}
|
||
|
|
}
|