Add a benchmark

This commit is contained in:
Bjørn Erik Pedersen 2021-05-04 17:45:24 +02:00
parent 64f88f3011
commit b660ea8d54
No known key found for this signature in database
GPG key ID: 330E6E2BD4859D8F

View file

@ -11,17 +11,21 @@ import (
) )
func newPagesPrevNextTestSite(t testing.TB, numPages int) *sitesBuilder { func newPagesPrevNextTestSite(t testing.TB, numPages int) *sitesBuilder {
categories := []string{"blue", "green", "red", "orange", "indigo", "amber", "lime"}
cat1, cat2 := categories[rand.Intn(len(categories))], categories[rand.Intn(len(categories))]
categoriesSlice := fmt.Sprintf("[%q,%q]", cat1, cat2)
pageTemplate := ` pageTemplate := `
--- ---
title: "Page %d" title: "Page %d"
weight: %d weight: %d
categories: %s
--- ---
` `
b := newTestSitesBuilder(t) b := newTestSitesBuilder(t)
for i := 1; i <= numPages; i++ { for i := 1; i <= numPages; i++ {
b.WithContent(fmt.Sprintf("page%d.md", i), fmt.Sprintf(pageTemplate, i, rand.Intn(numPages))) b.WithContent(fmt.Sprintf("page%d.md", i), fmt.Sprintf(pageTemplate, i, rand.Intn(numPages), categoriesSlice))
} }
return b return b
@ -81,3 +85,35 @@ func BenchmarkPagesPrevNext(b *testing.B) {
} }
} }
} }
func BenchmarkPagePageCollections(b *testing.B) {
type Variant struct {
name string
run func(p page.Page)
}
for _, variant := range []Variant{
{".Pages", func(p page.Page) { p.Pages() }},
{".RegularPages", func(p page.Page) { p.RegularPages() }},
{".RegularPagesRecursive", func(p page.Page) { p.RegularPagesRecursive() }},
} {
for _, numPages := range []int{300, 5000} {
b.Run(fmt.Sprintf("%s-%d", variant.name, numPages), func(b *testing.B) {
b.StopTimer()
builder := newPagesPrevNextTestSite(b, numPages)
builder.Build(BuildCfg{SkipRender: true})
var pages page.Pages
for _, p := range builder.H.Sites[0].Pages() {
if !p.IsPage() {
pages = append(pages, p)
}
}
b.StartTimer()
for i := 0; i < b.N; i++ {
p := pages[rand.Intn(len(pages))]
variant.run(p)
}
})
}
}
}