You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
74 lines
1.6 KiB
74 lines
1.6 KiB
package removeelement_test
|
|
|
|
import (
|
|
"sort"
|
|
"testing"
|
|
|
|
"git.jxs.me/leetgo/removeelement"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestEmpty(t *testing.T) {
|
|
size := removeelement.Remove([]int{}, 0)
|
|
require.Equal(t, 0, size)
|
|
}
|
|
|
|
func TestSingle(t *testing.T) {
|
|
nums := []int{1, 2, 3}
|
|
expected := []int{1, 3}
|
|
size := removeelement.Remove(nums, 2)
|
|
require.Equal(t, 2, size)
|
|
require.Equal(t, expected, nums[:size])
|
|
}
|
|
|
|
func TestExample1(t *testing.T) {
|
|
nums := []int{3, 2, 2, 3}
|
|
expected := []int{2, 2}
|
|
size := removeelement.Remove(nums, 3)
|
|
require.Equal(t, 2, size)
|
|
require.Equal(t, expected, nums[:size])
|
|
}
|
|
|
|
func TestExample2(t *testing.T) {
|
|
nums := []int{0, 1, 2, 2, 3, 0, 4, 2}
|
|
expected := []int{0, 0, 1, 3, 4}
|
|
size := removeelement.Remove(nums, 2)
|
|
|
|
require.Equal(t, 5, size)
|
|
|
|
actual := nums[:size]
|
|
sort.Ints(actual)
|
|
require.Equal(t, expected, actual)
|
|
}
|
|
|
|
func TestExample3(t *testing.T) {
|
|
nums := []int{0, 1, 2, 2, 3, 0, 4, 2}
|
|
expected := []int{0, 0, 1, 3, 4}
|
|
size := removeelement.Remove(nums, 2)
|
|
|
|
require.Equal(t, 5, size)
|
|
|
|
actual := nums[:size]
|
|
sort.Ints(actual)
|
|
require.Equal(t, expected, actual)
|
|
}
|
|
|
|
func FuzzRemove(f *testing.F) {
|
|
f.Add([]byte{}, byte(0))
|
|
f.Add([]byte{3, 2, 2, 3}, byte(3))
|
|
f.Add([]byte{0, 1, 2, 2, 3, 0, 4, 2}, byte(2))
|
|
f.Add([]byte{0, 1, 2, 2, 3, 0, 4, 2}, byte(2))
|
|
|
|
f.Fuzz(func(t *testing.T, bnums []byte, bval byte) {
|
|
val := int(bval)
|
|
nums := make([]int, len(bnums))
|
|
for i, b := range bnums {
|
|
nums[i] = int(b)
|
|
}
|
|
|
|
size := removeelement.Remove(nums, val)
|
|
actual := nums[:size]
|
|
require.NotContains(t, actual, val)
|
|
})
|
|
}
|