pages_test.go - hugo - [fork] hugo port for 9front
 (HTM) git clone https://git.drkhsh.at/hugo.git
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) Submodules
 (DIR) README
 (DIR) LICENSE
       ---
       pages_test.go (3472B)
       ---
            1 package hugolib
            2 
            3 import (
            4         "fmt"
            5         "math/rand"
            6         "testing"
            7 
            8         "github.com/gohugoio/hugo/resources/page"
            9 
           10         qt "github.com/frankban/quicktest"
           11 )
           12 
           13 func newPagesPrevNextTestSite(t testing.TB, numPages int) *sitesBuilder {
           14         categories := []string{"blue", "green", "red", "orange", "indigo", "amber", "lime"}
           15         cat1, cat2 := categories[rand.Intn(len(categories))], categories[rand.Intn(len(categories))]
           16         categoriesSlice := fmt.Sprintf("[%q,%q]", cat1, cat2)
           17         pageTemplate := `
           18 ---
           19 title: "Page %d"
           20 weight: %d
           21 categories: %s
           22 ---
           23 
           24 `
           25         b := newTestSitesBuilder(t)
           26 
           27         for i := 1; i <= numPages; i++ {
           28                 b.WithContent(fmt.Sprintf("page%d.md", i), fmt.Sprintf(pageTemplate, i, rand.Intn(numPages), categoriesSlice))
           29         }
           30 
           31         return b
           32 }
           33 
           34 func TestPagesPrevNext(t *testing.T) {
           35         b := newPagesPrevNextTestSite(t, 100)
           36         b.Build(BuildCfg{SkipRender: true})
           37 
           38         pages := b.H.Sites[0].RegularPages()
           39 
           40         b.Assert(pages, qt.HasLen, 100)
           41 
           42         for _, p := range pages {
           43                 msg := qt.Commentf("w=%d", p.Weight())
           44                 b.Assert(pages.Next(p), qt.Equals, p.Next(), msg)
           45                 b.Assert(pages.Prev(p), qt.Equals, p.Prev(), msg)
           46         }
           47 }
           48 
           49 func BenchmarkPagesPrevNext(b *testing.B) {
           50         type Variant struct {
           51                 name         string
           52                 preparePages func(pages page.Pages) page.Pages
           53                 run          func(p page.Page, pages page.Pages)
           54         }
           55 
           56         shufflePages := func(pages page.Pages) page.Pages {
           57                 rand.Shuffle(len(pages), func(i, j int) { pages[i], pages[j] = pages[j], pages[i] })
           58                 return pages
           59         }
           60 
           61         for _, variant := range []Variant{
           62                 {".Next", nil, func(p page.Page, pages page.Pages) { p.Next() }},
           63                 {".Prev", nil, func(p page.Page, pages page.Pages) { p.Prev() }},
           64                 {"Pages.Next", nil, func(p page.Page, pages page.Pages) { pages.Next(p) }},
           65                 {"Pages.Prev", nil, func(p page.Page, pages page.Pages) { pages.Prev(p) }},
           66                 {"Pages.Shuffled.Next", shufflePages, func(p page.Page, pages page.Pages) { pages.Next(p) }},
           67                 {"Pages.Shuffled.Prev", shufflePages, func(p page.Page, pages page.Pages) { pages.Prev(p) }},
           68                 {"Pages.ByTitle.Next", func(pages page.Pages) page.Pages { return pages.ByTitle() }, func(p page.Page, pages page.Pages) { pages.Next(p) }},
           69         } {
           70                 for _, numPages := range []int{300, 5000} {
           71                         b.Run(fmt.Sprintf("%s-pages-%d", variant.name, numPages), func(b *testing.B) {
           72                                 b.StopTimer()
           73                                 builder := newPagesPrevNextTestSite(b, numPages)
           74                                 builder.Build(BuildCfg{SkipRender: true})
           75                                 pages := builder.H.Sites[0].RegularPages()
           76                                 if variant.preparePages != nil {
           77                                         pages = variant.preparePages(pages)
           78                                 }
           79                                 b.StartTimer()
           80                                 for i := 0; i < b.N; i++ {
           81                                         p := pages[rand.Intn(len(pages))]
           82                                         variant.run(p, pages)
           83                                 }
           84                         })
           85                 }
           86         }
           87 }
           88 
           89 func BenchmarkPagePageCollections(b *testing.B) {
           90         type Variant struct {
           91                 name string
           92                 run  func(p page.Page)
           93         }
           94 
           95         for _, variant := range []Variant{
           96                 {".Pages", func(p page.Page) { p.Pages() }},
           97                 {".RegularPages", func(p page.Page) { p.RegularPages() }},
           98                 {".RegularPagesRecursive", func(p page.Page) { p.RegularPagesRecursive() }},
           99         } {
          100                 for _, numPages := range []int{300, 5000} {
          101                         b.Run(fmt.Sprintf("%s-%d", variant.name, numPages), func(b *testing.B) {
          102                                 b.StopTimer()
          103                                 builder := newPagesPrevNextTestSite(b, numPages)
          104                                 builder.Build(BuildCfg{SkipRender: true})
          105                                 var pages page.Pages
          106                                 for _, p := range builder.H.Sites[0].Pages() {
          107                                         if !p.IsPage() {
          108                                                 pages = append(pages, p)
          109                                         }
          110                                 }
          111                                 b.StartTimer()
          112                                 for i := 0; i < b.N; i++ {
          113                                         p := pages[rand.Intn(len(pages))]
          114                                         variant.run(p)
          115                                 }
          116                         })
          117                 }
          118         }
          119 }