Skip to content

Commit dfa4bdc

Browse files
authored
add filter.__reduce__ (RustPython#3732)
1 parent bce9341 commit dfa4bdc

File tree

3 files changed

+9
-5
lines changed

3 files changed

+9
-5
lines changed

Lib/test/test_builtin.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -658,8 +658,6 @@ def badfunc():
658658
self.assertEqual(list(filter(lambda x: x>=3, (1, 2, 3, 4))), [3, 4])
659659
self.assertRaises(TypeError, list, filter(42, (1, 2)))
660660

661-
# TODO: RUSTPYTHON
662-
@unittest.expectedFailure
663661
def test_filter_pickle(self):
664662
for proto in range(pickle.HIGHEST_PROTOCOL + 1):
665663
f1 = filter(filter_char, "abcdeabcde")

Lib/test/test_itertools.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -856,8 +856,6 @@ def keyfunc(obj):
856856
keyfunc.skip = 1
857857
self.assertRaises(ExpectedError, gulp, [None, None], keyfunc)
858858

859-
# TODO: RUSTPYTHON
860-
@unittest.expectedFailure
861859
def test_filter(self):
862860
self.assertEqual(list(filter(isEven, range(6))), [0,2,4])
863861
self.assertEqual(list(filter(None, [0,1,0,2,0])), [1,2])

vm/src/builtins/filter.rs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,15 @@ impl Constructor for PyFilter {
3737
}
3838

3939
#[pyimpl(with(IterNext, Constructor), flags(BASETYPE))]
40-
impl PyFilter {}
40+
impl PyFilter {
41+
#[pymethod(magic)]
42+
fn reduce(&self, vm: &VirtualMachine) -> (PyTypeRef, (PyObjectRef, PyIter)) {
43+
(
44+
vm.ctx.types.filter_type.clone(),
45+
(self.predicate.clone(), self.iterator.clone()),
46+
)
47+
}
48+
}
4149

4250
impl IterNextIterable for PyFilter {}
4351
impl IterNext for PyFilter {

0 commit comments

Comments
 (0)