diff --git a/Lib/test/test_builtin.py b/Lib/test/test_builtin.py index 8f5b8f0e171..cac2105b6aa 100644 --- a/Lib/test/test_builtin.py +++ b/Lib/test/test_builtin.py @@ -658,8 +658,6 @@ def badfunc(): self.assertEqual(list(filter(lambda x: x>=3, (1, 2, 3, 4))), [3, 4]) self.assertRaises(TypeError, list, filter(42, (1, 2))) - # TODO: RUSTPYTHON - @unittest.expectedFailure def test_filter_pickle(self): for proto in range(pickle.HIGHEST_PROTOCOL + 1): f1 = filter(filter_char, "abcdeabcde") diff --git a/Lib/test/test_itertools.py b/Lib/test/test_itertools.py index 652ffdde10a..7fa961f8557 100644 --- a/Lib/test/test_itertools.py +++ b/Lib/test/test_itertools.py @@ -856,8 +856,6 @@ def keyfunc(obj): keyfunc.skip = 1 self.assertRaises(ExpectedError, gulp, [None, None], keyfunc) - # TODO: RUSTPYTHON - @unittest.expectedFailure def test_filter(self): self.assertEqual(list(filter(isEven, range(6))), [0,2,4]) self.assertEqual(list(filter(None, [0,1,0,2,0])), [1,2]) diff --git a/vm/src/builtins/filter.rs b/vm/src/builtins/filter.rs index 1455aec8c03..39bf70e57e4 100644 --- a/vm/src/builtins/filter.rs +++ b/vm/src/builtins/filter.rs @@ -37,7 +37,15 @@ impl Constructor for PyFilter { } #[pyimpl(with(IterNext, Constructor), flags(BASETYPE))] -impl PyFilter {} +impl PyFilter { + #[pymethod(magic)] + fn reduce(&self, vm: &VirtualMachine) -> (PyTypeRef, (PyObjectRef, PyIter)) { + ( + vm.ctx.types.filter_type.clone(), + (self.predicate.clone(), self.iterator.clone()), + ) + } +} impl IterNextIterable for PyFilter {} impl IterNext for PyFilter {