94 lines
3.1 KiB
Go
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)
|
||
|
|
}
|
||
|
|
}
|