Merged revisions 56125-56153 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/branches/p3yk
........
r56127 | georg.brandl | 2007-06-30 09:32:49 +0200 (Sat, 30 Jun 2007) | 2 lines
Fix a place where floor division would be in order.
........
r56135 | guido.van.rossum | 2007-07-01 06:13:54 +0200 (Sun, 01 Jul 2007) | 28 lines
Make map() and filter() identical to itertools.imap() and .ifilter(),
respectively.
I fixed two bootstrap issues, due to the dynamic import of itertools:
1. Starting python requires that map() and filter() are not used until
site.py has added build/lib.<arch> to sys.path.
2. Building python requires that setup.py and distutils and everything
they use is free of map() and filter() calls.
Beyond this, I only fixed the tests in test_builtin.py.
Others, please help fixing the remaining tests that are now broken!
The fixes are usually simple:
a. map(None, X) -> list(X)
b. map(F, X) -> list(map(F, X))
c. map(lambda x: F(x), X) -> [F(x) for x in X]
d. filter(F, X) -> list(filter(F, X))
e. filter(lambda x: P(x), X) -> [x for x in X if P(x)]
Someone, please also contribute a fixer for 2to3 to do this.
It can leave map()/filter() calls alone that are already
inside a list() or sorted() call or for-loop.
Only in rare cases have I seen code that depends on map() of lists
of different lengths going to the end of the longest, or on filter()
of a string or tuple returning an object of the same type; these
will need more thought to fix.
........
r56136 | guido.van.rossum | 2007-07-01 06:22:01 +0200 (Sun, 01 Jul 2007) | 3 lines
Make it so that test_decimal fails instead of hangs, to help automated
test runners.
........
r56139 | georg.brandl | 2007-07-01 18:20:58 +0200 (Sun, 01 Jul 2007) | 2 lines
Fix a few test cases after the map->imap change.
........
r56142 | neal.norwitz | 2007-07-02 06:38:12 +0200 (Mon, 02 Jul 2007) | 1 line
Get a bunch more tests passing after converting map/filter to return iterators.
........
r56147 | guido.van.rossum | 2007-07-02 15:32:02 +0200 (Mon, 02 Jul 2007) | 4 lines
Fix the remaining failing unit tests (at least on OSX).
Also tweaked urllib2 so it doesn't raise socket.gaierror when
all network interfaces are turned off.
........
diff --git a/Lib/test/test_iter.py b/Lib/test/test_iter.py
index f7712db..b92c50a 100644
--- a/Lib/test/test_iter.py
+++ b/Lib/test/test_iter.py
@@ -305,13 +305,14 @@
# Test filter()'s use of iterators.
def test_builtin_filter(self):
- self.assertEqual(filter(None, SequenceClass(5)), list(range(1, 5)))
- self.assertEqual(filter(None, SequenceClass(0)), [])
- self.assertEqual(filter(None, ()), ())
- self.assertEqual(filter(None, "abc"), "abc")
+ self.assertEqual(list(filter(None, SequenceClass(5))),
+ list(range(1, 5)))
+ self.assertEqual(list(filter(None, SequenceClass(0))), [])
+ self.assertEqual(list(filter(None, ())), [])
+ self.assertEqual(list(filter(None, "abc")), ["a", "b", "c"])
d = {"one": 1, "two": 2, "three": 3}
- self.assertEqual(filter(None, d), list(d.keys()))
+ self.assertEqual(list(filter(None, d)), list(d.keys()))
self.assertRaises(TypeError, filter, None, list)
self.assertRaises(TypeError, filter, None, 42)
@@ -344,8 +345,8 @@
return SeqIter(self.vals)
seq = Seq(*([bTrue, bFalse] * 25))
- self.assertEqual(filter(lambda x: not x, seq), [bFalse]*25)
- self.assertEqual(filter(lambda x: not x, iter(seq)), [bFalse]*25)
+ self.assertEqual(list(filter(lambda x: not x, seq)), [bFalse]*25)
+ self.assertEqual(list(filter(lambda x: not x, iter(seq))), [bFalse]*25)
# Test max() and min()'s use of iterators.
def test_builtin_max_min(self):
@@ -381,20 +382,24 @@
# Test map()'s use of iterators.
def test_builtin_map(self):
- self.assertEqual(map(None, SequenceClass(5)), list(range(5)))
- self.assertEqual(map(lambda x: x+1, SequenceClass(5)), list(range(1, 6)))
+ self.assertEqual(list(map(None, SequenceClass(5))),
+ [(0,), (1,), (2,), (3,), (4,)])
+ self.assertEqual(list(map(lambda x: x+1, SequenceClass(5))),
+ list(range(1, 6)))
d = {"one": 1, "two": 2, "three": 3}
- self.assertEqual(map(None, d), list(d.keys()))
- self.assertEqual(map(lambda k, d=d: (k, d[k]), d), list(d.items()))
+ self.assertEqual(list(map(None, d)), [(k,) for k in d])
+ self.assertEqual(list(map(lambda k, d=d: (k, d[k]), d)),
+ list(d.items()))
dkeys = list(d.keys())
expected = [(i < len(d) and dkeys[i] or None,
i,
i < len(d) and dkeys[i] or None)
- for i in range(5)]
- self.assertEqual(map(None, d,
- SequenceClass(5),
- iter(d.keys())),
+ for i in range(3)]
+ self.assertEqual(list(map(None,
+ d,
+ SequenceClass(5),
+ iter(d.keys()))),
expected)
f = open(TESTFN, "w")
@@ -405,7 +410,7 @@
f.close()
f = open(TESTFN, "r")
try:
- self.assertEqual(map(len, f), list(range(1, 21, 2)))
+ self.assertEqual(list(map(len, f)), list(range(1, 21, 2)))
finally:
f.close()
try: