62 lines
1.5 KiB
Go
62 lines
1.5 KiB
Go
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))
|
|
}
|