Author: Ronan Lamy <[email protected]>
Branch: py3.5
Changeset: r95730:4674aa2581e3
Date: 2019-01-26 20:12 +0000
http://bitbucket.org/pypy/pypy/changeset/4674aa2581e3/
Log: Fix reversed() on OrderedDict views
diff --git a/lib_pypy/_pypy_collections.py b/lib_pypy/_pypy_collections.py
--- a/lib_pypy/_pypy_collections.py
+++ b/lib_pypy/_pypy_collections.py
@@ -137,14 +137,14 @@
class _OrderedDictKeysView(dict_keys):
def __reversed__(self):
- yield from reversed_dict(self._mapping)
+ yield from reversed_dict(self._dict)
class _OrderedDictItemsView(dict_items):
def __reversed__(self):
- for key in reversed_dict(self._mapping):
- yield (key, self._mapping[key])
+ for key in reversed_dict(self._dict):
+ yield (key, self._dict[key])
class _OrderedDictValuesView(dict_values):
def __reversed__(self):
- for key in reversed_dict(self._mapping):
- yield self._mapping[key]
+ for key in reversed_dict(self._dict):
+ yield self._dict[key]
diff --git a/pypy/module/_collections/test/test_ordereddict.py
b/pypy/module/_collections/test/test_ordereddict.py
--- a/pypy/module/_collections/test/test_ordereddict.py
+++ b/pypy/module/_collections/test/test_ordereddict.py
@@ -22,3 +22,17 @@
assert d['x'] == 42
d.update({'y': 2})
assert d['y'] == 42
+
+ def test_reversed(self):
+ import sys
+ from _collections import OrderedDict
+
+ pairs = [('c', 1), ('b', 2), ('a', 3), ('d', 4), ('e', 5), ('f', 6)]
+ od = OrderedDict(pairs)
+ if '__pypy__' in sys.builtin_module_names:
+ # dict ordering is wrong when testing interpreted on top of CPython
+ pairs = list(dict(od).items())
+ assert list(reversed(od)) == [t[0] for t in reversed(pairs)]
+ assert list(reversed(od.keys())) == [t[0] for t in reversed(pairs)]
+ assert list(reversed(od.values())) == [t[1] for t in reversed(pairs)]
+ assert list(reversed(od.items())) == list(reversed(pairs))
diff --git a/pypy/objspace/std/dictmultiobject.py
b/pypy/objspace/std/dictmultiobject.py
--- a/pypy/objspace/std/dictmultiobject.py
+++ b/pypy/objspace/std/dictmultiobject.py
@@ -11,7 +11,7 @@
WrappedDefault, applevel, interp2app, unwrap_spec)
from pypy.interpreter.mixedmodule import MixedModule
from pypy.interpreter.signature import Signature
-from pypy.interpreter.typedef import TypeDef
+from pypy.interpreter.typedef import TypeDef, interp_attrproperty_w
from pypy.interpreter.unicodehelper import decode_utf8
from pypy.objspace.std.util import negate
@@ -1610,6 +1610,7 @@
__xor__ = interp2app(W_DictViewItemsObject.descr_xor),
__rxor__ = interp2app(W_DictViewItemsObject.descr_rxor),
isdisjoint = interp2app(W_DictViewItemsObject.descr_isdisjoint),
+ _dict = interp_attrproperty_w('w_dict', cls=W_DictViewItemsObject),
)
W_DictViewKeysObject.typedef = TypeDef(
@@ -1636,6 +1637,7 @@
__xor__ = interp2app(W_DictViewKeysObject.descr_xor),
__rxor__ = interp2app(W_DictViewKeysObject.descr_rxor),
isdisjoint = interp2app(W_DictViewKeysObject.descr_isdisjoint),
+ _dict = interp_attrproperty_w('w_dict', cls=W_DictViewKeysObject),
)
W_DictViewValuesObject.typedef = TypeDef(
@@ -1644,4 +1646,5 @@
__repr__ = interp2app(W_DictViewValuesObject.descr_repr),
__len__ = interp2app(W_DictViewValuesObject.descr_len),
__iter__ = interp2app(W_DictViewValuesObject.descr_iter),
+ _dict = interp_attrproperty_w('w_dict', cls=W_DictViewValuesObject),
)
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit