81 lines
1.8 KiB
Go
81 lines
1.8 KiB
Go
// Copyright (c) 2026 Petr Balvín <opensource@petrbalvin.org> (https://petrbalvin.org)
|
||
// SPDX-License-Identifier: MIT
|
||
|
||
package core
|
||
|
||
import "testing"
|
||
|
||
// Miscellaneous bulk-path benchmarks: the generator fills, the sort
|
||
// family and the bilinear 2-D interpolation, at sizes where their
|
||
// inner loops dominate.
|
||
|
||
func BenchmarkGeneratorFloats1M(b *testing.B) {
|
||
g := NewGenerator(42)
|
||
b.ReportAllocs()
|
||
for b.Loop() {
|
||
if _, err := Floats(g, 1<<20); err != nil {
|
||
b.Fatal(err)
|
||
}
|
||
}
|
||
}
|
||
|
||
func BenchmarkGeneratorNormal1M(b *testing.B) {
|
||
g := NewGenerator(42)
|
||
b.ReportAllocs()
|
||
for b.Loop() {
|
||
if _, err := Normal(g, 1<<20, 0, 1); err != nil {
|
||
b.Fatal(err)
|
||
}
|
||
}
|
||
}
|
||
|
||
func BenchmarkSort1M(b *testing.B) {
|
||
a, _ := FromFloats(make([]float64, 1<<20), 1<<20)
|
||
g := NewGenerator(7)
|
||
src, _ := Floats(g, 1<<20)
|
||
copy(a.RawFloats(), src.RawFloats())
|
||
b.ResetTimer()
|
||
b.ReportAllocs()
|
||
for b.Loop() {
|
||
if _, err := Sort(a); err != nil {
|
||
b.Fatal(err)
|
||
}
|
||
}
|
||
}
|
||
|
||
func BenchmarkArgSort1M(b *testing.B) {
|
||
a, _ := FromFloats(make([]float64, 1<<20), 1<<20)
|
||
g := NewGenerator(7)
|
||
src, _ := Floats(g, 1<<20)
|
||
copy(a.RawFloats(), src.RawFloats())
|
||
b.ResetTimer()
|
||
b.ReportAllocs()
|
||
for b.Loop() {
|
||
if _, err := ArgSort(a); err != nil {
|
||
b.Fatal(err)
|
||
}
|
||
}
|
||
}
|
||
|
||
// BenchmarkInterp2D samples one million bilinear queries against a
|
||
// 1024×1024 grid.
|
||
func BenchmarkInterp2D(b *testing.B) {
|
||
grid, _ := FromFloats(make([]float64, 1024*1024), 1024, 1024)
|
||
for i := range grid.RawFloats() {
|
||
grid.RawFloats()[i] = float64(i%97) / 97
|
||
}
|
||
n := 1 << 20
|
||
xs, _ := FromFloats(make([]float64, n), n)
|
||
ys, _ := FromFloats(make([]float64, n), n)
|
||
for i := range n {
|
||
xs.RawFloats()[i] = float64(i%1023) + 0.5
|
||
ys.RawFloats()[i] = float64((i*7)%1023) + 0.25
|
||
}
|
||
b.ReportAllocs()
|
||
for b.Loop() {
|
||
if _, err := Interpolate2D(grid, xs, ys, 0, 0, 1, 1); err != nil {
|
||
b.Fatal(err)
|
||
}
|
||
}
|
||
}
|