@@ -200,7 +200,7 @@ def test_dropwhile(self):
200
200
self .assertRaises (ValueError , dropwhile (errfunc , [(4 ,5 )]).next )
201
201
202
202
def test_tee (self ):
203
- n = 100
203
+ n = 200
204
204
def irange (n ):
205
205
for i in xrange (n ):
206
206
yield i
@@ -217,16 +217,16 @@ def irange(n):
217
217
self .assertEqual (list (b ), range (n ))
218
218
219
219
a , b = tee (irange (n )) # test dealloc of leading iterator
220
- self . assertEqual ( a . next (), 0 )
221
- self .assertEqual (a .next (), 1 )
220
+ for i in xrange ( 100 ):
221
+ self .assertEqual (a .next (), i )
222
222
del a
223
223
self .assertEqual (list (b ), range (n ))
224
224
225
225
a , b = tee (irange (n )) # test dealloc of trailing iterator
226
- self . assertEqual ( a . next (), 0 )
227
- self .assertEqual (a .next (), 1 )
226
+ for i in xrange ( 100 ):
227
+ self .assertEqual (a .next (), i )
228
228
del b
229
- self .assertEqual (list (a ), range (2 , n ))
229
+ self .assertEqual (list (a ), range (100 , n ))
230
230
231
231
for j in xrange (5 ): # test randomly interleaved
232
232
order = [0 ]* n + [1 ]* n
@@ -239,21 +239,31 @@ def irange(n):
239
239
self .assertEqual (lists [0 ], range (n ))
240
240
self .assertEqual (lists [1 ], range (n ))
241
241
242
+ # test argument format checking
242
243
self .assertRaises (TypeError , tee )
243
244
self .assertRaises (TypeError , tee , 3 )
244
245
self .assertRaises (TypeError , tee , [1 ,2 ], 'x' )
246
+ self .assertRaises (TypeError , tee , [1 ,2 ], 3 , 'x' )
245
247
246
- try :
247
- class A (tee ): pass
248
- except TypeError :
249
- pass
250
- else :
251
- self .fail ("tee constructor should not be subclassable" )
248
+ # tee object should be instantiable
249
+ a , b = tee ('abc' )
250
+ c = type (a )('def' )
251
+ self .assertEqual (list (c ), list ('def' ))
252
+
253
+ # test long-lagged and multi-way split
254
+ a , b , c = tee (xrange (2000 ), 3 )
255
+ for i in xrange (100 ):
256
+ self .assertEqual (a .next (), i )
257
+ self .assertEqual (list (b ), range (2000 ))
258
+ self .assertEqual ([c .next (), c .next ()], range (2 ))
259
+ self .assertEqual (list (a ), range (100 ,2000 ))
260
+ self .assertEqual (list (c ), range (2 ,2000 ))
261
+
262
+ # tee pass-through to copyable iterator
263
+ a , b = tee ('abc' )
264
+ c , d = tee (a )
265
+ self .assert_ (a is c )
252
266
253
- # tee_iterator should not be instantiable
254
- a , b = tee (xrange (10 ))
255
- self .assertRaises (TypeError , type (a ))
256
- self .assert_ (a is iter (a )) # tee_iterator should support __iter__
257
267
258
268
def test_StopIteration (self ):
259
269
self .assertRaises (StopIteration , izip ().next )
@@ -317,13 +327,6 @@ def test_starmap(self):
317
327
a = []
318
328
self .makecycle (starmap (lambda * t : t , [(a ,a )]* 2 ), a )
319
329
320
- def test_tee (self ):
321
- a = []
322
- p , q = t = tee ([a ]* 2 )
323
- a += [a , p , q , t ]
324
- p .next ()
325
- del a , p , q , t
326
-
327
330
def R (seqn ):
328
331
'Regular generator'
329
332
for i in seqn :
@@ -626,7 +629,11 @@ def f(t):
626
629
>>> def pairwise(iterable):
627
630
... "s -> (s0,s1), (s1,s2), (s2, s3), ..."
628
631
... a, b = tee(iterable)
629
- ... return izip(a, islice(b, 1, None))
632
+ ... try:
633
+ ... b.next()
634
+ ... except StopIteration:
635
+ ... pass
636
+ ... return izip(a, b)
630
637
631
638
This is not part of the examples but it tests to make sure the definitions
632
639
perform as purported.
0 commit comments