mirror of
https://github.com/python/cpython.git
synced 2025-08-04 00:48:58 +00:00
Issue #13121: Support in-place math operators for collections.Counter().
This commit is contained in:
parent
3bb8be6d78
commit
becd56822a
4 changed files with 86 additions and 1 deletions
|
@ -932,6 +932,27 @@ class TestCounter(unittest.TestCase):
|
|||
set_result = setop(set(p.elements()), set(q.elements()))
|
||||
self.assertEqual(counter_result, dict.fromkeys(set_result, 1))
|
||||
|
||||
def test_inplace_operations(self):
|
||||
elements = 'abcd'
|
||||
for i in range(1000):
|
||||
# test random pairs of multisets
|
||||
p = Counter(dict((elem, randrange(-2,4)) for elem in elements))
|
||||
p.update(e=1, f=-1, g=0)
|
||||
q = Counter(dict((elem, randrange(-2,4)) for elem in elements))
|
||||
q.update(h=1, i=-1, j=0)
|
||||
for inplace_op, regular_op in [
|
||||
(Counter.__iadd__, Counter.__add__),
|
||||
(Counter.__isub__, Counter.__sub__),
|
||||
(Counter.__ior__, Counter.__or__),
|
||||
(Counter.__iand__, Counter.__and__),
|
||||
]:
|
||||
c = p.copy()
|
||||
c_id = id(c)
|
||||
regular_result = regular_op(c, q)
|
||||
inplace_result = inplace_op(c, q)
|
||||
self.assertEqual(inplace_result, regular_result)
|
||||
self.assertEqual(id(inplace_result), c_id)
|
||||
|
||||
def test_subtract(self):
|
||||
c = Counter(a=-5, b=0, c=5, d=10, e=15,g=40)
|
||||
c.subtract(a=1, b=2, c=-3, d=10, e=20, f=30, h=-50)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue