Skip to content

Commit 96d5482

Browse files
authored
fix(product): fix empty slice behavior (#583) (#584)
1 parent 2bdcaca commit 96d5482

File tree

2 files changed

+10
-6
lines changed

2 files changed

+10
-6
lines changed

math.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -89,11 +89,11 @@ func SumBy[T any, R constraints.Float | constraints.Integer | constraints.Comple
8989
// Play: https://go.dev/play/p/2_kjM_smtAH
9090
func Product[T constraints.Float | constraints.Integer | constraints.Complex](collection []T) T {
9191
if collection == nil {
92-
return 0
92+
return 1
9393
}
9494

9595
if len(collection) == 0 {
96-
return 0
96+
return 1
9797
}
9898

9999
var product T = 1
@@ -107,11 +107,11 @@ func Product[T constraints.Float | constraints.Integer | constraints.Complex](co
107107
// Play: https://go.dev/play/p/wadzrWr9Aer
108108
func ProductBy[T any, R constraints.Float | constraints.Integer | constraints.Complex](collection []T, iteratee func(item T) R) R {
109109
if collection == nil {
110-
return 0
110+
return 1
111111
}
112112

113113
if len(collection) == 0 {
114-
return 0
114+
return 1
115115
}
116116

117117
var product R = 1

math_test.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -108,14 +108,16 @@ func TestProduct(t *testing.T) {
108108
result5 := Product([]uint32{2, 3, 4, 5})
109109
result6 := Product([]uint32{})
110110
result7 := Product([]complex128{4_4, 2_2})
111+
result8 := Product[uint32](nil)
111112

112113
is.Equal(result1, float32(160.908))
113114
is.Equal(result2, int32(120))
114115
is.Equal(result3, int32(0))
115116
is.Equal(result4, int32(-126))
116117
is.Equal(result5, uint32(120))
117-
is.Equal(result6, uint32(0))
118+
is.Equal(result6, uint32(1))
118119
is.Equal(result7, complex128(96_8))
120+
is.Equal(result8, uint32(1))
119121
}
120122

121123
func TestProductBy(t *testing.T) {
@@ -128,14 +130,16 @@ func TestProductBy(t *testing.T) {
128130
result5 := ProductBy([]uint32{2, 3, 4, 5}, func(n uint32) uint32 { return n })
129131
result6 := ProductBy([]uint32{}, func(n uint32) uint32 { return n })
130132
result7 := ProductBy([]complex128{4_4, 2_2}, func(n complex128) complex128 { return n })
133+
result8 := ProductBy(nil, func(n uint32) uint32 { return n })
131134

132135
is.Equal(result1, float32(160.908))
133136
is.Equal(result2, int32(120))
134137
is.Equal(result3, int32(0))
135138
is.Equal(result4, int32(-126))
136139
is.Equal(result5, uint32(120))
137-
is.Equal(result6, uint32(0))
140+
is.Equal(result6, uint32(1))
138141
is.Equal(result7, complex128(96_8))
142+
is.Equal(result8, uint32(1))
139143
}
140144

141145
func TestMean(t *testing.T) {

0 commit comments

Comments
 (0)