[ZPT] CVS: Releases/Zope/lib/python/ZTUtils/tests - testIterator.py:1.2.18.1

Evan Simpson evan@zope.com
Thu, 13 Dec 2001 15:26:03 -0500


Update of /cvs-repository/Releases/Zope/lib/python/ZTUtils/tests
In directory cvs.zope.org:/tmp/cvs-serv20474/ZTUtils/tests

Modified Files:
      Tag: Zope-2_5-branch
	testIterator.py 
Log Message:
Merge changes from trunk


=== Releases/Zope/lib/python/ZTUtils/tests/testIterator.py 1.2 => 1.2.18.1 ===
 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)