From 51e1d7607ca9af56a23a30755176f05714bf160e Mon Sep 17 00:00:00 2001 From: waroad Date: Sat, 20 Nov 2021 20:56:26 +0900 Subject: [PATCH] add reduce in enumerate --- Lib/test/test_enumerate.py | 2 -- vm/src/builtins/enumerate.rs | 10 +++++++++- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/Lib/test/test_enumerate.py b/Lib/test/test_enumerate.py index 92d52c3d1..5785cb464 100644 --- a/Lib/test/test_enumerate.py +++ b/Lib/test/test_enumerate.py @@ -94,8 +94,6 @@ class EnumerateTestCase(unittest.TestCase, PickleTest): self.assertEqual(list(self.enum(self.seq)), self.res) self.enum.__doc__ - # TODO: RUSTPYTHON - @unittest.expectedFailure def test_pickle(self): self.check_pickle(self.enum(self.seq), self.res) diff --git a/vm/src/builtins/enumerate.rs b/vm/src/builtins/enumerate.rs index 34809fa45..699d2d3cb 100644 --- a/vm/src/builtins/enumerate.rs +++ b/vm/src/builtins/enumerate.rs @@ -4,7 +4,8 @@ use crate::{ function::{IntoPyObject, OptionalArg}, protocol::{PyIter, PyIterReturn}, types::{Constructor, IterNext, IterNextIterable}, - ItemProtocol, PyClassImpl, PyContext, PyObjectRef, PyResult, PyValue, VirtualMachine, + ItemProtocol, PyClassImpl, PyContext, PyObjectRef, PyRef, PyResult, PyValue, TypeProtocol, + VirtualMachine, }; use num_bigint::BigInt; use num_traits::Zero; @@ -52,6 +53,13 @@ impl PyEnumerate { fn class_getitem(cls: PyTypeRef, args: PyObjectRef, vm: &VirtualMachine) -> PyGenericAlias { PyGenericAlias::new(cls, args, vm) } + #[pymethod(magic)] + fn reduce(zelf: PyRef) -> (PyTypeRef, (PyIter, BigInt)) { + ( + zelf.clone_class(), + (zelf.iterator.clone(), zelf.counter.read().clone()), + ) + } } impl IterNextIterable for PyEnumerate {}