Commit b1595f0

mo khan <mo@mokhan.ca>
2025-04-21 19:03:55
fix: return zero value instead of default for pointer types in search
1 parent acec892
Changed files (2)
pkg/x/iterate.go
@@ -10,7 +10,7 @@ func Find[T any](items []T, predicate Predicate[T]) T {
 			return item
 		}
 	}
-	return Default[T]()
+	return Zero[T]()
 }
 
 func FindAll[T any](items []T, predicate Predicate[T]) []T {
@@ -24,7 +24,7 @@ func FindAll[T any](items []T, predicate Predicate[T]) []T {
 }
 
 func Contains[T comparable](items []T, predicate Predicate[T]) bool {
-	return Find[T](items, predicate) != Default[T]()
+	return Find[T](items, predicate) != Zero[T]()
 }
 
 func Map[TInput any, TOutput any](items []TInput, mapFrom Mapper[TInput, TOutput]) []TOutput {
pkg/x/iterate_test.go
@@ -1,6 +1,7 @@
 package x
 
 import (
+	"net/http"
 	"strconv"
 	"testing"
 
@@ -28,6 +29,16 @@ func TestFind(t *testing.T) {
 
 		assert.Equal(t, 0, result)
 	})
+
+	t.Run("returns nil", func(t *testing.T) {
+		items := []*http.Client{http.DefaultClient}
+
+		result := Find(items, func(item *http.Client) bool {
+			return false
+		})
+
+		assert.Nil(t, result)
+	})
 }
 
 func TestFindAll(t *testing.T) {
@@ -72,6 +83,16 @@ func TestContains(t *testing.T) {
 
 		assert.False(t, result)
 	})
+
+	t.Run("returns false on nil", func(t *testing.T) {
+		items := []*http.Client{http.DefaultClient}
+
+		result := Contains(items, func(item *http.Client) bool {
+			return false
+		})
+
+		assert.False(t, result)
+	})
 }
 
 func TestMap(t *testing.T) {