package search import ( "fmt" "math/rand" "strings" "testing" ) // buildLargeIndex 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 buildLargeIndex() *Index { const ( entries = 10_000 words = 150 vocabulary = 20_000 ) rng := rand.New(rand.NewSource(1)) idx := NewIndex() var text strings.Builder for i := 0; i < entries; i++ { text.Reset() for j := 0; j < words; j++ { fmt.Fprintf(&text, "wort%d ", rng.Intn(vocabulary)) } 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 := buildLargeIndex() b.ResetTimer() for i := 0; i < b.N; i++ { idx.Search("wie funktioniert wort123 mit wort4567", 10) } }