From 2eafd099d46cb7af987b9b5c7ba7ccb6bab7683a Mon Sep 17 00:00:00 2001 From: Yota Toyama Date: Sun, 31 Aug 2025 21:55:22 -0700 Subject: [PATCH 1/3] Fix --- src/array_queue.rs | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/array_queue.rs b/src/array_queue.rs index 4aadc8b..446ea8b 100644 --- a/src/array_queue.rs +++ b/src/array_queue.rs @@ -594,4 +594,21 @@ mod test { assert_eq!(unsafe { BAR_SUM }, 32); } + + #[test] + fn pop_back_from_middle() { + let mut xs = ArrayQueue::, 42>::new(); + + for x in 0..42 { + assert!(xs.push_back(Box::new(x)).is_ok()); + } + + for _ in 0..17 { + xs.pop_front(); + } + + for x in 42..17 { + assert_eq!(xs.pop_back(), Some(Box::new(x - 1))); + } + } } From 77c74a2e118bd0dcc0878d8c7be6f810d9780187 Mon Sep 17 00:00:00 2001 From: Yota Toyama Date: Sun, 31 Aug 2025 21:56:49 -0700 Subject: [PATCH 2/3] fix --- src/array_queue.rs | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/array_queue.rs b/src/array_queue.rs index 446ea8b..e78619f 100644 --- a/src/array_queue.rs +++ b/src/array_queue.rs @@ -597,17 +597,20 @@ mod test { #[test] fn pop_back_from_middle() { - let mut xs = ArrayQueue::, 42>::new(); + const LENGTH: usize = 42; + const MIDDLE: usize = 17; - for x in 0..42 { + let mut xs = ArrayQueue::, LENGTH>::new(); + + for x in 0..LENGTH { assert!(xs.push_back(Box::new(x)).is_ok()); } - for _ in 0..17 { + for _ in 0..MIDDLE { xs.pop_front(); } - for x in 42..17 { + for x in LENGTH..MIDDLE { assert_eq!(xs.pop_back(), Some(Box::new(x - 1))); } } From a16a54cc4d87ee0a54693d381cb93edf80fcf930 Mon Sep 17 00:00:00 2001 From: Yota Toyama Date: Sun, 31 Aug 2025 21:57:51 -0700 Subject: [PATCH 3/3] Fix --- src/array_queue.rs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/array_queue.rs b/src/array_queue.rs index e78619f..f890b4b 100644 --- a/src/array_queue.rs +++ b/src/array_queue.rs @@ -99,7 +99,7 @@ impl ArrayQueue { if self.is_empty() { None } else { - let x = replace(&mut self.array[self.start], MaybeUninit::uninit()); + let x = replace(&mut self.array[self.index(0)], MaybeUninit::uninit()); self.start = self.index(1); self.length -= 1; @@ -113,7 +113,10 @@ impl ArrayQueue { if self.is_empty() { None } else { - let x = replace(&mut self.array[self.length - 1], MaybeUninit::uninit()); + let x = replace( + &mut self.array[self.index(self.length - 1)], + MaybeUninit::uninit(), + ); self.length -= 1; // SAFETY: An element exists at the last index.