diff --git a/reduce.go b/reduce.go new file mode 100644 index 0000000..bb8691e --- /dev/null +++ b/reduce.go @@ -0,0 +1,8 @@ +package underscore + +func Reduce[T, P any](values []T, predicate func(T, P) P, acc P) P { + for _, v := range values { + acc = predicate(v, acc) + } + return acc +} diff --git a/reduce_test.go b/reduce_test.go new file mode 100644 index 0000000..c45b8f7 --- /dev/null +++ b/reduce_test.go @@ -0,0 +1,19 @@ +package underscore_test + +import ( + "testing" + + "github.com/stretchr/testify/assert" + + u "github.com/rjNemo/underscore" +) + +func TestReduce(t *testing.T) { + nums := []int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9} + reducer := func(n, acc int) int { + return n + acc + } + want := 45 + + assert.Equal(t, want, u.Reduce(nums, reducer, 0)) +}