Author: Alex Gaynor <alex.gay...@gmail.com> Branch: py3k Changeset: r50821:141ccdc2c4fb Date: 2011-12-21 22:09 -0600 http://bitbucket.org/pypy/pypy/changeset/141ccdc2c4fb/
Log: make sure filter(x, non_callable) raises immediately, not on the first call to __next__ diff --git a/pypy/module/__builtin__/app_functional.py b/pypy/module/__builtin__/app_functional.py --- a/pypy/module/__builtin__/app_functional.py +++ b/pypy/module/__builtin__/app_functional.py @@ -129,7 +129,10 @@ or string, return the same type, else return a list.""" if func is None: func = bool - for item in seq: + return _filter(func, iter(seq)) + +def _filter(func, iterator): + for item in iterator: if func(item): yield item diff --git a/pypy/module/__builtin__/test/test_filter.py b/pypy/module/__builtin__/test/test_filter.py --- a/pypy/module/__builtin__/test/test_filter.py +++ b/pypy/module/__builtin__/test/test_filter.py @@ -1,11 +1,11 @@ import autopath -# trivial functions for testing +# trivial functions for testing class AppTestFilter: def test_filter_no_arguments(self): raises(TypeError, filter) - + def test_filter_no_function_no_seq(self): raises(TypeError, filter, None) @@ -16,10 +16,14 @@ raises(TypeError, filter, lambda x: x>3, [1], [2]) def test_filter_no_function_list(self): - assert list(filter(None, [1, 2, 3])) == [1, 2, 3] + assert list(filter(None, [1, 2, 3])) == [1, 2, 3] def test_filter_no_function_with_bools(self): - assert tuple(filter(None, (True, False, True))) == (True, True) - + assert tuple(filter(None, (True, False, True))) == (True, True) + def test_filter_list(self): - assert list(filter(lambda x: x>3, [1, 2, 3, 4, 5])) == [4, 5] + assert list(filter(lambda x: x>3, [1, 2, 3, 4, 5])) == [4, 5] + + def test_filter_non_iterable(self): + raises(TypeError, filter, None, 42) + raises(TypeError, filter, callable, list) \ No newline at end of file _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit