Files
astro/sun/context_test.go
T

80 lines
3.6 KiB
Go
Raw Normal View History

package sun
import (
"b612.me/astro/basic"
"b612.me/astro/internal/ephem"
"testing"
"time"
)
type contextAPI interface {
Altitude(date time.Time, lon, lat float64) float64
AltitudeN(date time.Time, lon, lat float64, n int) float64
ApparentAltitude(date time.Time, lon, lat, pressureHPa, temperatureC float64) float64
ApparentAltitudeN(date time.Time, lon, lat, pressureHPa, temperatureC float64, n int) float64
ApparentDec(date time.Time) float64
ApparentLo(date time.Time) float64
ApparentRa(date time.Time) float64
ApparentRaDec(date time.Time) (float64, float64)
ApparentSolarTime(date time.Time, lon float64) time.Time
ApparentSolarTimeN(date time.Time, lon float64, n int) time.Time
ApparentZenith(date time.Time, lon, lat, pressureHPa, temperatureC float64) float64
ApparentZenithN(date time.Time, lon, lat, pressureHPa, temperatureC float64, n int) float64
AxialtiltNutation(date time.Time) float64
AxialtiltNutation1980(date time.Time) float64
Azimuth(date time.Time, lon, lat float64) float64
AzimuthN(date time.Time, lon, lat float64, n int) float64
CulminationTime(date time.Time, lon float64) time.Time
CulminationTimeN(date time.Time, lon float64, n int) time.Time
Diameter(date time.Time) float64
DiameterN(date time.Time, n int) float64
DownTime(date time.Time, lon, lat, height float64, aero bool) (time.Time, error)
DownTimeN(date time.Time, lon, lat, height float64, aero bool, n int) (time.Time, error)
EarthDistance(date time.Time) float64
EclipticNutation(date time.Time) float64
EclipticNutation1980(date time.Time) float64
EclipticObliquity(date time.Time, nutation bool) float64
EquationTime(date time.Time) float64
EveningTwilight(date time.Time, lon, lat, angle float64) (time.Time, error)
EveningTwilightN(date time.Time, lon, lat, angle float64, n int) (time.Time, error)
GeometricLo(date time.Time) float64
HourAngle(date time.Time, lon, lat float64) float64
HourAngleN(date time.Time, lon, lat float64, n int) float64
MidFunc(date time.Time) float64
MorningTwilight(date time.Time, lon, lat, angle float64) (time.Time, error)
MorningTwilightN(date time.Time, lon, lat, angle float64, n int) (time.Time, error)
ParallacticAngle(date time.Time, lon, lat float64) float64
ParallacticAngleN(date time.Time, lon, lat float64, n int) float64
Physical(date time.Time) PhysicalInfo
PhysicalN(date time.Time, n int) PhysicalInfo
RiseTime(date time.Time, lon, lat, height float64, aero bool) (time.Time, error)
RiseTimeN(date time.Time, lon, lat, height float64, aero bool, n int) (time.Time, error)
Semidiameter(date time.Time) float64
SemidiameterN(date time.Time, n int) float64
SetTime(date time.Time, lon, lat, height float64, aero bool) (time.Time, error)
SetTimeN(date time.Time, lon, lat, height float64, aero bool, n int) (time.Time, error)
TrueBo(date time.Time) float64
TrueBoN(date time.Time, n int) float64
TrueLo(date time.Time) float64
TrueLoN(date time.Time, n int) float64
Zenith(date time.Time, lon, lat float64) float64
ZenithN(date time.Time, lon, lat float64, n int) float64
}
var _ contextAPI = (*Sun)(nil)
func TestContextModuleIsolation(t *testing.T) {
previous := basic.GetEphemerisModel()
t.Cleanup(func() { basic.SetEphemerisModel(previous) })
date := time.Date(2024, 10, 6, 12, 0, 0, 0, time.UTC)
for _, model := range []ephem.Model{ephem.Legacy, ephem.Semianalytic} {
basic.SetEphemerisModel(basic.EphemerisModel(model))
want := ApparentLo(date)
module := NewWithInstance(ephem.NewModelInstance(model))
basic.SetEphemerisModel(basic.EphemerisModel(1 - int(model)))
if got := module.ApparentLo(date); got != want {
t.Fatalf("model %d: longitude %.12f, want %.12f", model, got, want)
}
}
}