summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorHampusM <hampus@hampusmat.com>2025-03-28 14:36:59 +0100
committerHampusM <hampus@hampusmat.com>2025-03-28 14:37:06 +0100
commit24c8b35725a1bb4faf511c992c0e4a6346cb75f7 (patch)
treeeb172ea555191dc04b0e0d3d2586735eb338f160 /src
parent11ba9c8430069a7b8f3b86cc0071740e582a12c2 (diff)
test: add & improve push testsHEADmaster
Diffstat (limited to 'src')
-rw-r--r--src/lib.rs75
1 files changed, 74 insertions, 1 deletions
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::<CustomerName>() * multi_vec.capacity,
+ size_of::<CustomerName>() * multi_vec.capacity,
+ ]
+ );
+
+ assert_eq!(
+ unsafe {
+ std::slice::from_raw_parts::<CustomerName>(
+ multi_vec.ptr.as_ptr().cast(),
+ 2,
+ )
+ },
+ [
+ CustomerName { name: "Bob Vance" },
+ CustomerName { name: "Andy Bernard" }
+ ]
+ );
+
+ assert_eq!(
+ unsafe {
+ std::slice::from_raw_parts::<CustomerAge>(
+ multi_vec
+ .ptr
+ .as_ptr()
+ .byte_add(multi_vec.field_arr_byte_offsets[2])
+ .cast(),
+ 2,
+ )
+ },
+ [CustomerAge { age: 54 }, CustomerAge { age: 40 }]
+ );
}
//#[test]