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) }) }