Skip to content
Permalink
Browse files

tpl/collections: Add collections.Reverse

Fixes #6499
  • Loading branch information
bep committed Nov 11, 2019
1 parent 95ef93b commit 90d0cdf236b54000bfe444ba3a00236faaa28790
Showing with 42 additions and 0 deletions.
  1. +23 −0 tpl/collections/collections.go
  2. +19 −0 tpl/collections/collections_test.go
@@ -417,6 +417,29 @@ func (ns *Namespace) Querify(params ...interface{}) (string, error) {
return qs.Encode(), nil
}

// Reverse creates a copy of slice and reverses it.
func (ns *Namespace) Reverse(slice interface{}) (interface{}, error) {
if slice == nil {
return nil, nil
}
v := reflect.ValueOf(slice)

switch v.Kind() {
case reflect.Slice:
default:
return nil, errors.New("argument must be a slice")
}

sliceCopy := reflect.MakeSlice(v.Type(), v.Len(), v.Len())

for i := v.Len() - 1; i >= 0; i-- {
element := sliceCopy.Index(i)
element.Set(v.Index(v.Len() - 1 - i))
}

return sliceCopy.Interface(), nil
}

// Seq creates a sequence of integers. It's named and used as GNU's seq.
//
// Examples:
@@ -211,6 +211,25 @@ func TestDictionary(t *testing.T) {
}
}

func TestReverse(t *testing.T) {
t.Parallel()
c := qt.New(t)
ns := New(&deps.Deps{})

s := []string{"a", "b", "c"}
reversed, err := ns.Reverse(s)
c.Assert(err, qt.IsNil)
c.Assert(reversed, qt.DeepEquals, []string{"c", "b", "a"}, qt.Commentf(fmt.Sprint(reversed)))
c.Assert(s, qt.DeepEquals, []string{"a", "b", "c"})

reversed, err = ns.Reverse(nil)
c.Assert(err, qt.IsNil)
c.Assert(reversed, qt.IsNil)
_, err = ns.Reverse(43)
c.Assert(err, qt.Not(qt.IsNil))

}

func TestEchoParam(t *testing.T) {
t.Parallel()
c := qt.New(t)

0 comments on commit 90d0cdf

Please sign in to comment.
You can’t perform that action at this time.