summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Lib/sets.py24
-rw-r--r--Lib/test/test_sets.py32
2 files changed, 48 insertions, 8 deletions
diff --git a/Lib/sets.py b/Lib/sets.py
index 5ca85de..09d9918 100644
--- a/Lib/sets.py
+++ b/Lib/sets.py
@@ -363,15 +363,17 @@ class Set(BaseSet):
# In-place union, intersection, differences
- def union_update(self, other):
+ def __ior__(self, other):
"""Update a set with the union of itself and another."""
self._binary_sanity_check(other)
self._data.update(other._data)
return self
- __ior__ = union_update
+ def union_update(self, other):
+ """Update a set with the union of itself and another."""
+ self |= other
- def intersection_update(self, other):
+ def __iand__(self, other):
"""Update a set with the intersection of itself and another."""
self._binary_sanity_check(other)
for elt in self._data.keys():
@@ -379,9 +381,11 @@ class Set(BaseSet):
del self._data[elt]
return self
- __iand__ = intersection_update
+ def intersection_update(self, other):
+ """Update a set with the intersection of itself and another."""
+ self &= other
- def symmetric_difference_update(self, other):
+ def __ixor__(self, other):
"""Update a set with the symmetric difference of itself and another."""
self._binary_sanity_check(other)
data = self._data
@@ -393,9 +397,11 @@ class Set(BaseSet):
data[elt] = value
return self
- __ixor__ = symmetric_difference_update
+ def symmetric_difference_update(self, other):
+ """Update a set with the symmetric difference of itself and another."""
+ self ^= other
- def difference_update(self, other):
+ def __isub__(self, other):
"""Remove all elements of another set from this set."""
self._binary_sanity_check(other)
data = self._data
@@ -404,7 +410,9 @@ class Set(BaseSet):
del data[elt]
return self
- __isub__ = difference_update
+ def difference_update(self, other):
+ """Remove all elements of another set from this set."""
+ self -= other
# Python dict-like mass mutations: update, clear
diff --git a/Lib/test/test_sets.py b/Lib/test/test_sets.py
index b56219b..9ff98a6 100644
--- a/Lib/test/test_sets.py
+++ b/Lib/test/test_sets.py
@@ -219,6 +219,10 @@ class TestUpdateOps(unittest.TestCase):
self.set |= Set([8])
assert self.set == Set([2, 4, 6, 8]), "Non-overlapping union"
+ def test_union_method_call(self):
+ self.set.union_update(Set([3, 4, 5]))
+ assert self.set == Set([2, 3, 4, 5, 6]), "Union method call"
+
def test_intersection_subset(self):
self.set &= Set((2, 4))
assert self.set == Set((2, 4)), "Subset intersection"
@@ -235,6 +239,10 @@ class TestUpdateOps(unittest.TestCase):
self.set &= Set([8])
assert self.set == empty_set, "Non-overlapping intersection"
+ def test_intersection_method_call(self):
+ self.set.intersection_update(Set([3, 4, 5]))
+ assert self.set == Set([4]), "Intersection method call"
+
def test_sym_difference_subset(self):
self.set ^= Set((2, 4))
assert self.set == Set([6]), "Subset symmetric difference"
@@ -251,6 +259,30 @@ class TestUpdateOps(unittest.TestCase):
self.set ^= Set([8])
assert self.set == Set([2, 4, 6, 8]), "Non-overlapping symmetric difference"
+ def test_sym_difference_method_call(self):
+ self.set.symmetric_difference_update(Set([3, 4, 5]))
+ assert self.set == Set([2, 3, 5, 6]), "Symmetric difference method call"
+
+ def test_difference_subset(self):
+ self.set -= Set((2, 4))
+ assert self.set == Set([6]), "Subset difference"
+
+ def test_difference_superset(self):
+ self.set -= Set((2, 4, 6, 8))
+ assert self.set == Set([]), "Superset difference"
+
+ def test_difference_overlap(self):
+ self.set -= Set((3, 4, 5))
+ assert self.set == Set([2, 6]), "Overlapping difference"
+
+ def test_difference_non_overlap(self):
+ self.set -= Set([8])
+ assert self.set == Set([2, 4, 6]), "Non-overlapping difference"
+
+ def test_difference_method_call(self):
+ self.set.difference_update(Set([3, 4, 5]))
+ assert self.set == Set([2, 6]), "Difference method call"
+
#==============================================================================
class TestMutate(unittest.TestCase):