diff --git a/math.go b/math.go index 1ce1ebe8..92aae9c3 100644 --- a/math.go +++ b/math.go @@ -67,3 +67,12 @@ func SumBy[T any, R constraints.Float | constraints.Integer](collection []T, ite } return sum } + +// Sums the values in a slice. +func Sum[T constraints.Float | constraints.Integer](collection []T) T { + var sum T = 0 + for _, val := range collection { + sum += val + } + return sum +} diff --git a/math_test.go b/math_test.go index f30e041e..4722e35b 100644 --- a/math_test.go +++ b/math_test.go @@ -71,3 +71,17 @@ func TestSumBy(t *testing.T) { is.Equal(result3, uint32(14)) is.Equal(result4, uint32(0)) } + +func TestSum(t *testing.T) { + is := assert.New(t) + + result1 := Sum([]float32{2.3, 3.3, 4, 5.3}) + result2 := Sum([]int32{2, 3, 4, 5}) + result3 := Sum([]uint32{2, 3, 4, 5}) + result4 := Sum([]uint32{}) + + is.Equal(result1, float32(14.900001)) + is.Equal(result2, int32(14)) + is.Equal(result3, uint32(14)) + is.Equal(result4, uint32(0)) +}