Author: Ronan Lamy <ronan.l...@gmail.com> 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 pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit