From 7893c8325ff42ed6de97b4dcb5c803f2b436aeaf Mon Sep 17 00:00:00 2001 From: Rouven Spreckels Date: Wed, 4 May 2022 15:24:19 +0200 Subject: [PATCH 1/3] fix push_front --- src/meta.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/meta.rs b/src/meta.rs index 11d0d0f..664e0e8 100644 --- a/src/meta.rs +++ b/src/meta.rs @@ -140,7 +140,7 @@ pub trait Meta: Clone + Sized { MetaLayout::Linear { first: 0, len } => { self.set_layout(MetaLayout::Wrapped { - wrap_len: NonZeroUsize::new(1).unwrap(), + wrap_len: len, gap_len: self.capacity() - (len.get() + 1), }); From e2df4874aab7ea9ffb858d67a369ef9ab424bb11 Mon Sep 17 00:00:00 2001 From: Rouven Spreckels Date: Wed, 4 May 2022 15:24:41 +0200 Subject: [PATCH 2/3] test: add push_front/back_becomes_wrapped --- src/slice_deque.rs | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/src/slice_deque.rs b/src/slice_deque.rs index 89cc162..4ddd24f 100644 --- a/src/slice_deque.rs +++ b/src/slice_deque.rs @@ -1088,6 +1088,32 @@ mod tests { assert_eq!(deque.back(), Some(&42)); } + #[test] + fn push_front_becomes_wrapped() { + let mut slice = [0u32, 0, 0]; + let mut deque = SliceDeque::new_in(&mut slice); + + deque.push_back(42).unwrap(); + deque.push_back(73).unwrap(); + deque.push_front(37).unwrap(); + + assert_eq!(deque.front(), Some(&37)); + assert_eq!(deque.back(), Some(&73)); + } + + #[test] + fn push_back_becomes_wrapped() { + let mut slice = [0u32, 0, 0]; + let mut deque = SliceDeque::new_in(&mut slice); + + deque.push_front(42).unwrap(); + deque.push_front(73).unwrap(); + deque.push_back(37).unwrap(); + + assert_eq!(deque.front(), Some(&73)); + assert_eq!(deque.back(), Some(&37)); + } + #[test] fn push_both_ends_front_back() { let mut slice = ["", "", ""]; From d2cadfef3b3aa8ee2d3775fb5b261531f33c6799 Mon Sep 17 00:00:00 2001 From: Rouven Spreckels Date: Wed, 4 May 2022 15:30:02 +0200 Subject: [PATCH 3/3] support stable rust --- README.md | 7 ------- src/lib.rs | 8 -------- 2 files changed, 15 deletions(-) diff --git a/README.md b/README.md index 9564fa5..fe60563 100644 --- a/README.md +++ b/README.md @@ -7,13 +7,6 @@ Array- and slice-backed double-ended queues in 100% safe Rust. This crate provides `ArrayDeque` and `SliceDeque`, fixed-size ring buffers with interfaces similar to the standard library's `VecDeque`. -`holodeque` makes use of the unstable `array_map` feature to provide `Default` -initialization of arbitrarily-sized arrays. As a result, **a `nightly` compiler -is required until this feature is stabilized**. See the [tracking issue] for its -current status. - -[tracking issue]: https://github.com/rust-lang/rust/issues/75243 - ## License Licensed under either of diff --git a/src/lib.rs b/src/lib.rs index bc07153..15b19f4 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -3,14 +3,7 @@ //! This crate provides [`ArrayDeque`] and [`SliceDeque`], fixed-size ring //! buffers with interfaces similar to the standard library's [`VecDeque`]. //! -//! `holodeque` makes use of the unstable [`array_map`] feature to provide -//! `Default` initialization of arbitrarily-sized arrays. As a result, **a -//! `nightly` compiler is required until this feature is stabilized**. See the -//! [tracking issue] for its current status. -//! //! [`VecDeque`]: https://doc.rust-lang.org/std/collections/struct.VecDeque.html -//! [`array_map`]: https://doc.rust-lang.org/unstable-book/library-features/array-map.html -//! [tracking issue]: https://github.com/rust-lang/rust/issues/75243 //! //! # Example //! @@ -84,7 +77,6 @@ //! [`MaybeUninit`]: https://doc.rust-lang.org/core/mem/union.MaybeUninit.html //! [`tinyvec`]: https://docs.rs/tinyvec -#![feature(array_map)] #![forbid(unsafe_code)] #![warn(missing_docs)] #![cfg_attr(not(feature = "std"), no_std)]