[ZPT] CVS: Releases/Zope/lib/python/ZTUtils/tests - testIterator.py:1.3
Evan Simpson
evan@zope.com
Tue, 11 Dec 2001 21:21:57 -0500
Update of /cvs-repository/Releases/Zope/lib/python/ZTUtils/tests
In directory cvs.zope.org:/tmp/cvs-serv32107/tests
Modified Files:
testIterator.py
Log Message:
Handle Python 2.2 iterators, implement first() and last().
=== Releases/Zope/lib/python/ZTUtils/tests/testIterator.py 1.2 => 1.3 ===
from ZTUtils import Iterator
+try:
+ iter
+ do_piter_test = 1
+except NameError:
+ do_piter_test = 0
+
class IteratorTests(unittest.TestCase):
def testIterator0(self):
@@ -12,12 +18,98 @@
it = Iterator((1,))
assert it.next() and not it.next(), "Single-element iterator"
- def testIterator2(self):
+ def testIteratorMany(self):
it = Iterator('text')
for c in 'text':
assert it.next(), "Multi-element iterator"
assert not it.next(), "Multi-element iterator"
-
+
+ def testStart(self):
+ for size in range(4):
+ it = Iterator(range(size+1))
+ it.next()
+ assert it.start, "Start true on element 1 of %s" % (size + 1)
+ el = 1
+ while it.next():
+ el = el + 1
+ assert not it.start, (
+ "Start false on element %s of %s" % (el, size+1))
+
+ def testEnd(self):
+ for size in range(4):
+ size = size + 1
+ it = Iterator(range(size))
+ el = 0
+ while it.next():
+ el = el + 1
+ if el == size:
+ assert it.end, "End true on element %s" % size
+ else:
+ assert not it.end, (
+ "End false on element %s of %s" % (el, size))
+
+ def testIndex(self):
+ it = Iterator(range(5))
+ for el in range(5):
+ assert it.next(), "Iterator stopped too soon"
+ assert it.index == el, "Incorrect index"
+ assert it.number() == el + 1, "Incorrect number"
+ assert it.item == el, "Incorrect item"
+
+ def testFirstLast(self):
+ it = Iterator([1])
+ it.next()
+ assert it.first() == it.last() == 1, "Bad first/last on singleton"
+ four = range(4)
+ for a in 2,3:
+ for b in four:
+ for c in four:
+ s = 'a' * a + 'b' * b + 'c' * c
+ it = Iterator(s)
+ it.next()
+ assert it.first(), "First element not first()"
+ last = s[0]
+ lastlast = it.last()
+ while it.next():
+ assert ((it.item != last) == it.first()), (
+ "first() error")
+ assert ((it.item != last) == lastlast), (
+ "last() error" % (it.item,
+ last, lastlast))
+ last = it.item
+ lastlast = it.last()
+ assert lastlast, "Last element not last()"
+
+ if do_piter_test:
+ def testIterOfIter(self):
+ for i in range(4):
+ r = range(i)
+ it1 = Iterator(r)
+ it2 = Iterator(iter(r))
+ while it1.next() and it2.next():
+ assert it1.item == it2.item, "Item mismatch with iter()"
+ assert it1.index == it2.index, (
+ "Index mismatch with iter()")
+ assert not (it1.next() or it2.next()), (
+ "Length mismatch with iter()")
+
+ def testIterIter(self):
+ wo_iter = map(lambda x:(x, x), range(4))
+ for i in range(4):
+ r = range(i)
+ w_iter = []
+ it = Iterator(r)
+ for x in it:
+ w_iter.append((x, it.index))
+ assert w_iter == wo_iter[:i], (
+ "for-loop failure on full iterator")
+ it = Iterator(range(4))
+ it.next(); it.next(); it.next()
+ w_iter = []
+ for x in it:
+ w_iter.append((x, it.index))
+ assert w_iter == wo_iter[2:], "for-loop failure on half iteration"
+
def test_suite():
return unittest.makeSuite(IteratorTests)