Skip to content

Commit 0906728

Browse files
authored
Adds __rmul__ to collections.deque (RustPython#2844)
* Adds `__rmul__` to `collections.deque`, refs RustPython#2834
1 parent cae4113 commit 0906728

File tree

2 files changed

+9
-11
lines changed

2 files changed

+9
-11
lines changed

Lib/test/test_deque.py

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -355,8 +355,6 @@ def test_insert_bug_26194(self):
355355
else:
356356
self.assertEqual(d[i-1], 'Z')
357357

358-
# TODO: RUSTPYTHON
359-
@unittest.expectedFailure
360358
def test_imul(self):
361359
for n in (-10, -1, 0, 1, 2, 10, 1000):
362360
d = deque()
@@ -388,8 +386,6 @@ def test_imul(self):
388386
self.assertEqual(d, deque(('abcdef' * n)[-500:]))
389387
self.assertEqual(d.maxlen, 500)
390388

391-
# TODO: RUSTPYTHON
392-
@unittest.expectedFailure
393389
def test_mul(self):
394390
d = deque('abc')
395391
self.assertEqual(d * -5, deque())
@@ -1003,11 +999,11 @@ def test_subscript(self):
1003999
def test_free_after_iterating(self):
10041000
# For now, bypass tests that require slicing
10051001
self.skipTest("Exhausted deque iterator doesn't free a deque")
1006-
1002+
10071003
@unittest.skip("TODO: RUSTPYTHON TypeError: unexpected payload for __eq__")
10081004
def test_pickle(self):
10091005
pass
1010-
1006+
10111007
def test_iadd(self):
10121008
pass
10131009

vm/src/stdlib/collections.rs

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -303,14 +303,16 @@ mod _collections {
303303
}
304304

305305
#[pymethod(magic)]
306+
#[pymethod(name = "__rmul__")]
306307
fn mul(&self, n: isize) -> Self {
307308
let deque: SimpleSeqDeque = self.borrow_deque().into();
308309
let mul = sequence::seq_mul(&deque, n);
309-
let skipped = if let Some(maxlen) = self.maxlen.load() {
310-
mul.len() - maxlen
311-
} else {
312-
0
313-
};
310+
let skipped = self
311+
.maxlen
312+
.load()
313+
.and_then(|maxlen| mul.len().checked_sub(maxlen))
314+
.unwrap_or(0);
315+
314316
let deque = mul.skip(skipped).cloned().collect();
315317
PyDeque {
316318
deque: PyRwLock::new(deque),

0 commit comments

Comments
 (0)