39 lines
1.3 KiB
Go
39 lines
1.3 KiB
Go
package validation
|
|
|
|
import (
|
|
"fmt"
|
|
"testing"
|
|
|
|
"gitea.maximumdirect.net/eric/ReleaseKit/internal/git"
|
|
)
|
|
|
|
func BenchmarkSelectInputEntriesByModuleCount(b *testing.B) {
|
|
const retainedFiles = 20000
|
|
for _, boundaries := range []int{0, 1000, 4000} {
|
|
b.Run(fmt.Sprintf("boundaries=%d", boundaries), func(b *testing.B) {
|
|
entries := make([]git.TreeEntry, 0, retainedFiles+2*boundaries)
|
|
entries = append(entries, git.TreeEntry{Path: "go.mod", Type: "blob", Mode: "100644"})
|
|
for file := 1; file < retainedFiles; file++ {
|
|
entries = append(entries, git.TreeEntry{Path: fmt.Sprintf("source/file-%06d.txt", file), Type: "blob", Mode: "100644"})
|
|
}
|
|
for module := 0; module < boundaries; module++ {
|
|
directory := fmt.Sprintf("modules/unit-%06d", module)
|
|
entries = append(entries,
|
|
git.TreeEntry{Path: directory + "/go.mod", Type: "blob", Mode: "100644"},
|
|
git.TreeEntry{Path: directory + "/source.go", Type: "blob", Mode: "100644"})
|
|
}
|
|
byPath := make(map[string]int, len(entries))
|
|
for i, entry := range entries {
|
|
byPath[entry.Path] = i
|
|
}
|
|
b.ReportAllocs()
|
|
for b.Loop() {
|
|
selected, err := selectInputEntries(entries, byPath, ".", []string{})
|
|
if err != nil || len(selected) != retainedFiles {
|
|
b.Fatalf("selected %d files, error=%v; want %d", len(selected), err, retainedFiles)
|
|
}
|
|
}
|
|
})
|
|
}
|
|
}
|