munin/internal/search/bench_test.go

48 lines
1.2 KiB
Go

package search
import (
"fmt"
"math/rand"
"strings"
"testing"
)
// baueGrossenIndex legt einen Index in der Größenordnung eines großen Projekts
// an: 10.000 Einträge à 150 Wörter aus einem Wortschatz von 20.000 Wörtern.
//
// Die Wörter sind künstlich ("wort123"), das genügt: Für die Laufzeit zählt,
// wie viele verschiedene Wörter der Index durchgehen muss, nicht was sie heißen.
// Der feste Startwert macht jeden Lauf gleich.
func baueGrossenIndex() *Index {
const (
eintraege = 10_000
woerter = 150
wortschatz = 20_000
)
zufall := rand.New(rand.NewSource(1))
idx := NewIndex()
var text strings.Builder
for i := 0; i < eintraege; i++ {
text.Reset()
for j := 0; j < woerter; j++ {
fmt.Fprintf(&text, "wort%d ", zufall.Intn(wortschatz))
}
idx.Index(fmt.Sprintf("eintrag-%d", i), "Titel", text.String(), nil)
}
return idx
}
// BenchmarkSearch misst eine typische Agenten-Anfrage: eine ganze Frage mit
// Stoppwörtern und Wörtern, die es im Index nicht gibt.
//
// go test ./internal/search/ -bench . -run '^$'
func BenchmarkSearch(b *testing.B) {
idx := baueGrossenIndex()
b.ResetTimer()
for i := 0; i < b.N; i++ {
idx.Search("wie funktioniert wort123 mit wort4567", 10)
}
}