mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-20 18:31:15 +00:00
Merge pull request #116216 from skitt/add-generic-set-clear
Add a Clear() function to generic sets
This commit is contained in:
commit
211291222b
@ -64,6 +64,20 @@ func (s Set[T]) Delete(items ...T) Set[T] {
|
|||||||
return s
|
return s
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Clear empties the set.
|
||||||
|
// It is preferable to replace the set with a newly constructed set,
|
||||||
|
// but not all callers can do that (when there are other references to the map).
|
||||||
|
// In some cases the set *won't* be fully cleared, e.g. a Set[float32] containing NaN
|
||||||
|
// can't be cleared because NaN can't be removed.
|
||||||
|
// For sets containing items of a type that is reflexive for ==,
|
||||||
|
// this is optimized to a single call to runtime.mapclear().
|
||||||
|
func (s Set[T]) Clear() Set[T] {
|
||||||
|
for key := range s {
|
||||||
|
delete(s, key)
|
||||||
|
}
|
||||||
|
return s
|
||||||
|
}
|
||||||
|
|
||||||
// Has returns true if and only if item is contained in the set.
|
// Has returns true if and only if item is contained in the set.
|
||||||
func (s Set[T]) Has(item T) bool {
|
func (s Set[T]) Has(item T) bool {
|
||||||
_, contained := s[item]
|
_, contained := s[item]
|
||||||
|
@ -84,6 +84,57 @@ func TestSetDeleteMultiples(t *testing.T) {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestSetClear(t *testing.T) {
|
||||||
|
s := sets.Set[string]{}
|
||||||
|
s.Insert("a", "b", "c")
|
||||||
|
if s.Len() != 3 {
|
||||||
|
t.Errorf("Expected len=3: %d", s.Len())
|
||||||
|
}
|
||||||
|
|
||||||
|
s.Clear()
|
||||||
|
if s.Len() != 0 {
|
||||||
|
t.Errorf("Expected len=0: %d", s.Len())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestSetClearWithSharedReference(t *testing.T) {
|
||||||
|
s := sets.Set[string]{}
|
||||||
|
s.Insert("a", "b", "c")
|
||||||
|
if s.Len() != 3 {
|
||||||
|
t.Errorf("Expected len=3: %d", s.Len())
|
||||||
|
}
|
||||||
|
|
||||||
|
m := s
|
||||||
|
s.Clear()
|
||||||
|
if s.Len() != 0 {
|
||||||
|
t.Errorf("Expected len=0 on the cleared set: %d", s.Len())
|
||||||
|
}
|
||||||
|
if m.Len() != 0 {
|
||||||
|
t.Errorf("Expected len=0 on the shared reference: %d", m.Len())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestSetClearInSeparateFunction(t *testing.T) {
|
||||||
|
s := sets.Set[string]{}
|
||||||
|
s.Insert("a", "b", "c")
|
||||||
|
if s.Len() != 3 {
|
||||||
|
t.Errorf("Expected len=3: %d", s.Len())
|
||||||
|
}
|
||||||
|
|
||||||
|
clearSetAndAdd(s, "d")
|
||||||
|
if s.Len() != 1 {
|
||||||
|
t.Errorf("Expected len=1: %d", s.Len())
|
||||||
|
}
|
||||||
|
if !s.Has("d") {
|
||||||
|
t.Errorf("Unexpected contents: %#v", s)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func clearSetAndAdd[T comparable](s sets.Set[T], a T) {
|
||||||
|
s.Clear()
|
||||||
|
s.Insert(a)
|
||||||
|
}
|
||||||
|
|
||||||
func TestNewSet(t *testing.T) {
|
func TestNewSet(t *testing.T) {
|
||||||
s := sets.New("a", "b", "c")
|
s := sets.New("a", "b", "c")
|
||||||
if len(s) != 3 {
|
if len(s) != 3 {
|
||||||
|
Loading…
Reference in New Issue
Block a user