Teach the sets module to correctly compute s-=s and s^=s as the empty set.

This commit is contained in:
Raymond Hettinger 2005-08-13 02:29:58 +00:00
parent f98e6b15ba
commit 038ca2a551
2 changed files with 17 additions and 0 deletions

View File

@ -480,6 +480,8 @@ class Set(BaseSet):
value = True
if not isinstance(other, BaseSet):
other = Set(other)
if self is other:
self.clear()
for elt in other:
if elt in data:
del data[elt]
@ -497,6 +499,8 @@ class Set(BaseSet):
data = self._data
if not isinstance(other, BaseSet):
other = Set(other)
if self is other:
self.clear()
for elt in ifilter(data.has_key, other):
del data[elt]

View File

@ -243,6 +243,19 @@ class TestBinaryOps(unittest.TestCase):
self.assertRaises(TypeError, cmp, a, 12)
self.assertRaises(TypeError, cmp, "abc", a)
def test_inplace_on_self(self):
t = self.set.copy()
t |= t
self.assertEqual(t, self.set)
t &= t
self.assertEqual(t, self.set)
t -= t
self.assertEqual(len(t), 0)
t = self.set.copy()
t ^= t
self.assertEqual(len(t), 0)
#==============================================================================
class TestUpdateOps(unittest.TestCase):