44 lines
1.9 KiB
Go
44 lines
1.9 KiB
Go
|
|
package formula
|
||
|
|
|
||
|
|
import (
|
||
|
|
"math"
|
||
|
|
"testing"
|
||
|
|
)
|
||
|
|
|
||
|
|
func TestAirmassModels(t *testing.T) {
|
||
|
|
assertFormulaClose(t, "AirmassPlaneParallel(90)", AirmassPlaneParallel(90), 1, 1e-15)
|
||
|
|
assertFormulaClose(t, "AirmassPlaneParallel(30)", AirmassPlaneParallel(30), 2, 1e-15)
|
||
|
|
if !math.IsInf(AirmassPlaneParallel(0), 1) {
|
||
|
|
t.Fatal("expected plane-parallel airmass at horizon to be +Inf")
|
||
|
|
}
|
||
|
|
|
||
|
|
assertFormulaClose(t, "AirmassPlaneParallelByZenithDistance(0)", AirmassPlaneParallelByZenithDistance(0), 1, 1e-15)
|
||
|
|
assertFormulaClose(t, "AirmassPlaneParallelByZenithDistance(60)", AirmassPlaneParallelByZenithDistance(60), 2, 1e-12)
|
||
|
|
if !math.IsInf(AirmassPlaneParallelByZenithDistance(90), 1) {
|
||
|
|
t.Fatal("expected sec(z) at z=90 to be +Inf")
|
||
|
|
}
|
||
|
|
|
||
|
|
assertFormulaClose(t, "AirmassKastenYoung(90)", AirmassKastenYoung(90), 0.9997119918558381, 1e-15)
|
||
|
|
assertFormulaClose(t, "AirmassKastenYoung(30)", AirmassKastenYoung(30), 1.9942928525292503, 1e-15)
|
||
|
|
assertFormulaClose(t, "AirmassKastenYoung(0)", AirmassKastenYoung(0), 37.91960837783633, 1e-12)
|
||
|
|
|
||
|
|
assertFormulaClose(t, "AirmassPickering(90)", AirmassPickering(90), 1.000000196171337, 1e-15)
|
||
|
|
assertFormulaClose(t, "AirmassPickering(30)", AirmassPickering(30), 1.9931538464145713, 1e-15)
|
||
|
|
assertFormulaClose(t, "AirmassPickering(0)", AirmassPickering(0), 38.749398755780355, 1e-12)
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestAirmassInvalidInput(t *testing.T) {
|
||
|
|
for name, value := range map[string]float64{
|
||
|
|
"plane-parallel negative altitude": AirmassPlaneParallel(-1),
|
||
|
|
"plane-parallel >90 altitude": AirmassPlaneParallel(91),
|
||
|
|
"plane-parallel zenith <0": AirmassPlaneParallelByZenithDistance(-1),
|
||
|
|
"plane-parallel zenith >90": AirmassPlaneParallelByZenithDistance(91),
|
||
|
|
"kasten-young negative altitude": AirmassKastenYoung(-1),
|
||
|
|
"pickering >90 altitude": AirmassPickering(91),
|
||
|
|
} {
|
||
|
|
if !math.IsNaN(value) {
|
||
|
|
t.Fatalf("%s should be NaN, got %.15f", name, value)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|