From 813a55b9308dcc531d77c782db3b934695170c95 Mon Sep 17 00:00:00 2001 From: soruh Date: Fri, 31 Jul 2026 04:24:06 +0200 Subject: [PATCH] Cover scoped guard lifecycle --- src/tests.rs | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/src/tests.rs b/src/tests.rs index 49f80a5..db7a1f0 100644 --- a/src/tests.rs +++ b/src/tests.rs @@ -860,6 +860,38 @@ fn test_scoped_borrowed_zst_behavior() { assert_eq!(erased.capacity(), usize::MAX); } +#[test] +fn test_scoped_guard_reserve_restore_and_take() { + let first = String::from("first"); + let second = String::from("second"); + let mut erased = TypeErasedVec::new(Vec::<&'static str>::new()); + + { + let mut guard = erased.as_type_scoped::<&str>(); + guard.reserve(4); + assert!(guard.capacity() >= 4); + + guard.with(|values| { + values.push(&first); + values.push(&second); + }); + assert_eq!(guard.as_slice(), &["first", "second"]); + + let retained_ptr = guard.as_slice().as_ptr(); + let retained_capacity = guard.capacity(); + let taken = guard.take(); + + assert_eq!(taken, vec!["first", "second"]); + assert_eq!(taken.as_ptr(), retained_ptr); + assert_eq!(taken.capacity(), retained_capacity); + assert_guard_state(&guard, 0); + assert_eq!(guard.capacity(), 0); + } + + assert!(erased.is_empty()); + assert_eq!(erased.capacity(), 0); +} + #[test] fn test_unchecked_methods() { let vec = vec![123_u32];