def test_move_to_end(self): import __pypy__ raises(KeyError, __pypy__.move_to_end, {}, 'foo') raises(KeyError, __pypy__.move_to_end, {}, 'foo', last=True) raises(KeyError, __pypy__.move_to_end, {}, 'foo', last=False) def kwdict(**k): return k for last in [False, True]: for d, key in [({ 1: 2, 3: 4, 5: 6 }, 3), ({ b"a": 5, b"b": 2, b"c": 6 }, b"b"), ({ u"a": 5, u"b": 2, u"c": 6 }, u"b"), (kwdict(d=7, e=8, f=9), "e")]: other_keys = [k for k in d if k != key] __pypy__.move_to_end(d, key, last=last) if not self.on_pypy: # when running tests on CPython, the underlying # dicts are not ordered. We don't get here if # we're running tests on PyPy or with -A. assert set(d.keys()) == set(other_keys + [key]) elif last: assert list(d) == other_keys + [key] else: assert list(d) == [key] + other_keys raises(KeyError, __pypy__.move_to_end, d, key * 3, last=last)
def move_to_end(self, key, last=True): '''Move an existing element to the end (or beginning if last==False). Raises KeyError if the element does not exist. When last=True, acts like a fast version of self[key]=self.pop(key). ''' return move_to_end(self, key, last)
def _pypy_move_to_end(self, key, last=True): __pypy__.move_to_end(self, key, last)