1 package set
2
3 import (
4 "testing"
5
6 "github.com/stretchr/testify/assert"
7 )
8
9 func TestFromSlice(t *testing.T) {
10 slice := []string{"a", "b", "c"}
11 set := FromSlice(slice)
12
13 for item := range set {
14 assert.Contains(t, slice, item)
15 }
16 }
17
18 func TestFromMap(t *testing.T) {
19 stringMap := map[string]int{"a": 0, "b": 1, "c": 2}
20 set := FromMap(stringMap)
21
22 for item := range set {
23 assert.Contains(t, stringMap, item)
24 }
25 }
26
27 func TestToSlice(t *testing.T) {
28 set := Set[string]{"a": member, "b": member, "c": member}
29 expectedSliceElements := []string{"a", "b", "c"}
30
31 slice := set.ToSlice()
32 assert.ElementsMatch(t, expectedSliceElements, slice)
33 }
34
35 func TestAddToSet(t *testing.T) {
36 stringSet := Set[string]{}
37 stringSet.Add("item a")
38 stringSet.Add("item b")
39
40 _, ok := stringSet["item a"]
41 assert.True(t, ok)
42 _, ok = stringSet["item b"]
43 assert.True(t, ok)
44
45 intSet := Set[int]{}
46 intSet.Add(1)
47 intSet.Add(2)
48
49 _, ok = intSet[1]
50 assert.True(t, ok)
51 _, ok = intSet[2]
52 assert.True(t, ok)
53 }
54
55 func TestRemoveFromSet(t *testing.T) {
56 stringSet := Set[string]{"item a": member, "item b": member}
57 stringSet.Remove("item a")
58 stringSet.Remove("item b")
59
60 _, ok := stringSet["item a"]
61 assert.False(t, ok)
62 _, ok = stringSet["item b"]
63 assert.False(t, ok)
64
65 intSet := Set[int]{1: member, 2: member}
66 intSet.Remove(1)
67 intSet.Remove(2)
68
69 _, ok = intSet[1]
70 assert.False(t, ok)
71 _, ok = intSet[2]
72 assert.False(t, ok)
73 }
74
75 func TestSetHasMember(t *testing.T) {
76 stringSet := Set[string]{"item a": member, "item b": member}
77 assert.True(t, stringSet.HasMember("item a"))
78 assert.False(t, stringSet.HasMember("item c"))
79
80 intSet := Set[int]{1: member, 2: member}
81 assert.True(t, intSet.HasMember(1))
82 assert.False(t, intSet.HasMember(3))
83 }
84
85 func TestSetUnion(t *testing.T) {
86 left := Set[string]{"a": member, "b": member, "c": member}
87 right := Set[string]{"c": member, "d": member, "e": member}
88 expectedUnion := Set[string]{"a": member, "b": member, "c": member, "d": member, "e": member}
89
90 union := left.Union(right)
91 assert.Equal(t, expectedUnion, union)
92 }
93
94 func TestSetIntersection(t *testing.T) {
95 left := Set[string]{"a": member, "b": member, "c": member, "d": member}
96 right := Set[string]{"c": member, "d": member, "e": member}
97 expectedIntersection := Set[string]{"c": member, "d": member}
98
99 intersection := left.Intersection(right)
100 assert.Equal(t, expectedIntersection, intersection)
101 }
102
103 func TestSetDifference(t *testing.T) {
104 left := Set[string]{"a": member, "b": member, "c": member}
105 right := Set[string]{"c": member, "d": member, "e": member}
106 expectedDifference := Set[string]{"a": member, "b": member}
107
108 difference := left.Difference(right)
109 assert.Equal(t, expectedDifference, difference)
110 }
111
112 func TestSetSymmetricDifference(t *testing.T) {
113 left := Set[string]{"a": member, "b": member, "c": member}
114 right := Set[string]{"c": member, "d": member, "e": member}
115 expectedSymmetricDifference := Set[string]{"a": member, "b": member, "d": member, "e": member}
116
117 symmetricDifference := left.SymmetricDifference(right)
118 assert.Equal(t, expectedSymmetricDifference, symmetricDifference)
119 }
120
View as plain text