from __future__ import generators from collect import collect builtin_iter = iter from iter import iter import py def test_simple(): it1 = iter(xrange(123)) assert isinstance(it1, collect) # collect is assumed to be already tested assert builtin_iter(it1) is it1 for x in range(123): assert it1.next() == x py.test.raises(StopIteration, it1.next) py.test.raises(StopIteration, it1.next) def test_idempotent(): it1 = iter(xrange(1234)) it2 = iter(it1) it3 = iter(it1) assert it1 is it2 is it3 def test_lazy_iter(): seen = [] def g(): for x in range(10): seen.append(x) yield x for y in iter(g()): assert seen == [y] del seen[:] def test_two_args(): buffer = [5,8,2,4] it1 = iter(buffer.pop, 8) assert it1 == [4,2] def test_consume(): expected = [5,8,2,4] it1 = iter([5,8,2,4]) assert it1 == expected assert it1[:] == expected assert it1 == expected assert it1[:] == expected for x in it1: assert x == expected.pop(0) assert it1 == expected assert it1[:] == expected assert it1 == expected assert it1[:] == expected assert expected == [] def test_independent(): it1 = iter([5,8,2,4]) it2 = iter(it1[:]) assert zip(it1, it2) == [(5,5), (8,8), (2,2), (4,4)] assert not it1 assert not it2 def test_repr_str(): it1 = iter(xrange(4)) assert repr(it1) == 'itercollect([0, 1, 2...)' assert str(it1) == 'itercollect([0, 1, 2, 3])'