diff --git a/Lib/test/test_deque.py b/Lib/test/test_deque.py index cc70a0300..d469fa04e 100644 --- a/Lib/test/test_deque.py +++ b/Lib/test/test_deque.py @@ -436,7 +436,6 @@ class TestBasic(unittest.TestCase): self.assertEqual(list(d), data[:i]) self.assertRaises(TypeError, d.reverse, 1) # Arity is zero - @unittest.skip("TODO: RUSTPYTHON panics") def test_rotate(self): s = tuple('abcde') n = len(s) diff --git a/vm/src/stdlib/collections.rs b/vm/src/stdlib/collections.rs index 272e6ec29..2c61f5d9e 100644 --- a/vm/src/stdlib/collections.rs +++ b/vm/src/stdlib/collections.rs @@ -374,11 +374,13 @@ mod _collections { fn rotate(&self, mid: OptionalArg) { self.state.fetch_add(1); let mut deque = self.borrow_deque_mut(); - let mid = mid.unwrap_or(1); - if mid < 0 { - deque.rotate_left(-mid as usize); - } else { - deque.rotate_right(mid as usize); + if !deque.is_empty() { + let mid = mid.unwrap_or(1) % deque.len() as isize; + if mid.is_negative() { + deque.rotate_left(-mid as usize); + } else { + deque.rotate_right(mid as usize); + } } }