fix(it.Mode): align behavior with lo.Mode and ensure consistent slice… (#711)

* fix(it.Mode): align behavior with lo.Mode and ensure consistent slice capacity

* replicating test section in main package
This commit is contained in:
Anurag Ojha
2025-10-12 19:28:37 +05:30
committed by GitHub
parent 1287859ee0
commit 02d371c58e
3 changed files with 28 additions and 3 deletions
+4 -3
View File
@@ -132,7 +132,7 @@ func MeanBy[T any, R constraints.Float | constraints.Integer](collection iter.Se
// Long heterogeneous input sequences can cause excessive memory usage.
// Play: https://go.dev/play/p/c_cmMMA5EhH
func Mode[T constraints.Integer | constraints.Float](collection iter.Seq[T]) []T {
var mode []T
mode := make([]T, 0)
maxFreq := 0
frequency := make(map[T]int)
@@ -142,11 +142,12 @@ func Mode[T constraints.Integer | constraints.Float](collection iter.Seq[T]) []T
if count > maxFreq {
maxFreq = count
mode = append(mode[:0], item)
mode = append(mode[:0], item)
} else if count == maxFreq {
mode = append(mode, item)
}
}
return mode
return mode[:len(mode):len(mode)]
}
+12
View File
@@ -177,3 +177,15 @@ func TestMode(t *testing.T) {
is.Empty(result4)
is.Equal([]int{1, 2, 3, 4, 5, 6, 7, 8, 9}, result5)
}
func TestModeCapacityConsistency(t *testing.T) {
t.Parallel()
is := assert.New(t)
arr := []int{1, 1, 2, 2, 3, 3, 3}
result := Mode(values(arr...))
is.Equal([]int{3}, result, "Mode should return correct mode value")
is.Equal(len(result), cap(result), "Mode slice capacity should match its length")
}
+12
View File
@@ -191,3 +191,15 @@ func TestMode(t *testing.T) {
is.Empty(result4)
is.Equal([]int{1, 2, 3, 4, 5, 6, 7, 8, 9}, result5)
}
func TestModeCapacityConsistency(t *testing.T) {
t.Parallel()
is := assert.New(t)
arr := []int{1, 1, 2, 2, 3, 3, 3}
result := Mode(arr)
is.Equal([]int{3}, result, "Mode should return correct mode value")
is.Equal(len(result), cap(result), "Mode slice capacity should match its length")
}