From 6c6cf9ac683a3859228f132ac81f91dc8005b946 Mon Sep 17 00:00:00 2001 From: Ruidy Date: Wed, 29 Dec 2021 13:03:13 -0400 Subject: [PATCH] feat: find --- find.go | 12 ++++++++++++ find_test.go | 26 ++++++++++++++++++++++++++ some_test.go | 1 - 3 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 find.go create mode 100644 find_test.go diff --git a/find.go b/find.go new file mode 100644 index 0000000..0272ccd --- /dev/null +++ b/find.go @@ -0,0 +1,12 @@ +package underscore + +import "errors" + +func Find[T any](values []T, predicate func(T) bool) (res T, err error) { + for _, v := range values { + if predicate(v) { + return v, nil + } + } + return res, errors.New("value not found") +} diff --git a/find_test.go b/find_test.go new file mode 100644 index 0000000..7a07a9e --- /dev/null +++ b/find_test.go @@ -0,0 +1,26 @@ +package underscore_test + +import ( + "testing" + + u "github.com/rjNemo/underscore" + "github.com/stretchr/testify/assert" +) + +func TestFind(t *testing.T) { + want := 5 + nums := []int{2, 4, 5, 6, 8, 0} + isOdd := func(n int) bool { return n%2 != 0 } + + got, err := u.Find(nums, isOdd) + assert.Equal(t, want, got) + assert.NoError(t, err) +} + +func TestNotFound(t *testing.T) { + nums := []int{2, 4, 6, 8, 0} + isOdd := func(n int) bool { return n%2 != 0 } + + _, err := u.Find(nums, isOdd) + assert.Error(t, err) +} diff --git a/some_test.go b/some_test.go index 8082843..1428ef6 100644 --- a/some_test.go +++ b/some_test.go @@ -13,5 +13,4 @@ func TestSome(t *testing.T) { isEven := func(n int) bool { return n%2 == 0 } assert.True(t, u.Some(nums, isEven)) - }