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.go35
2 files changed, 43 insertions, 0 deletions
diff --git a/pkg/u/list.go b/pkg/u/list.go
index 34eafd1..cf71909 100644
--- a/pkg/u/list.go
+++ b/pkg/u/list.go
@@ -8,6 +8,14 @@ func First[T any](v []T) (T, bool) {
return v[0], true
}
+func FirstOrZero[T any](v []T) T {
+ if len(v) == 0 {
+ var zero T
+ return zero
+ }
+ return v[0]
+}
+
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 a6d84c7..805a209 100644
--- a/pkg/u/list_test.go
+++ b/pkg/u/list_test.go
@@ -94,3 +94,38 @@ func TestSubList(t *testing.T) {
})
}
}
+
+func TestFirstOrZero(t *testing.T) {
+ testCases := []struct {
+ name string
+ slice []int
+ first int
+ }{
+ {
+ name: "multiple items slice",
+ slice: []int{1, 2, 3},
+ first: 1,
+ },
+ {
+ name: "single item slice",
+ slice: []int{1},
+ first: 1,
+ },
+ {
+ name: "empty slice",
+ slice: []int{},
+ first: 0,
+ },
+ }
+ for _, tc := range testCases {
+ t.Run(tc.name, func(t *testing.T) {
+
+ first := FirstOrZero(tc.slice)
+
+ if first != tc.first {
+ t.Errorf("Error first, want %d got %d", tc.first, first)
+ }
+
+ })
+ }
+}