diff options
author | Bjørn Erik Pedersen <[email protected]> | 2022-04-10 20:30:52 +0200 |
---|---|---|
committer | Bjørn Erik Pedersen <[email protected]> | 2022-04-12 13:24:16 +0200 |
commit | 627eed1d620910f494056330733db6c6187b8fe9 (patch) | |
tree | a136a398e8f85b10d3de7b1781825453886435ed /langs/language_test.go | |
parent | 82ba634ed90186c756189a79b637559b28dd363e (diff) | |
download | hugo-627eed1d620910f494056330733db6c6187b8fe9.tar.gz hugo-627eed1d620910f494056330733db6c6187b8fe9.zip |
Make string sorting (e.g. ByTitle, ByLinkTitle and ByParam) language aware
Fixes #2180
Diffstat (limited to 'langs/language_test.go')
-rw-r--r-- | langs/language_test.go | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/langs/language_test.go b/langs/language_test.go index e6ef94824..264e813a0 100644 --- a/langs/language_test.go +++ b/langs/language_test.go @@ -14,10 +14,13 @@ package langs import ( + "sync" "testing" qt "github.com/frankban/quicktest" "github.com/gohugoio/hugo/config" + "golang.org/x/text/collate" + "golang.org/x/text/language" ) func TestGetGlobalOnlySetting(t *testing.T) { @@ -47,3 +50,59 @@ func TestLanguageParams(t *testing.T) { c.Assert(lang.Params()["p1"], qt.Equals, "p1p") c.Assert(lang.Get("p1"), qt.Equals, "p1cfg") } + +func TestCollator(t *testing.T) { + + c := qt.New(t) + + var wg sync.WaitGroup + + coll := &Collator{c: collate.New(language.English, collate.Loose)} + + for i := 0; i < 10; i++ { + wg.Add(1) + go func() { + coll.Lock() + defer coll.Unlock() + defer wg.Done() + for j := 0; j < 10; j++ { + k := coll.CompareStrings("abc", "def") + c.Assert(k, qt.Equals, -1) + } + }() + } + wg.Wait() + +} + +func BenchmarkCollator(b *testing.B) { + s := []string{"foo", "bar", "éntre", "baz", "qux", "quux", "corge", "grault", "garply", "waldo", "fred", "plugh", "xyzzy", "thud"} + + doWork := func(coll *Collator) { + for i := 0; i < len(s); i++ { + for j := i + 1; j < len(s); j++ { + _ = coll.CompareStrings(s[i], s[j]) + } + } + } + + b.Run("Single", func(b *testing.B) { + coll := &Collator{c: collate.New(language.English, collate.Loose)} + for i := 0; i < b.N; i++ { + doWork(coll) + } + }) + + b.Run("Para", func(b *testing.B) { + b.RunParallel(func(pb *testing.PB) { + coll := &Collator{c: collate.New(language.English, collate.Loose)} + + for pb.Next() { + coll.Lock() + doWork(coll) + coll.Unlock() + } + }) + }) + +} |