mirror of
https://github.com/samber/lo.git
synced 2026-04-22 23:47:11 +08:00
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:
+4
-3
@@ -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)]
|
||||
}
|
||||
|
||||
|
||||
@@ -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")
|
||||
}
|
||||
|
||||
@@ -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")
|
||||
}
|
||||
Reference in New Issue
Block a user