diff --git a/Lib/test/test_tuple.py b/Lib/test/test_tuple.py index 769ee9a90..5d7b9980a 100644 --- a/Lib/test/test_tuple.py +++ b/Lib/test/test_tuple.py @@ -26,8 +26,6 @@ class TupleTest(seq_tests.CommonTest): with self.assertRaisesRegex(TypeError, msg): t['a'] - # TODO: RUSTPYTHON - @unittest.expectedFailure def test_constructors(self): super().test_constructors() # calling built-in types without argument must return empty diff --git a/vm/src/obj/objtuple.rs b/vm/src/obj/objtuple.rs index ef1d6f2c2..63ae51f49 100644 --- a/vm/src/obj/objtuple.rs +++ b/vm/src/obj/objtuple.rs @@ -6,9 +6,9 @@ use super::objsequence::get_item; use super::objtype::PyClassRef; use crate::function::OptionalArg; use crate::pyobject::{ - self, BorrowValue, IntoPyObject, + self, BorrowValue, IdProtocol, IntoPyObject, PyArithmaticValue::{self, *}, - PyClassImpl, PyComparisonValue, PyContext, PyObjectRef, PyRef, PyResult, PyValue, + PyClassImpl, PyComparisonValue, PyContext, PyObjectRef, PyRef, PyResult, PyValue, TypeProtocol, }; use crate::sequence::{self, SimpleSeq}; use crate::vm::{ReprGuard, VirtualMachine}; @@ -238,6 +238,10 @@ impl PyTuple { vm: &VirtualMachine, ) -> PyResult { let elements = if let OptionalArg::Present(iterable) = iterable { + if iterable.lease_class().is(&cls) { + return Ok(PyRef::from_obj_unchecked(iterable)); + } + vm.extract_elements(&iterable)? } else { vec![]