From 03e4509aec040739af5f82e1e1c0935fe5c72153 Mon Sep 17 00:00:00 2001 From: soruh Date: Sun, 26 Jul 2026 14:49:00 +0200 Subject: [PATCH] add more tests --- src/lib.rs | 3 ++- src/tests.rs | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/lib.rs b/src/lib.rs index 5bba2b3..ae76a85 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -132,7 +132,8 @@ impl TypeErasedVec { let layout = self.layout; let res = self.try_as_type(); - if cfg!(debug_assertions) && res.is_none() { + #[cfg(debug_assertions)] + if res.is_none() { unreachable!( "Calling `as_type_unchecked` with an incompatible layout is UB! Target type layout must exactly match the erased layout. Capacity is reserved for {:?} but {} has {:?}", layout, diff --git a/src/tests.rs b/src/tests.rs index d5b03fb..d0dd2cb 100644 --- a/src/tests.rs +++ b/src/tests.rs @@ -368,3 +368,21 @@ fn test_multiple_compatible_type_casts() { let restored = unsafe { erased.cast_into_vec::() }; assert_eq!(restored, vec![-1, 42]); } + +#[test] +fn test_cast_and_clear() { + let mut vec = Vec::::new(); + vec.push(-1); + let mut erased = TypeErasedVec::new(vec); + + { + let mut guard = unsafe { erased.cast_type::() }; + assert_eq!(guard.as_slice(), &[u32::MAX]); + guard.clear(); + guard.push(u32::MAX - 1); + guard.push(42); + } + + let restored = unsafe { erased.cast_into_vec::() }; + assert_eq!(restored, vec![-2, 42]); +}