package sets import ( "testing" "github.com/stretchr/testify/require" ) func getSetForElements(t *testing.T, elements ...int) *Set[int] { t.Helper() target := map[int]struct{}{} for _, el := range elements { target[el] = struct{}{} } return &Set[int]{ store: target, } } func TestUnion(t *testing.T) { base := getSetForElements(t, 0, 1, 2, 3, 4, 5) other := getSetForElements(t, 3, 4, 5, 6, 7, 8) expected := []int{0, 1, 2, 3, 4, 5, 6, 7, 8} require.ElementsMatch(t, expected, Union(base, other).Slice()) } func TestIntersection(t *testing.T) { base := getSetForElements(t, 0, 1, 2, 3, 4, 5) other := getSetForElements(t, 3, 4, 5, 6, 7, 8) expected := []int{3, 4, 5} require.ElementsMatch(t, expected, Intersection(base, other).Slice()) } func TestDiff(t *testing.T) { base := getSetForElements(t, 0, 1, 2, 3, 4, 5) other := getSetForElements(t, 3, 4, 5, 6, 7, 8) expected := []int{0, 1, 2} require.ElementsMatch(t, expected, Diff(base, other).Slice()) } func TestSymmetricDiff(t *testing.T) { base := getSetForElements(t, 0, 1, 2, 3, 4, 5) other := getSetForElements(t, 3, 4, 5, 6, 7, 8) expected := []int{0, 1, 2, 6, 7, 8} require.ElementsMatch(t, expected, SymmetricDiff(base, other).Slice()) } func TestEqual(t *testing.T) { base := getSetForElements(t, 0, 1, 2, 3, 4, 5) otherDifferent := getSetForElements(t, 3, 4, 5, 6, 7, 8) otherEqual := getSetForElements(t, 0, 1, 2, 3, 4, 5) require.False(t, Equal(base, otherDifferent)) require.True(t, Equal(base, otherEqual)) }