From a95df8ba6164ff77edf6033ad91e289accd2016a Mon Sep 17 00:00:00 2001 From: David Spies Date: Tue, 9 Jul 2024 15:13:37 -0700 Subject: [PATCH] Fix size bug and add test for it --- src/lib.rs | 9 ++++----- tests/test.rs | 10 ++++++++++ 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index f0ab4e5..eafc907 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -954,11 +954,10 @@ impl IndexList { } #[inline] fn remove_elem_at_index(&mut self, this: ListIndex) -> Option { - this.get() - .and_then(|at| { - self.size -= 1; - self.elems[at].take() - }) + let at = this.get()?; + let removed = self.elems[at].take()?; + self.size -= 1; + Some(removed) } fn new_node(&mut self, elem: Option) -> ListIndex { let reuse = self.free.head; diff --git a/tests/test.rs b/tests/test.rs index d6306c8..0d505dc 100644 --- a/tests/test.rs +++ b/tests/test.rs @@ -161,6 +161,16 @@ fn test_single_element() { assert_eq!(list.len(), 0); } #[test] +fn test_remove_element_twice() { + let mut list = IndexList::::new(); + let index = list.insert_first(0); + let removed1 = list.remove(index); + assert_eq!(removed1, Some(0)); + let removed2 = list.remove(index); + assert_eq!(removed2, None); + assert_eq!(list.len(), 0); +} +#[test] fn insert_remove_variants() { let count = 256; let mut rng = rand::thread_rng();