From 24c8b35725a1bb4faf511c992c0e4a6346cb75f7 Mon Sep 17 00:00:00 2001 From: HampusM Date: Fri, 28 Mar 2025 14:36:59 +0100 Subject: test: add & improve push tests --- src/lib.rs | 75 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 74 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/lib.rs b/src/lib.rs index 175eef9..c662c17 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -846,7 +846,7 @@ mod tests } #[test] - fn push_all_unsized_fields_work() + fn push_with_all_unsized_fields_works() { struct UnsizedThing; @@ -854,6 +854,79 @@ mod tests multi_vec.push([OwnedAnyPtr::new(()), OwnedAnyPtr::new(UnsizedThing)]); multi_vec.push([OwnedAnyPtr::new(()), OwnedAnyPtr::new(UnsizedThing)]); + + assert_eq!(multi_vec.field_arr_byte_offsets, [0, 0]); + } + + #[test] + fn push_with_some_unsized_fields_works() + { + struct UnsizedThing; + + #[derive(Debug, PartialEq, Eq)] + struct CustomerName + { + name: &'static str, + } + + #[derive(Debug, PartialEq, Eq)] + struct CustomerAge + { + age: u8, + } + + let mut multi_vec = MultiVec::new(); + + multi_vec.push([ + OwnedAnyPtr::new(CustomerName { name: "Bob Vance" }), + OwnedAnyPtr::new(UnsizedThing), + OwnedAnyPtr::new(CustomerAge { age: 54 }), + ]); + + multi_vec.push([ + OwnedAnyPtr::new(CustomerName { name: "Andy Bernard" }), + OwnedAnyPtr::new(UnsizedThing), + OwnedAnyPtr::new(CustomerAge { age: 40 }), + ]); + + assert_eq!(multi_vec.capacity, 4); + assert_eq!(multi_vec.length, 2); + + assert_eq!( + multi_vec.field_arr_byte_offsets, + [ + 0, + size_of::() * multi_vec.capacity, + size_of::() * multi_vec.capacity, + ] + ); + + assert_eq!( + unsafe { + std::slice::from_raw_parts::( + multi_vec.ptr.as_ptr().cast(), + 2, + ) + }, + [ + CustomerName { name: "Bob Vance" }, + CustomerName { name: "Andy Bernard" } + ] + ); + + assert_eq!( + unsafe { + std::slice::from_raw_parts::( + multi_vec + .ptr + .as_ptr() + .byte_add(multi_vec.field_arr_byte_offsets[2]) + .cast(), + 2, + ) + }, + [CustomerAge { age: 54 }, CustomerAge { age: 40 }] + ); } //#[test] -- cgit v1.2.3-18-g5258