[py-svn] r15899 - in py/dist/py: . builtin builtin/testing
arigo at codespeak.net
arigo at codespeak.net
Wed Aug 10 11:02:33 CEST 2005
Author: arigo
Date: Wed Aug 10 11:02:28 2005
New Revision: 15899
Added:
py/dist/py/builtin/reversed.py (contents, props changed)
py/dist/py/builtin/testing/test_reversed.py (contents, props changed)
Modified:
py/dist/py/__init__.py
Log:
Added py.builtin.reversed(), copied from PyPy and tested on top of Python 2.2
as well. This is useful for pypy/lib/test2/test_deque_extra.py.
Modified: py/dist/py/__init__.py
==============================================================================
--- py/dist/py/__init__.py (original)
+++ py/dist/py/__init__.py Wed Aug 10 11:02:28 2005
@@ -84,6 +84,7 @@
# backports and additions of builtins
'builtin.enumerate' : ('./builtin/enumerate.py', 'enumerate'),
+ 'builtin.reversed' : ('./builtin/reversed.py', 'reversed'),
# gateways into remote contexts
'execnet.SocketGateway' : ('./execnet/register.py', 'SocketGateway'),
Added: py/dist/py/builtin/reversed.py
==============================================================================
--- (empty file)
+++ py/dist/py/builtin/reversed.py Wed Aug 10 11:02:28 2005
@@ -0,0 +1,37 @@
+from __future__ import generators
+try:
+ reversed = reversed
+except NameError:
+
+ def reversed(sequence):
+ """reversed(sequence) -> reverse iterator over values of the sequence
+
+ Return a reverse iterator
+ """
+ if hasattr(sequence, '__reversed__'):
+ return sequence.__reversed__()
+ if not hasattr(sequence, '__getitem__'):
+ raise TypeError("argument to reversed() must be a sequence")
+ return reversed_iterator(sequence)
+
+
+ class reversed_iterator(object):
+
+ def __init__(self, seq):
+ self.seq = seq
+ self.remaining = len(seq)
+
+ def __iter__(self):
+ return self
+
+ def next(self):
+ i = self.remaining
+ if i > 0:
+ i -= 1
+ item = self.seq[i]
+ self.remaining = i
+ return item
+ raise StopIteration
+
+ def __len__(self):
+ return self.remaining
Added: py/dist/py/builtin/testing/test_reversed.py
==============================================================================
--- (empty file)
+++ py/dist/py/builtin/testing/test_reversed.py Wed Aug 10 11:02:28 2005
@@ -0,0 +1,18 @@
+from py.builtin import reversed
+from py.test import raises
+
+def test_reversed():
+ r = reversed("hello")
+ assert iter(r) is r
+ assert len(r) == 5
+ assert r.next() == "o"
+ assert r.next() == "l"
+ assert r.next() == "l"
+ assert r.next() == "e"
+ assert len(r) == 1
+ assert r.next() == "h"
+ assert len(r) == 0
+ raises(StopIteration, r.next)
+ assert len(r) == 0
+ assert list(reversed(list(reversed("hello")))) == ['h','e','l','l','o']
+ raises(TypeError, reversed, reversed("hello"))
More information about the pytest-commit
mailing list