package pilorama

import (
	"testing"

	"github.com/stretchr/testify/require"
)

func Test_removeDuplicatesInPlace(t *testing.T) {
	testCases := []struct {
		before []int
		after  []int
	}{
		{
			before: []int{},
			after:  []int{},
		},
		{
			before: []int{1},
			after:  []int{1},
		},
		{
			before: []int{1, 2},
			after:  []int{1, 2},
		},
		{
			before: []int{1, 2, 3},
			after:  []int{1, 2, 3},
		},
		{
			before: []int{1, 1, 2},
			after:  []int{1, 2},
		},
		{
			before: []int{1, 2, 2},
			after:  []int{1, 2},
		},
		{
			before: []int{1, 2, 2, 3},
			after:  []int{1, 2, 3},
		},
		{
			before: []int{1, 1, 1},
			after:  []int{1},
		},
		{
			before: []int{1, 1, 2, 2},
			after:  []int{1, 2},
		},
		{
			before: []int{1, 1, 1, 2, 3, 3, 3},
			after:  []int{1, 2, 3},
		},
	}

	for _, tc := range testCases {
		ops := make([]*Move, len(tc.before))
		for i := range ops {
			ops[i] = &Move{Meta: Meta{Time: Timestamp(tc.before[i])}}
		}

		expected := make([]*Move, len(tc.after))
		for i := range expected {
			expected[i] = &Move{Meta: Meta{Time: Timestamp(tc.after[i])}}
		}

		actual := removeDuplicatesInPlace(ops)
		require.Equal(t, expected, actual, "%d", tc.before)
	}
}