[Python-checkins] python/dist/src/Lib/test test_itertools.py,1.14,1.15
rhettinger@users.sourceforge.net
rhettinger@users.sourceforge.net
Sun, 29 Jun 2003 13:36:25 -0700
Update of /cvsroot/python/python/dist/src/Lib/test
In directory sc8-pr-cvs1:/tmp/cvs-serv26692
Modified Files:
test_itertools.py
Log Message:
More tests
* Test with infinite inputs (using take() on the output)
* Test whether GC can find and eliminate cycles.
Index: test_itertools.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/test/test_itertools.py,v
retrieving revision 1.14
retrieving revision 1.15
diff -C2 -d -r1.14 -r1.15
*** test_itertools.py 28 Jun 2003 05:44:36 -0000 1.14
--- test_itertools.py 29 Jun 2003 20:36:23 -0000 1.15
***************
*** 33,36 ****
--- 33,39 ----
raise StopIteration
+ def take(n, seq):
+ 'Convenience function for partially consuming a long of infinite iterable'
+ return list(islice(seq, n))
class TestBasicOps(unittest.TestCase):
***************
*** 39,42 ****
--- 42,46 ----
self.assertEqual(list(chain('abc')), list('abc'))
self.assertEqual(list(chain('')), [])
+ self.assertEqual(take(4, chain('abc', 'def')), list('abcd'))
self.assertRaises(TypeError, chain, 2, 3)
***************
*** 44,47 ****
--- 48,52 ----
self.assertEqual(zip('abc',count()), [('a', 0), ('b', 1), ('c', 2)])
self.assertEqual(zip('abc',count(3)), [('a', 3), ('b', 4), ('c', 5)])
+ self.assertEqual(take(2, zip('abc',count(3))), [('a', 3), ('b', 4)])
self.assertRaises(TypeError, count, 2, 3)
self.assertRaises(TypeError, count, 'a')
***************
*** 50,54 ****
def test_cycle(self):
! self.assertEqual(list(islice(cycle('abc'),10)), list('abcabcabca'))
self.assertEqual(list(cycle('')), [])
self.assertRaises(TypeError, cycle)
--- 55,59 ----
def test_cycle(self):
! self.assertEqual(take(10, cycle('abc')), list('abcabcabca'))
self.assertEqual(list(cycle('')), [])
self.assertRaises(TypeError, cycle)
***************
*** 59,62 ****
--- 64,68 ----
self.assertEqual(list(ifilter(isEven, range(6))), [0,2,4])
self.assertEqual(list(ifilter(None, [0,1,0,2,0])), [1,2])
+ self.assertEqual(take(4, ifilter(isEven, count())), [0,2,4,6])
self.assertRaises(TypeError, ifilter)
self.assertRaises(TypeError, ifilter, lambda x:x)
***************
*** 68,71 ****
--- 74,78 ----
self.assertEqual(list(ifilterfalse(isEven, range(6))), [1,3,5])
self.assertEqual(list(ifilterfalse(None, [0,1,0,2,0])), [0,0,0])
+ self.assertEqual(take(4, ifilterfalse(isEven, count())), [1,3,5,7])
self.assertRaises(TypeError, ifilterfalse)
self.assertRaises(TypeError, ifilterfalse, lambda x:x)
***************
*** 79,82 ****
--- 86,90 ----
self.assertEqual(list(izip('abc', range(6))), zip('abc', range(6)))
self.assertEqual(list(izip('abcdef', range(3))), zip('abcdef', range(3)))
+ self.assertEqual(take(3,izip('abcdef', count())), zip('abcdef', range(3)))
self.assertEqual(list(izip('abcdef')), zip('abcdef'))
self.assertRaises(TypeError, izip)
***************
*** 97,100 ****
--- 105,109 ----
[(0, 'a'), (1, 'a'), (2, 'a')])
self.assertEqual(list(repeat('a', 3)), ['a', 'a', 'a'])
+ self.assertEqual(take(3, repeat('a')), ['a', 'a', 'a'])
self.assertEqual(list(repeat('a', 0)), [])
self.assertEqual(list(repeat('a', -3)), [])
***************
*** 108,111 ****
--- 117,124 ----
self.assertEqual(list(imap(None, 'abc', range(5))),
[('a',0),('b',1),('c',2)])
+ self.assertEqual(list(imap(None, 'abc', count())),
+ [('a',0),('b',1),('c',2)])
+ self.assertEqual(take(2,imap(None, 'abc', count())),
+ [('a',0),('b',1)])
self.assertEqual(list(imap(operator.pow, [])), [])
self.assertRaises(TypeError, imap)
***************
*** 118,121 ****
--- 131,136 ----
self.assertEqual(list(starmap(operator.pow, zip(range(3), range(1,7)))),
[0**1, 1**2, 2**3])
+ self.assertEqual(take(3, starmap(operator.pow, izip(count(), count(1)))),
+ [0**1, 1**2, 2**3])
self.assertEqual(list(starmap(operator.pow, [])), [])
self.assertRaises(TypeError, list, starmap(operator.pow, [[4,5]]))
***************
*** 274,277 ****
--- 289,331 ----
return chain(imap(lambda x:x, R(Ig(G(seqn)))))
+ class TestGC(unittest.TestCase):
+
+ def makecycle(self, iterator, container):
+ container.append(iterator)
+ iterator.next()
+ del container, iterator
+
+ def test_chain(self):
+ a = []
+ self.makecycle(chain(a), a)
+
+ def test_cycle(self):
+ a = []
+ self.makecycle(cycle([a]*2), a)
+
+ def test_ifilter(self):
+ a = []
+ self.makecycle(ifilter(lambda x:True, [a]*2), a)
+
+ def test_ifilterfalse(self):
+ a = []
+ self.makecycle(ifilterfalse(lambda x:False, a), a)
+
+ def test_izip(self):
+ a = []
+ self.makecycle(izip([a]*2, [a]*3), a)
+
+ def test_imap(self):
+ a = []
+ self.makecycle(imap(lambda x:x, [a]*2), a)
+
+ def test_islice(self):
+ a = []
+ self.makecycle(islice([a]*2, None), a)
+
+ def test_starmap(self):
+ a = []
+ self.makecycle(starmap(lambda *t: t, [(a,a)]*2), a)
+
class TestVariousIteratorArgs(unittest.TestCase):
***************
*** 421,425 ****
>>> def some(pred, seq):
! ... "Returns True if pred(x) is True at least one element in the iterable"
... return bool(nth(ifilter(pred, seq), 0))
--- 475,479 ----
>>> def some(pred, seq):
! ... "Returns True if pred(x) is True for at least one element in the iterable"
... return bool(nth(ifilter(pred, seq), 0))
***************
*** 506,517 ****
def test_main(verbose=None):
! test_classes = (TestBasicOps, TestVariousIteratorArgs)
test_support.run_unittest(*test_classes)
# verify reference counting
if verbose and hasattr(sys, "gettotalrefcount"):
counts = [None] * 5
for i in xrange(len(counts)):
test_support.run_unittest(*test_classes)
counts[i] = sys.gettotalrefcount()
print counts
--- 560,573 ----
def test_main(verbose=None):
! test_classes = (TestBasicOps, TestVariousIteratorArgs, TestGC)
test_support.run_unittest(*test_classes)
# verify reference counting
if verbose and hasattr(sys, "gettotalrefcount"):
+ import gc
counts = [None] * 5
for i in xrange(len(counts)):
test_support.run_unittest(*test_classes)
+ gc.collect()
counts[i] = sys.gettotalrefcount()
print counts