]> git.maquefel.me Git - brevno-suite/hugo/commitdiff
tpl/collections: Make sort stable
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Sun, 8 May 2022 16:37:14 +0000 (18:37 +0200)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Sun, 8 May 2022 18:45:54 +0000 (20:45 +0200)
Fixes #9865

tpl/collections/integration_test.go
tpl/collections/sort.go

index d767c384c644193a223efca56da196745ca89cb3..225eab9faca5b2597bcee41d69fd3fbbd5a4d2b5 100644 (file)
@@ -43,3 +43,33 @@ baseURL = 'http://example.com/'
        [foo foo foo]
 `)
 }
+
+// Issue 9865
+func TestSortStable(t *testing.T) {
+       t.Parallel()
+
+       files := `
+-- config.toml --
+-- layouts/index.html --
+{{ $values := slice (dict "a" 1 "b" 2) (dict "a" 3 "b" 1) (dict "a" 2 "b" 0) (dict "a" 1 "b" 0) (dict "a" 3 "b" 1) (dict "a" 2 "b" 2) (dict "a" 2 "b" 1) (dict "a" 0 "b" 3) (dict "a" 3 "b" 3) (dict "a" 0 "b" 0) (dict "a" 0 "b" 0) (dict "a" 2 "b" 0) (dict "a" 1 "b" 2) (dict "a" 1 "b" 1) (dict "a" 3 "b" 0) (dict "a" 2 "b" 0) (dict "a" 3 "b" 0) (dict "a" 3 "b" 0) (dict "a" 3 "b" 0) (dict "a" 3 "b" 1) }}
+Asc:  {{ sort (sort $values "b" "asc") "a" "asc" }}
+Desc: {{ sort (sort $values "b" "desc") "a" "desc" }}
+
+  `
+
+       for i := 0; i < 4; i++ {
+
+               b := hugolib.NewIntegrationTestBuilder(
+                       hugolib.IntegrationTestConfig{
+                               T:           t,
+                               TxtarString: files,
+                       },
+               ).Build()
+
+               b.AssertFileContent("public/index.html", `
+Asc:  [map[a:0 b:0] map[a:0 b:0] map[a:0 b:3] map[a:1 b:0] map[a:1 b:1] map[a:1 b:2] map[a:1 b:2] map[a:2 b:0] map[a:2 b:0] map[a:2 b:0] map[a:2 b:1] map[a:2 b:2] map[a:3 b:0] map[a:3 b:0] map[a:3 b:0] map[a:3 b:0] map[a:3 b:1] map[a:3 b:1] map[a:3 b:1] map[a:3 b:3]]
+Desc: [map[a:3 b:3] map[a:3 b:1] map[a:3 b:1] map[a:3 b:1] map[a:3 b:0] map[a:3 b:0] map[a:3 b:0] map[a:3 b:0] map[a:2 b:2] map[a:2 b:1] map[a:2 b:0] map[a:2 b:0] map[a:2 b:0] map[a:1 b:2] map[a:1 b:2] map[a:1 b:1] map[a:1 b:0] map[a:0 b:3] map[a:0 b:0] map[a:0 b:0]]
+`)
+
+       }
+}
index ce7f27771c4b287560400364e727400a0c580a91..a0c2f815b191b345c96574368c33df58eb4ead37 100644 (file)
@@ -177,9 +177,9 @@ func (p pairList) Less(i, j int) bool {
 // sorts a pairList and returns a slice of sorted values
 func (p pairList) sort() any {
        if p.SortAsc {
-               sort.Sort(p)
+               sort.Stable(p)
        } else {
-               sort.Sort(sort.Reverse(p))
+               sort.Stable(sort.Reverse(p))
        }
        sorted := reflect.MakeSlice(p.SliceType, len(p.Pairs), len(p.Pairs))
        for i, v := range p.Pairs {