[Python-checkins] python/dist/src/Lib/test test_itertools.py, 1.24,
1.25
rhettinger at users.sourceforge.net
rhettinger at users.sourceforge.net
Wed Nov 12 09:32:28 EST 2003
Update of /cvsroot/python/python/dist/src/Lib/test
In directory sc8-pr-cvs1:/tmp/cvs-serv16547/Lib/test
Modified Files:
test_itertools.py
Log Message:
Improve the implementation of itertools.tee().
Formerly, underlying queue was implemented in terms of two lists. The
new queue is a series of singly-linked fixed length lists.
The new implementation runs much faster, supports multi-way tees, and
allows tees of tees without additional memory costs.
The root ideas for this structure were contributed by Andrew Koenig
and Guido van Rossum.
Index: test_itertools.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/test/test_itertools.py,v
retrieving revision 1.24
retrieving revision 1.25
diff -C2 -d -r1.24 -r1.25
*** test_itertools.py 26 Oct 2003 15:34:50 -0000 1.24
--- test_itertools.py 12 Nov 2003 14:32:25 -0000 1.25
***************
*** 201,205 ****
def test_tee(self):
! n = 100
def irange(n):
for i in xrange(n):
--- 201,205 ----
def test_tee(self):
! n = 200
def irange(n):
for i in xrange(n):
***************
*** 218,231 ****
a, b = tee(irange(n)) # test dealloc of leading iterator
! self.assertEqual(a.next(), 0)
! self.assertEqual(a.next(), 1)
del a
self.assertEqual(list(b), range(n))
a, b = tee(irange(n)) # test dealloc of trailing iterator
! self.assertEqual(a.next(), 0)
! self.assertEqual(a.next(), 1)
del b
! self.assertEqual(list(a), range(2, n))
for j in xrange(5): # test randomly interleaved
--- 218,231 ----
a, b = tee(irange(n)) # test dealloc of leading iterator
! for i in xrange(100):
! self.assertEqual(a.next(), i)
del a
self.assertEqual(list(b), range(n))
a, b = tee(irange(n)) # test dealloc of trailing iterator
! for i in xrange(100):
! self.assertEqual(a.next(), i)
del b
! self.assertEqual(list(a), range(100, n))
for j in xrange(5): # test randomly interleaved
***************
*** 240,258 ****
self.assertEqual(lists[1], range(n))
self.assertRaises(TypeError, tee)
self.assertRaises(TypeError, tee, 3)
self.assertRaises(TypeError, tee, [1,2], 'x')
! try:
! class A(tee): pass
! except TypeError:
! pass
! else:
! self.fail("tee constructor should not be subclassable")
- # tee_iterator should not be instantiable
- a, b = tee(xrange(10))
- self.assertRaises(TypeError, type(a))
- self.assert_(a is iter(a)) # tee_iterator should support __iter__
def test_StopIteration(self):
--- 240,268 ----
self.assertEqual(lists[1], range(n))
+ # test argument format checking
self.assertRaises(TypeError, tee)
self.assertRaises(TypeError, tee, 3)
self.assertRaises(TypeError, tee, [1,2], 'x')
+ self.assertRaises(TypeError, tee, [1,2], 3, 'x')
! # tee object should be instantiable
! a, b = tee('abc')
! c = type(a)('def')
! self.assertEqual(list(c), list('def'))
!
! # test long-lagged and multi-way split
! a, b, c = tee(xrange(2000), 3)
! for i in xrange(100):
! self.assertEqual(a.next(), i)
! self.assertEqual(list(b), range(2000))
! self.assertEqual([c.next(), c.next()], range(2))
! self.assertEqual(list(a), range(100,2000))
! self.assertEqual(list(c), range(2,2000))
!
! # tee pass-through to copyable iterator
! a, b = tee('abc')
! c, d = tee(a)
! self.assert_(a is c)
def test_StopIteration(self):
***************
*** 318,328 ****
self.makecycle(starmap(lambda *t: t, [(a,a)]*2), a)
- def test_tee(self):
- a = []
- p, q = t = tee([a]*2)
- a += [a, p, q, t]
- p.next()
- del a, p, q, t
-
def R(seqn):
'Regular generator'
--- 328,331 ----
***************
*** 627,631 ****
... "s -> (s0,s1), (s1,s2), (s2, s3), ..."
... a, b = tee(iterable)
! ... return izip(a, islice(b, 1, None))
This is not part of the examples but it tests to make sure the definitions
--- 630,638 ----
... "s -> (s0,s1), (s1,s2), (s2, s3), ..."
... a, b = tee(iterable)
! ... try:
! ... b.next()
! ... except StopIteration:
! ... pass
! ... return izip(a, b)
This is not part of the examples but it tests to make sure the definitions
More information about the Python-checkins
mailing list