209 lines
4.2 KiB
Go
209 lines
4.2 KiB
Go
|
|
package set
|
||
|
|
|
||
|
|
import "testing"
|
||
|
|
|
||
|
|
func TestIntersection(t *testing.T) {
|
||
|
|
s1 := New[int](1, 2, 3, 4)
|
||
|
|
s2 := New[int](3, 4, 5, 6)
|
||
|
|
want := New[int](3, 4)
|
||
|
|
got := s1.Intersection(s2)
|
||
|
|
if !got.Equal(want) {
|
||
|
|
t.Errorf("Intersection() = %v; want %v", got, want)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestIntersection_Empty(t *testing.T) {
|
||
|
|
s1 := New[int](1, 2)
|
||
|
|
s2 := New[int](3, 4)
|
||
|
|
want := New[int]()
|
||
|
|
got := s1.Intersection(s2)
|
||
|
|
if !got.Equal(want) {
|
||
|
|
t.Errorf("Intersection() = %v; want %v", got, want)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestIntersection_Identical(t *testing.T) {
|
||
|
|
s1 := New[int](1, 2, 3)
|
||
|
|
s2 := New[int](1, 2, 3)
|
||
|
|
want := New[int](1, 2, 3)
|
||
|
|
got := s1.Intersection(s2)
|
||
|
|
if !got.Equal(want) {
|
||
|
|
t.Errorf("Intersection() = %v; want %v", got, want)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestIntersection_Subset(t *testing.T) {
|
||
|
|
s1 := New[int](1, 2, 3, 4, 5)
|
||
|
|
s2 := New[int](2, 3)
|
||
|
|
want := New[int](2, 3)
|
||
|
|
got := s1.Intersection(s2)
|
||
|
|
if !got.Equal(want) {
|
||
|
|
t.Errorf("Intersection() = %v; want %v", got, want)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestIntersection_EmptySet(t *testing.T) {
|
||
|
|
s1 := New[int](1, 2, 3)
|
||
|
|
s2 := New[int]()
|
||
|
|
want := New[int]()
|
||
|
|
got := s1.Intersection(s2)
|
||
|
|
if !got.Equal(want) {
|
||
|
|
t.Errorf("Intersection() = %v; want %v", got, want)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestIntersection_BothEmpty(t *testing.T) {
|
||
|
|
s1 := New[int]()
|
||
|
|
s2 := New[int]()
|
||
|
|
want := New[int]()
|
||
|
|
got := s1.Intersection(s2)
|
||
|
|
if !got.Equal(want) {
|
||
|
|
t.Errorf("Intersection() = %v; want %v", got, want)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestDifference(t *testing.T) {
|
||
|
|
s1 := New[int](1, 2, 3, 4)
|
||
|
|
s2 := New[int](3, 4, 5, 6)
|
||
|
|
want := New[int](1, 2)
|
||
|
|
got := s1.Difference(s2)
|
||
|
|
if !got.Equal(want) {
|
||
|
|
t.Errorf("Difference() = %v; want %v", got, want)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestDifference_Empty(t *testing.T) {
|
||
|
|
s1 := New[int](1, 2)
|
||
|
|
s2 := New[int](1, 2)
|
||
|
|
want := New[int]()
|
||
|
|
got := s1.Difference(s2)
|
||
|
|
if !got.Equal(want) {
|
||
|
|
t.Errorf("Difference() = %v; want %v", got, want)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestDifference_Subset(t *testing.T) {
|
||
|
|
s1 := New[int](1, 2, 3, 4, 5)
|
||
|
|
s2 := New[int](2, 3)
|
||
|
|
want := New[int](1, 4, 5)
|
||
|
|
got := s1.Difference(s2)
|
||
|
|
if !got.Equal(want) {
|
||
|
|
t.Errorf("Difference() = %v; want %v", got, want)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestDifference_EmptySet(t *testing.T) {
|
||
|
|
s1 := New[int](1, 2, 3)
|
||
|
|
s2 := New[int]()
|
||
|
|
want := New[int](1, 2, 3)
|
||
|
|
got := s1.Difference(s2)
|
||
|
|
if !got.Equal(want) {
|
||
|
|
t.Errorf("Difference() = %v; want %v", got, want)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestDifference_BothEmpty(t *testing.T) {
|
||
|
|
s1 := New[int]()
|
||
|
|
s2 := New[int]()
|
||
|
|
want := New[int]()
|
||
|
|
got := s1.Difference(s2)
|
||
|
|
if !got.Equal(want) {
|
||
|
|
t.Errorf("Difference() = %v; want %v", got, want)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestUnion(t *testing.T) {
|
||
|
|
s1 := New[int](1, 2, 3)
|
||
|
|
s2 := New[int](3, 4, 5)
|
||
|
|
want := New[int](1, 2, 3, 4, 5)
|
||
|
|
got := s1.Union(s2)
|
||
|
|
if !got.Equal(want) {
|
||
|
|
t.Errorf("Union() = %v; want %v", got, want)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestUnion_EmptySet(t *testing.T) {
|
||
|
|
s1 := New[int](1, 2, 3)
|
||
|
|
s2 := New[int]()
|
||
|
|
want := New[int](1, 2, 3)
|
||
|
|
got := s1.Union(s2)
|
||
|
|
if !got.Equal(want) {
|
||
|
|
t.Errorf("Union() = %v; want %v", got, want)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestUnion_BothEmpty(t *testing.T) {
|
||
|
|
s1 := New[int]()
|
||
|
|
s2 := New[int]()
|
||
|
|
want := New[int]()
|
||
|
|
got := s1.Union(s2)
|
||
|
|
if !got.Equal(want) {
|
||
|
|
t.Errorf("Union() = %v; want %v", got, want)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestAdd(t *testing.T) {
|
||
|
|
want := New[int](1, 2, 3)
|
||
|
|
got := New[int]()
|
||
|
|
got.Add(1)
|
||
|
|
got.Add(2)
|
||
|
|
got.Add(3)
|
||
|
|
if !got.Equal(want) {
|
||
|
|
t.Errorf("Add() = %v; want %v", got, want)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestRemov(t *testing.T) {
|
||
|
|
want := New[int](1, 3)
|
||
|
|
got := New[int](1, 2, 3)
|
||
|
|
got.Remove(2)
|
||
|
|
if !got.Equal(want) {
|
||
|
|
t.Errorf("Remove() = %v; want %v", got, want)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
func TestContains(t *testing.T) {
|
||
|
|
s := New[int](1, 2, 3)
|
||
|
|
if !s.Contains(2) {
|
||
|
|
t.Errorf("Contains(2) = false; want true")
|
||
|
|
}
|
||
|
|
if s.Contains(4) {
|
||
|
|
t.Errorf("Contains(4) = true; want false")
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestSize(t *testing.T) {
|
||
|
|
s := New[int](1, 2, 3, 4)
|
||
|
|
want := 4
|
||
|
|
got := s.Size()
|
||
|
|
if got != want {
|
||
|
|
t.Errorf("Size() = %d; want %d", got, want)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestToSlice(t *testing.T) {
|
||
|
|
s := New[int](1, 2, 3)
|
||
|
|
want := []int{1, 2, 3}
|
||
|
|
got := s.ToSlice()
|
||
|
|
mapping := make(map[int]bool)
|
||
|
|
for _, v := range got {
|
||
|
|
mapping[v] = true
|
||
|
|
}
|
||
|
|
for _, v := range want {
|
||
|
|
if !mapping[v] {
|
||
|
|
t.Errorf("ToSlice() missing element %d; got %v", v, got)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestToSortedSlice(t *testing.T) {
|
||
|
|
s := New[int](3, 1, 2)
|
||
|
|
want := []int{1, 2, 3}
|
||
|
|
got := s.ToSortedSlice()
|
||
|
|
for i := range want {
|
||
|
|
if got[i] != want[i] {
|
||
|
|
t.Errorf("ToSortedSlice() = %v; want %v", got, want)
|
||
|
|
break
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|