16c62a97d5
- 新增时标、ΔT 模型、质心时间与 UT1 支持 - 改进日月食、月掩、行星事件及路径边界计算 - 完善恒星三维自行与动态距离传播 - 扩展 SVG、GeoJSON、KML 输出与底层距离换算工具 - 整理中英文手册、示例资源及回归测试
113 lines
3.0 KiB
Go
113 lines
3.0 KiB
Go
package basic
|
|
|
|
import (
|
|
"math"
|
|
"testing"
|
|
)
|
|
|
|
// 本切片(行星/月球事件层)的性能守护基准;改动热路径时必须给出改前→改后。
|
|
|
|
func BenchmarkPlanetEventGreatestElongationAnySide(b *testing.B) {
|
|
jd := JDCalc(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 := JDCalc(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 := JDCalc(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 := JDCalc(2025, 3, 1), JDCalc(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))
|
|
}
|
|
})
|
|
}
|