spreadlab/internal/engine/bench_test.go
Justin Visser 91ce0c1ca5 engine: benchmark baseline (HolmeKim, RunScenario)
Manual baseline, not a CI gate: go test -bench=. -benchmem.
First numbers on a Ryzen 7 5800X: HolmeKim ~25us/op (48KB, 671
allocs), full RunScenario ~45us/op (78KB, 681 allocs). Plenty fast
until milestone 5 runs thousands of cascades per request; this is the
'before' picture for that work.
b.Loop() (Go 1.24+) replaces the old 'for i := 0; i < b.N; i++'
pattern and prevents the compiler optimising the loop body away.
2026-06-10 12:50:53 +02:00

30 lines
781 B
Go

package engine
import "testing"
// Benchmarks are a baseline, not a gate: run them manually with
//
// go test -bench=. -benchmem ./internal/engine/
//
// The numbers become interesting in milestone 5, when the optimisation
// feature starts running thousands of cascades per request; comparing
// against this baseline catches accidental quadratic behaviour.
func BenchmarkHolmeKim(b *testing.B) {
config := DefaultConfig()
for b.Loop() {
_, err := HolmeKim(config.NumStudents, config.EdgesPerNode, config.TriangleProb, newRand(config.GraphSeed))
if err != nil {
b.Fatal(err)
}
}
}
func BenchmarkRunScenario(b *testing.B) {
config := DefaultConfig()
for b.Loop() {
if _, err := RunScenario(config, StrategyMostConnected); err != nil {
b.Fatal(err)
}
}
}