[pypy-svn] r56451 - in pypy/dist/pypy/module/itertools: . test
adurdin at codespeak.net
adurdin at codespeak.net
Fri Jul 11 16:11:58 CEST 2008
Author: adurdin
Date: Fri Jul 11 16:11:57 2008
New Revision: 56451
Modified:
pypy/dist/pypy/module/itertools/interp_itertools.py
pypy/dist/pypy/module/itertools/test/test_itertools.py
Log:
(adurdin, jlg) tidying tests for interp_itertools
Modified: pypy/dist/pypy/module/itertools/interp_itertools.py
==============================================================================
--- pypy/dist/pypy/module/itertools/interp_itertools.py (original)
+++ pypy/dist/pypy/module/itertools/interp_itertools.py Fri Jul 11 16:11:57 2008
@@ -551,6 +551,9 @@
self.saved_iterator = None
self.exhausted = False
+ def iter_w(self):
+ return self.space.wrap(self)
+
def next_w(self):
if self.exhausted:
if not self.saved_w:
@@ -582,5 +585,21 @@
W_Cycle.typedef = TypeDef(
'cycle',
__new__ = interp2app(W_Cycle___new__, unwrap_spec=[ObjSpace, W_Root, W_Root]),
- next = interp2app(W_Cycle.next_w, unwrap_spec=['self']))
+ __iter__ = interp2app(W_Cycle.iter_w, unwrap_spec=['self']),
+ next = interp2app(W_Cycle.next_w, unwrap_spec=['self']),
+ __doc__ = """Make an iterator returning elements from the iterable and
+ saving a copy of each. When the iterable is exhausted, return
+ elements from the saved copy. Repeats indefinitely.
+
+ Equivalent to :
+
+ def cycle(iterable):
+ saved = []
+ for element in iterable:
+ yield element
+ saved.append(element)
+ while saved:
+ for element in saved:
+ yield element
+ """)
W_Cycle.typedef.acceptable_as_base_class = False
Modified: pypy/dist/pypy/module/itertools/test/test_itertools.py
==============================================================================
--- pypy/dist/pypy/module/itertools/test/test_itertools.py (original)
+++ pypy/dist/pypy/module/itertools/test/test_itertools.py Fri Jul 11 16:11:57 2008
@@ -4,28 +4,6 @@
def setup_class(cls):
cls.space = gettestobjspace(usemodules=['itertools'])
- def test_iterables(self):
- import itertools
-
- iterables = [
- itertools.count(),
- itertools.repeat(None),
- itertools.takewhile(bool, []),
- itertools.dropwhile(bool, []),
- itertools.ifilter(None, []),
- itertools.ifilterfalse(None, []),
- itertools.islice([], 0),
- itertools.chain(),
- itertools.imap(None),
- itertools.izip(),
- ]
-
- for it in iterables:
- assert hasattr(it, '__iter__')
- assert iter(it) is it
- assert hasattr(it, 'next')
- assert callable(it.next)
-
def test_count(self):
import itertools
@@ -378,40 +356,65 @@
for x in [1, 2, 3, 1, 2, 3, 1, 2, 3]:
assert it.next() == x
-
+
+ def test_iterables(self):
+ import itertools
+
+ iterables = [
+ itertools.chain(),
+ itertools.count(),
+ itertools.cycle([]),
+ itertools.dropwhile(bool, []),
+ itertools.ifilter(None, []),
+ itertools.ifilterfalse(None, []),
+ itertools.imap(None),
+ itertools.islice([], 0),
+ itertools.izip(),
+ itertools.repeat(None),
+ itertools.takewhile(bool, []),
+ ]
+
+ for it in iterables:
+ assert hasattr(it, '__iter__')
+ assert iter(it) is it
+ assert hasattr(it, 'next')
+ assert callable(it.next)
+
def test_docstrings(self):
import itertools
assert itertools.__doc__
methods = [
+ itertools.chain,
itertools.count,
- itertools.repeat,
- itertools.takewhile,
+ itertools.cycle,
itertools.dropwhile,
itertools.ifilter,
itertools.ifilterfalse,
- itertools.islice,
- itertools.chain,
itertools.imap,
+ itertools.islice,
itertools.izip,
+ itertools.repeat,
+ itertools.takewhile,
]
for method in methods:
assert method.__doc__
-
+
def test_subclassing(self):
import itertools
- # not sure how useful this actually is, but CPython implements it
+ # Although implemented as classes, the itertools functions should not be subclassable
iterables = [
+ (itertools.chain, ()),
(itertools.count, ()),
- (itertools.repeat, (None,)),
- (itertools.takewhile, (bool, [])),
+ (itertools.cycle, ()),
(itertools.dropwhile, (bool, [])),
(itertools.ifilter, (None, [])),
(itertools.ifilterfalse, (None, [])),
- (itertools.islice, ([], 0)),
- (itertools.chain, ()),
(itertools.imap, (None,)),
+ (itertools.islice, ([], 0)),
(itertools.izip, ()),
+ (itertools.repeat, (None,)),
+ (itertools.takewhile, (bool, [])),
]
for cls, args in iterables:
try:
@@ -421,4 +424,4 @@
pass
else:
assert False, "Subclassing should fail."
-
+
More information about the Pypy-commit
mailing list