Files
pinniped/internal/sliceutil/sliceutil_test.go
2024-05-22 21:21:45 -05:00

75 lines
1.6 KiB
Go

// Copyright 2024 the Pinniped contributors. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0
package sliceutil
import (
"strings"
"testing"
"github.com/stretchr/testify/require"
)
func TestMap(t *testing.T) {
type testCase[I any, O any] struct {
name string
in []I
transformFunc func(I) O
want []O
}
stringStringTests := []testCase[string, string]{
{
name: "downcase func",
in: []string{"Aa", "bB", "CC"},
transformFunc: strings.ToLower,
want: []string{"aa", "bb", "cc"},
},
{
name: "upcase func",
in: []string{"Aa", "bB", "CC"},
transformFunc: strings.ToUpper,
want: []string{"AA", "BB", "CC"},
},
{
name: "when in is nil, then out is an empty slice",
in: nil,
transformFunc: strings.ToUpper,
want: []string{},
},
}
for _, tt := range stringStringTests {
t.Run(tt.name, func(t *testing.T) {
t.Parallel()
actual := Map(tt.in, tt.transformFunc)
require.Equal(t, tt.want, actual)
})
}
stringIntTests := []testCase[string, int]{
{
name: "len func",
in: []string{"Aa", "bBb", "CCcC"},
transformFunc: func(s string) int {
return len(s)
},
want: []int{2, 3, 4},
},
{
name: "index func",
in: []string{"Aab", "bB", "CC"},
transformFunc: func(s string) int {
return strings.Index(s, "b")
},
want: []int{2, 0, -1},
},
}
for _, tt := range stringIntTests {
t.Run(tt.name, func(t *testing.T) {
t.Parallel()
actual := Map(tt.in, tt.transformFunc)
require.Equal(t, tt.want, actual)
})
}
}