Fix PowerSet return values
Previously, calling `PowerSet()` on a `threadSafeSet` would return a `threadUnsafeSet` of `threadUnsafeSet`s. Now it returns a `threadSafeSet` of `threadSafeSet`s.
diff --git a/threadsafe.go b/threadsafe.go
index 002e06a..269b4ab 100644
--- a/threadsafe.go
+++ b/threadsafe.go
@@ -226,8 +226,14 @@
func (set *threadSafeSet) PowerSet() Set {
set.RLock()
- ret := set.s.PowerSet()
+ unsafePowerSet := set.s.PowerSet().(*threadUnsafeSet)
set.RUnlock()
+
+ ret := &threadSafeSet{s: newThreadUnsafeSet()}
+ for subset := range unsafePowerSet.Iter() {
+ unsafeSubset := subset.(*threadUnsafeSet)
+ ret.Add(&threadSafeSet{s: *unsafeSubset})
+ }
return ret
}