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/extra_tests/snippets/builtin_complex.py b/extra_tests/snippets/builtin_complex.py index 61dc7071240..ecba467e8dc 100644 --- a/extra_tests/snippets/builtin_complex.py +++ b/extra_tests/snippets/builtin_complex.py @@ -41,6 +41,7 @@ # "can't mod complex numbers. assert_raises(TypeError, lambda: complex(2, -3) % 2) assert_raises(TypeError, lambda: 2 % complex(2, -3)) +assert_raises(TypeError, lambda: complex(2, -3).__mod__(2)) # __floordiv__, __rfloordiv__ # can't take floor of complex number. diff --git a/vm/src/builtins/complex.rs b/vm/src/builtins/complex.rs index f33d4856f76..a8aab079300 100644 --- a/vm/src/builtins/complex.rs +++ b/vm/src/builtins/complex.rs @@ -204,6 +204,11 @@ impl PyComplex { #[pyimpl(flags(BASETYPE), with(Comparable, Hashable, Constructor))] impl PyComplex { + #[pymethod(name = "__mod__")] + fn mod_(&self, other: PyObjectRef, vm: &VirtualMachine) -> PyResult { + return Err(vm.new_type_error("can't mod complex numbers.".to_owned(),)) + } + #[pymethod(magic)] fn complex(zelf: PyRef, vm: &VirtualMachine) -> PyRef { if zelf.is(&vm.ctx.types.complex_type) { 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 {