aboutsummaryrefslogtreecommitdiff
path: root/pkg/u
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/u')
-rw-r--r--pkg/u/list.go8
-rw-r--r--pkg/u/list_test.go30
2 files changed, 38 insertions, 0 deletions
diff --git a/pkg/u/list.go b/pkg/u/list.go
index cf71909..7271ef3 100644
--- a/pkg/u/list.go
+++ b/pkg/u/list.go
@@ -16,6 +16,14 @@ func FirstOrZero[T any](v []T) T {
return v[0]
}
+func Map[T any, V any](ts []T, fun func(T) V) []V {
+ rs := make([]V, len(ts))
+ for i := range ts {
+ rs[i] = fun(ts[i])
+ }
+ return rs
+}
+
func ChunkBy[T any](items []T, chunkSize int) [][]T {
var chunks = make([][]T, 0, (len(items)/chunkSize)+1)
for chunkSize < len(items) {
diff --git a/pkg/u/list_test.go b/pkg/u/list_test.go
index 805a209..3a856b9 100644
--- a/pkg/u/list_test.go
+++ b/pkg/u/list_test.go
@@ -3,6 +3,7 @@
package u
import (
+ "strconv"
"testing"
"github.com/google/go-cmp/cmp"
@@ -129,3 +130,32 @@ func TestFirstOrZero(t *testing.T) {
})
}
}
+
+func TestMap(t *testing.T) {
+ testCases := []struct {
+ name string
+ in []int
+ out []string
+ }{
+ {
+ name: "empty",
+ in: []int{},
+ out: []string{},
+ },
+ {
+ name: "not empty",
+ in: []int{1, 2, 3},
+ out: []string{"1", "2", "3"},
+ },
+ }
+
+ for _, tc := range testCases {
+ t.Run(tc.name, func(t *testing.T) {
+ out := Map(tc.in, func(v int) string { return strconv.Itoa(v) })
+
+ if diff := cmp.Diff(tc.out, out); diff != "" {
+ t.Errorf("Map error:\n%s", diff)
+ }
+ })
+ }
+}