Generalize zip() to work with iterators.

NEEDS DOC CHANGES.
More AttributeErrors transmuted into TypeErrors, in test_b2.py, and,
again, this strikes me as a good thing.
This checkin completes the iterator generalization work that obviously
needed to be done.  Can anyone think of others that should be changed?
This commit is contained in:
Tim Peters 2001-05-06 01:05:02 +00:00
parent ef0c42d4e5
commit 8572b4fedf
4 changed files with 96 additions and 28 deletions

View file

@ -418,6 +418,52 @@ class TestCase(unittest.TestCase):
except OSError:
pass
# Test zip()'s use of iterators.
def test_builtin_zip(self):
self.assertRaises(TypeError, zip)
self.assertRaises(TypeError, zip, None)
self.assertRaises(TypeError, zip, range(10), 42)
self.assertRaises(TypeError, zip, range(10), zip)
self.assertEqual(zip(IteratingSequenceClass(3)),
[(0,), (1,), (2,)])
self.assertEqual(zip(SequenceClass(3)),
[(0,), (1,), (2,)])
d = {"one": 1, "two": 2, "three": 3}
self.assertEqual(d.items(), zip(d, d.itervalues()))
# Generate all ints starting at constructor arg.
class IntsFrom:
def __init__(self, start):
self.i = start
def __iter__(self):
return self
def next(self):
i = self.i
self.i = i+1
return i
f = open(TESTFN, "w")
try:
f.write("a\n" "bbb\n" "cc\n")
finally:
f.close()
f = open(TESTFN, "r")
try:
self.assertEqual(zip(IntsFrom(0), f, IntsFrom(-100)),
[(0, "a\n", -100),
(1, "bbb\n", -99),
(2, "cc\n", -98)])
finally:
f.close()
try:
unlink(TESTFN)
except OSError:
pass
# Test reduces()'s use of iterators.
def test_builtin_reduce(self):
from operator import add