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) } }