mirror of
https://github.com/python/cpython.git
synced 2025-08-04 00:48:58 +00:00
bpo-33462: Add __reversed__ to dict and dict views (GH-6827)
This commit is contained in:
parent
16c8a53490
commit
6531bf6309
10 changed files with 346 additions and 24 deletions
|
@ -796,22 +796,21 @@ class TestOneTrickPonyABCs(ABCTestCase):
|
|||
|
||||
def test_Reversible(self):
|
||||
# Check some non-reversibles
|
||||
non_samples = [None, 42, 3.14, 1j, dict(), set(), frozenset()]
|
||||
non_samples = [None, 42, 3.14, 1j, set(), frozenset()]
|
||||
for x in non_samples:
|
||||
self.assertNotIsInstance(x, Reversible)
|
||||
self.assertFalse(issubclass(type(x), Reversible), repr(type(x)))
|
||||
# Check some non-reversible iterables
|
||||
non_reversibles = [dict().keys(), dict().items(), dict().values(),
|
||||
Counter(), Counter().keys(), Counter().items(),
|
||||
Counter().values(), _test_gen(),
|
||||
(x for x in []), iter([]), reversed([])]
|
||||
non_reversibles = [_test_gen(), (x for x in []), iter([]), reversed([])]
|
||||
for x in non_reversibles:
|
||||
self.assertNotIsInstance(x, Reversible)
|
||||
self.assertFalse(issubclass(type(x), Reversible), repr(type(x)))
|
||||
# Check some reversible iterables
|
||||
samples = [bytes(), str(), tuple(), list(), OrderedDict(),
|
||||
OrderedDict().keys(), OrderedDict().items(),
|
||||
OrderedDict().values()]
|
||||
OrderedDict().values(), Counter(), Counter().keys(),
|
||||
Counter().items(), Counter().values(), dict(),
|
||||
dict().keys(), dict().items(), dict().values()]
|
||||
for x in samples:
|
||||
self.assertIsInstance(x, Reversible)
|
||||
self.assertTrue(issubclass(type(x), Reversible), repr(type(x)))
|
||||
|
@ -1612,7 +1611,7 @@ class TestCollectionABCs(ABCTestCase):
|
|||
self.assertIsInstance(z, set)
|
||||
list(z)
|
||||
mymap['blue'] = 7 # Shouldn't affect 'z'
|
||||
self.assertEqual(sorted(z), [('orange', 3), ('red', 5)])
|
||||
self.assertEqual(z, {('orange', 3), ('red', 5)})
|
||||
|
||||
def test_Sequence(self):
|
||||
for sample in [tuple, list, bytes, str]:
|
||||
|
@ -1767,10 +1766,10 @@ class TestCounter(unittest.TestCase):
|
|||
self.assertTrue(issubclass(Counter, Mapping))
|
||||
self.assertEqual(len(c), 3)
|
||||
self.assertEqual(sum(c.values()), 6)
|
||||
self.assertEqual(sorted(c.values()), [1, 2, 3])
|
||||
self.assertEqual(sorted(c.keys()), ['a', 'b', 'c'])
|
||||
self.assertEqual(sorted(c), ['a', 'b', 'c'])
|
||||
self.assertEqual(sorted(c.items()),
|
||||
self.assertEqual(list(c.values()), [3, 2, 1])
|
||||
self.assertEqual(list(c.keys()), ['a', 'b', 'c'])
|
||||
self.assertEqual(list(c), ['a', 'b', 'c'])
|
||||
self.assertEqual(list(c.items()),
|
||||
[('a', 3), ('b', 2), ('c', 1)])
|
||||
self.assertEqual(c['b'], 2)
|
||||
self.assertEqual(c['z'], 0)
|
||||
|
@ -1784,7 +1783,7 @@ class TestCounter(unittest.TestCase):
|
|||
for i in range(5):
|
||||
self.assertEqual(c.most_common(i),
|
||||
[('a', 3), ('b', 2), ('c', 1)][:i])
|
||||
self.assertEqual(''.join(sorted(c.elements())), 'aaabbc')
|
||||
self.assertEqual(''.join(c.elements()), 'aaabbc')
|
||||
c['a'] += 1 # increment an existing value
|
||||
c['b'] -= 2 # sub existing value to zero
|
||||
del c['c'] # remove an entry
|
||||
|
@ -1793,7 +1792,7 @@ class TestCounter(unittest.TestCase):
|
|||
c['e'] = -5 # directly assign a missing value
|
||||
c['f'] += 4 # add to a missing value
|
||||
self.assertEqual(c, dict(a=4, b=0, d=-2, e=-5, f=4))
|
||||
self.assertEqual(''.join(sorted(c.elements())), 'aaaaffff')
|
||||
self.assertEqual(''.join(c.elements()), 'aaaaffff')
|
||||
self.assertEqual(c.pop('f'), 4)
|
||||
self.assertNotIn('f', c)
|
||||
for i in range(3):
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue