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