Files
astro/basic/planet_event_perf_test.go
T
b612 2bf8478639 feat: 完善日月食与月掩几何链路并扩展历法接口
- 新增日月食中心带、偏食带、阴影足迹、等时线、食分线及升落边界计算,支持极区与混合食拓扑
- 新增日食单时刻阴影求解器、站心状态查询、批量采样和 ΔT 覆盖接口
- 重构恒星与行星月掩路径,补充有限盘面接触、站心修正、掩带宽度、极区投影及升落边界
- 扩展 SVG 与 GeoJSON 输出,支持详细面板、全球/极区/地球投影、边界闭合、时间标记和拓扑签名
- 扩展日月食候选搜索、局地搜索、沙罗序列预计算与范围外推,补充系列锚点和成员一致性校验
- 补齐古历纪年、儒略历独有闰日、多公历候选、历法改革跨日及精确日期运算接口
- 优化 ΔT、章动、恒星时、月球地平线、事件根搜索和本地星历缓存,降低重复计算开销并提升边界稳定
2026-09-17 12:27:40 +08:00

113 lines
3.0 KiB
Go

package basic
import (
"math"
"testing"
)
// 本切片(行星/月球事件层)的性能守护基准;改动热路径时必须给出改前→改后。
func BenchmarkPlanetEventGreatestElongationAnySide(b *testing.B) {
jd := JDECalc(2025, 3, 1)
b.Run("Mercury", func(b *testing.B) {
for i := 0; i < b.N; i++ {
_ = NextMercuryGreatestElongation(jd)
}
})
b.Run("Venus", func(b *testing.B) {
for i := 0; i < b.N; i++ {
_ = NextVenusGreatestElongation(jd)
}
})
}
func BenchmarkPlanetEventOuterStationNonFiniteQuery(b *testing.B) {
for _, tc := range []struct {
name string
fn func(float64) float64
}{
{"Mars", NextMarsProgradeToRetrograde},
{"Jupiter", NextJupiterProgradeToRetrograde},
{"Saturn", NextSaturnProgradeToRetrograde},
{"Uranus", NextUranusProgradeToRetrograde},
{"Neptune", NextNeptuneProgradeToRetrograde},
} {
b.Run(tc.name, func(b *testing.B) {
for i := 0; i < b.N; i++ {
_ = tc.fn(math.NaN())
}
})
}
}
func BenchmarkPlanetEventMoonMaximumDeclination(b *testing.B) {
jd := JDECalc(2025, 3, 1)
b.Run("Next", func(b *testing.B) {
for i := 0; i < b.N; i++ {
_ = NextMoonMaximumNorthDeclination(jd)
}
})
b.Run("Closest", func(b *testing.B) {
for i := 0; i < b.N; i++ {
_ = ClosestMoonMaximumNorthDeclination(jd)
}
})
}
func BenchmarkPlanetEventLunarEclipse(b *testing.B) {
jd := 2458860.0
for i := 0; i < b.N; i++ {
_ = LunarEclipse(jd)
}
}
func BenchmarkPlanetEventJupiterGalileanCallisto(b *testing.B) {
b.Run("NextTransit", func(b *testing.B) {
jd := 2463143.9646
for i := 0; i < b.N; i++ {
_ = NextJupiterGalileanPhenomenonEvent(jd, 4, JupiterGalileanTransit)
}
})
b.Run("ClosestOccultation", func(b *testing.B) {
jd := 2463400.0
for i := 0; i < b.N; i++ {
_ = ClosestJupiterGalileanPhenomenonEvent(jd, 4, JupiterGalileanOccultation)
}
})
}
func BenchmarkPlanetEventJupiterSixEventsSameInstant(b *testing.B) {
jd := JDECalc(2025, 3, 1)
for i := 0; i < b.N; i++ {
_ = NextJupiterConjunction(jd)
_ = NextJupiterOpposition(jd)
_ = NextJupiterEasternQuadrature(jd)
_ = NextJupiterWesternQuadrature(jd)
_ = NextJupiterProgradeToRetrograde(jd)
_ = NextJupiterRetrogradeToPrograde(jd)
}
}
func BenchmarkPlanetEventLunarEclipseDiagram(b *testing.B) {
jd := 2458860.0
options := LunarEclipseDiagramOptions{StepDays: 1.0 / 86400.0}
for i := 0; i < b.N; i++ {
_ = LunarEclipseDiagram(jd, options)
}
}
// 差分对照基准:改动前“两侧都算再取极值”的聚合方式。
func BenchmarkPlanetEventGreatestElongationBothSidesReference(b *testing.B) {
mercuryJD, venusJD := JDECalc(2025, 3, 1), JDECalc(2025, 3, 1)
b.Run("Mercury", func(b *testing.B) {
for i := 0; i < b.N; i++ {
_ = earliestFiniteEventUT(NextMercuryGreatestElongationEast(mercuryJD), NextMercuryGreatestElongationWest(mercuryJD))
}
})
b.Run("Venus", func(b *testing.B) {
for i := 0; i < b.N; i++ {
_ = earliestFiniteEventUT(NextVenusGreatestElongationEast(venusJD), NextVenusGreatestElongationWest(venusJD))
}
})
}