diff options
author | Raymond Hettinger <python@rcn.com> | 2005-08-13 02:28:54 (GMT) |
---|---|---|
committer | Raymond Hettinger <python@rcn.com> | 2005-08-13 02:28:54 (GMT) |
commit | ab294199b772e47dd86ca665dbc1080715b844d2 (patch) | |
tree | 355e719f2cbc756be0d9c8a2943a9056cc304a77 /Lib | |
parent | 787b4c5fea8476a1146918f90a6da7f63d7aa31c (diff) | |
download | cpython-ab294199b772e47dd86ca665dbc1080715b844d2.zip cpython-ab294199b772e47dd86ca665dbc1080715b844d2.tar.gz cpython-ab294199b772e47dd86ca665dbc1080715b844d2.tar.bz2 |
Teach set modules to correctly compute s-=s and s^=s as the empty set.
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/sets.py | 4 | ||||
-rw-r--r-- | Lib/test/test_set.py | 12 | ||||
-rw-r--r-- | Lib/test/test_sets.py | 13 |
3 files changed, 29 insertions, 0 deletions
diff --git a/Lib/sets.py b/Lib/sets.py index 8ec7e2f..32a0dd6 100644 --- a/Lib/sets.py +++ b/Lib/sets.py @@ -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] diff --git a/Lib/test/test_set.py b/Lib/test/test_set.py index b4c7c4f..354db78 100644 --- a/Lib/test/test_set.py +++ b/Lib/test/test_set.py @@ -382,6 +382,18 @@ class TestSet(TestJointOps): else: self.assert_(c not in self.s) + def test_inplace_on_self(self): + t = self.s.copy() + t |= t + self.assertEqual(t, self.s) + t &= t + self.assertEqual(t, self.s) + t -= t + self.assertEqual(t, self.thetype()) + t = self.s.copy() + t ^= t + self.assertEqual(t, self.thetype()) + def test_weakref(self): s = self.thetype('gallahad') p = proxy(s) diff --git a/Lib/test/test_sets.py b/Lib/test/test_sets.py index c5a48b1..ff834e0 100644 --- a/Lib/test/test_sets.py +++ b/Lib/test/test_sets.py @@ -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): |