diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/lib.rs | 38 |
1 files changed, 37 insertions, 1 deletions
@@ -446,7 +446,7 @@ struct CoolLayoutError; mod tests { use std::mem::offset_of; - use std::ptr::drop_in_place; + use std::ptr::{drop_in_place, NonNull}; use crate::{Item, ItemFieldMetadata, ItemFieldSelection, MultiVec}; @@ -609,4 +609,40 @@ mod tests [654, u16::MAX / 7] ); } + + #[test] + fn get_works() + { + let mut multi_vec = MultiVec::<Foo>::new(); + + #[repr(packed)] + #[allow(dead_code)] + struct Data + { + num_a: [u32; 3], + num_b: [u16; 3], + } + + let data = Data { + num_a: [u32::MAX - 3000, 901, 5560000], + num_b: [20210, 7120, 1010], + }; + + multi_vec.ptr = NonNull::from(&data).cast(); + multi_vec.field_arr_byte_offsets = vec![0, size_of::<u32>() * 3]; + multi_vec.length = 3; + multi_vec.capacity = 3; + + assert_eq!( + multi_vec.get::<FooFieldNumA>(0).copied(), + Some(u32::MAX - 3000) + ); + assert_eq!(multi_vec.get::<FooFieldNumB>(0).copied(), Some(20210)); + + assert_eq!(multi_vec.get::<FooFieldNumA>(1).copied(), Some(901)); + assert_eq!(multi_vec.get::<FooFieldNumB>(1).copied(), Some(7120)); + + assert_eq!(multi_vec.get::<FooFieldNumA>(2).copied(), Some(5560000)); + assert_eq!(multi_vec.get::<FooFieldNumB>(2).copied(), Some(1010)); + } } |