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