Files
astro/basic/calendar_test.go
T

71 lines
1.7 KiB
Go
Raw Permalink Normal View History

2024-01-15 17:05:18 +08:00
package basic
import (
"math"
2025-01-31 15:35:36 +08:00
"testing"
2024-01-15 17:05:18 +08:00
)
2025-09-15 20:55:38 +08:00
func TestGetJQTime(t *testing.T) {
2026-05-01 22:38:44 +08:00
originalFunc := func(year, angle int) float64 {
const iterations = 1
var day int
if angle%2 == 0 {
day = 18
2025-09-15 20:55:38 +08:00
} else {
2026-05-01 22:38:44 +08:00
day = 3
2025-09-15 20:55:38 +08:00
}
2026-05-01 22:38:44 +08:00
month := 3.0
if angle%10 != 0 {
month += float64(angle+15) / 30.0
2025-09-15 20:55:38 +08:00
} else {
2026-05-01 22:38:44 +08:00
month += float64(angle) / 30.0
2025-09-15 20:55:38 +08:00
}
2026-05-01 22:38:44 +08:00
if month > 12 {
month -= 12
2025-09-15 20:55:38 +08:00
}
2026-05-01 22:38:44 +08:00
jd := JDECalc(year, int(month), float64(day))
if angle == 0 {
angle = 360
2025-09-15 20:55:38 +08:00
}
2026-05-01 22:38:44 +08:00
for i := 0; i < iterations; i++ {
2025-09-15 20:55:38 +08:00
for {
2026-05-01 22:38:44 +08:00
jd0 := jd
slope := (JQLospec(jd0+0.000005, float64(angle)) - JQLospec(jd0-0.000005, float64(angle))) / 0.00001
jd = jd0 - (JQLospec(jd0, float64(angle))-float64(angle))/slope
if math.Abs(jd-jd0) <= 0.00001 {
2025-09-15 20:55:38 +08:00
break
}
}
2026-05-01 22:38:44 +08:00
jd -= 0.001
2025-09-15 20:55:38 +08:00
}
2026-05-01 22:38:44 +08:00
jd += 0.001
return TD2UT(jd, false)
2025-09-15 20:55:38 +08:00
}
testCases := []struct {
2026-05-01 22:38:44 +08:00
year int
angle int
2025-09-15 20:55:38 +08:00
}{
2026-05-01 22:38:44 +08:00
{1900, 0}, {1900, 15}, {1900, 30}, {1900, 45}, {1900, 90}, {1900, 180}, {1900, 270}, {1900, 360},
2025-09-15 20:55:38 +08:00
{1950, 0}, {1950, 30}, {1950, 90}, {1950, 180}, {1950, 270},
{2000, 0}, {2000, 15}, {2000, 45}, {2000, 90}, {2000, 360},
{2023, 0}, {2023, 30}, {2023, 90}, {2023, 180}, {2023, 270},
2026-05-01 22:38:44 +08:00
{2100, 0}, {2100, 15}, {2100, 30}, {2100, 45}, {2100, 90}, {2100, 180}, {2100, 270}, {2100, 360},
2025-09-15 20:55:38 +08:00
{2200, 0}, {2200, 30}, {2200, 90}, {2200, 180}, {2200, 270},
}
for _, tc := range testCases {
originalResult := originalFunc(tc.year, tc.angle)
optimizedResult := GetJQTime(tc.year, tc.angle)
diff := math.Abs(originalResult - optimizedResult)
if diff > 1e-10 {
2026-05-01 22:38:44 +08:00
t.Fatalf("GetJQTime mismatch: year=%d angle=%d original=%.15f optimized=%.15f diff=%.15f",
2025-09-15 20:55:38 +08:00
tc.year, tc.angle, originalResult, optimizedResult, diff)
}
}
2026-02-20 12:11:38 +08:00
}