mirror of
https://github.com/portainer/portainer.git
synced 2026-06-23 06:10:13 +00:00
204 lines
3.4 KiB
Go
204 lines
3.4 KiB
Go
package set
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestAdd(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
s := make(Set[int])
|
|
s.Add(1)
|
|
s.Add(2)
|
|
s.Add(2)
|
|
|
|
require.Equal(t, 2, s.Len())
|
|
require.True(t, s.Contains(1))
|
|
require.True(t, s.Contains(2))
|
|
}
|
|
|
|
func TestContains(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
s := make(Set[string])
|
|
s.Add("hello")
|
|
|
|
require.True(t, s.Contains("hello"))
|
|
require.False(t, s.Contains("world"))
|
|
}
|
|
|
|
func TestRemove(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
s := make(Set[int])
|
|
s.Add(1)
|
|
s.Add(2)
|
|
s.Remove(1)
|
|
s.Remove(99)
|
|
|
|
require.Equal(t, 1, s.Len())
|
|
require.False(t, s.Contains(1))
|
|
require.True(t, s.Contains(2))
|
|
}
|
|
|
|
func TestIsEmpty(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
s := make(Set[int])
|
|
require.True(t, s.IsEmpty())
|
|
|
|
s.Add(1)
|
|
require.False(t, s.IsEmpty())
|
|
|
|
s.Remove(1)
|
|
require.True(t, s.IsEmpty())
|
|
}
|
|
|
|
func TestKeys(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
s := ToSet([]int{1, 2, 3})
|
|
keys := s.Keys()
|
|
|
|
require.Len(t, keys, 3)
|
|
require.ElementsMatch(t, []int{1, 2, 3}, keys)
|
|
}
|
|
|
|
func TestCopy(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
original := ToSet([]string{"a", "b", "c"})
|
|
copied := original.Copy()
|
|
|
|
require.Equal(t, original.Len(), copied.Len())
|
|
require.True(t, copied.Contains("a"))
|
|
require.True(t, copied.Contains("b"))
|
|
require.True(t, copied.Contains("c"))
|
|
|
|
copied.Add("d")
|
|
require.False(t, original.Contains("d"))
|
|
|
|
copied.Remove("a")
|
|
require.True(t, original.Contains("a"))
|
|
}
|
|
|
|
func TestDifference(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
a := ToSet([]int{1, 2, 3, 4})
|
|
b := ToSet([]int{3, 4, 5})
|
|
|
|
diff := a.Difference(b)
|
|
|
|
require.Equal(t, 2, diff.Len())
|
|
require.True(t, diff.Contains(1))
|
|
require.True(t, diff.Contains(2))
|
|
require.False(t, diff.Contains(3))
|
|
require.False(t, diff.Contains(4))
|
|
}
|
|
|
|
func TestDifference_EmptySecond(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
a := ToSet([]int{1, 2, 3})
|
|
b := make(Set[int])
|
|
|
|
diff := a.Difference(b)
|
|
|
|
require.Equal(t, 3, diff.Len())
|
|
}
|
|
|
|
func TestDifference_EmptyFirst(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
a := make(Set[int])
|
|
b := ToSet([]int{1, 2, 3})
|
|
|
|
diff := a.Difference(b)
|
|
|
|
require.True(t, diff.IsEmpty())
|
|
}
|
|
|
|
func TestUnion(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
a := ToSet([]int{1, 2})
|
|
b := ToSet([]int{2, 3})
|
|
c := ToSet([]int{3, 4})
|
|
|
|
u := Union(a, b, c)
|
|
|
|
require.Equal(t, 4, u.Len())
|
|
require.True(t, u.Contains(1))
|
|
require.True(t, u.Contains(2))
|
|
require.True(t, u.Contains(3))
|
|
require.True(t, u.Contains(4))
|
|
}
|
|
|
|
func TestUnion_NoSets(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
u := Union[int]()
|
|
require.True(t, u.IsEmpty())
|
|
}
|
|
|
|
func TestIntersection(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
a := ToSet([]int{1, 2, 3})
|
|
b := ToSet([]int{2, 3, 4})
|
|
c := ToSet([]int{3, 4, 5})
|
|
|
|
inter := Intersection(a, b, c)
|
|
|
|
require.Equal(t, 1, inter.Len())
|
|
require.True(t, inter.Contains(3))
|
|
}
|
|
|
|
func TestIntersection_NoOverlap(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
a := ToSet([]int{1, 2})
|
|
b := ToSet([]int{3, 4})
|
|
|
|
inter := Intersection(a, b)
|
|
|
|
require.True(t, inter.IsEmpty())
|
|
}
|
|
|
|
func TestIntersection_NoSets(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
inter := Intersection[int]()
|
|
require.True(t, inter.IsEmpty())
|
|
}
|
|
|
|
func TestIntersection_SingleSet(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
a := ToSet([]int{1, 2, 3})
|
|
inter := Intersection(a)
|
|
|
|
require.Equal(t, 3, inter.Len())
|
|
}
|
|
|
|
func TestToSet(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
keys := []string{"x", "y", "x"}
|
|
s := ToSet(keys)
|
|
|
|
require.Equal(t, 2, s.Len())
|
|
require.True(t, s.Contains("x"))
|
|
require.True(t, s.Contains("y"))
|
|
}
|
|
|
|
func TestToSet_Empty(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
s := ToSet([]int{})
|
|
require.True(t, s.IsEmpty())
|
|
}
|