diff --git a/internal/set/set.go b/internal/set/set.go index 5c7bcabef8..3e777fe124 100644 --- a/internal/set/set.go +++ b/internal/set/set.go @@ -24,11 +24,11 @@ func NewWithValues[E comparable](values ...E) *Set[E] { return s } -func (s Set[E]) Add(v E) { +func (s *Set[E]) Add(v E) { s.m[v] = struct{}{} // Possibly writing the same struct{}{} presence marker again. } -func (s Set[E]) Delete(v E) { +func (s *Set[E]) Delete(v E) { delete(s.m, v) } diff --git a/internal/set/set_test.go b/internal/set/set_test.go new file mode 100644 index 0000000000..f568730701 --- /dev/null +++ b/internal/set/set_test.go @@ -0,0 +1,66 @@ +package set + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestNew(t *testing.T) { + s := New[int]() + assert.True(t, s.Empty()) +} + +func TestNewWithValues(t *testing.T) { + s := NewWithValues(1, 3) + assert.True(t, s.Contains(1)) + assert.False(t, s.Contains(2)) + assert.True(t, s.Contains(3)) +} + +func TestAdd(t *testing.T) { + s := NewWithValues(1) + assert.False(t, s.Contains(2)) + s.Add(2) + assert.True(t, s.Contains(2)) + s.Add(2) // Adding an already-present element + assert.True(t, s.Contains(2)) + // Unrelated elements are unaffected + assert.True(t, s.Contains(1)) + assert.False(t, s.Contains(3)) +} + +func TestDelete(t *testing.T) { + s := NewWithValues(1, 2) + assert.True(t, s.Contains(2)) + s.Delete(2) + assert.False(t, s.Contains(2)) + s.Delete(2) // Deleting a missing element + assert.False(t, s.Contains(2)) + // Unrelated elements are unaffected + assert.True(t, s.Contains(1)) +} + +func TestContains(t *testing.T) { + s := NewWithValues(1, 2) + assert.True(t, s.Contains(1)) + assert.True(t, s.Contains(2)) + assert.False(t, s.Contains(3)) +} + +func TestEmpty(t *testing.T) { + s := New[int]() + assert.True(t, s.Empty()) + s.Add(1) + assert.False(t, s.Empty()) + s.Delete(1) + assert.True(t, s.Empty()) +} + +func TestValues(t *testing.T) { + s := New[int]() + assert.Empty(t, s.Values()) + s.Add(1) + s.Add(2) + assert.ElementsMatch(t, []int{1, 2}, s.Values()) +}