diff --git a/Lib/test/test_deque.py b/Lib/test/test_deque.py index 77a2c9e707..b87e4f716f 100644 --- a/Lib/test/test_deque.py +++ b/Lib/test/test_deque.py @@ -355,8 +355,6 @@ def test_insert_bug_26194(self): else: self.assertEqual(d[i-1], 'Z') - # TODO: RUSTPYTHON - @unittest.expectedFailure def test_imul(self): for n in (-10, -1, 0, 1, 2, 10, 1000): d = deque() @@ -388,8 +386,6 @@ def test_imul(self): self.assertEqual(d, deque(('abcdef' * n)[-500:])) self.assertEqual(d.maxlen, 500) - # TODO: RUSTPYTHON - @unittest.expectedFailure def test_mul(self): d = deque('abc') self.assertEqual(d * -5, deque()) @@ -1003,11 +999,11 @@ def test_subscript(self): def test_free_after_iterating(self): # For now, bypass tests that require slicing self.skipTest("Exhausted deque iterator doesn't free a deque") - + @unittest.skip("TODO: RUSTPYTHON TypeError: unexpected payload for __eq__") def test_pickle(self): pass - + def test_iadd(self): pass diff --git a/vm/src/stdlib/collections.rs b/vm/src/stdlib/collections.rs index df6530bc1a..d3f8778bd3 100644 --- a/vm/src/stdlib/collections.rs +++ b/vm/src/stdlib/collections.rs @@ -303,14 +303,16 @@ mod _collections { } #[pymethod(magic)] + #[pymethod(name = "__rmul__")] fn mul(&self, n: isize) -> Self { let deque: SimpleSeqDeque = self.borrow_deque().into(); let mul = sequence::seq_mul(&deque, n); - let skipped = if let Some(maxlen) = self.maxlen.load() { - mul.len() - maxlen - } else { - 0 - }; + let skipped = self + .maxlen + .load() + .and_then(|maxlen| mul.len().checked_sub(maxlen)) + .unwrap_or(0); + let deque = mul.skip(skipped).cloned().collect(); PyDeque { deque: PyRwLock::new(deque),