solana_stable_layout/
stable_slice.rs1#[cfg(test)]
4mod tests {
5 use std::mem::{align_of, size_of};
6
7 #[test]
8 fn test_memory_layout() {
9 assert_eq!(align_of::<&[i32]>(), 8);
10 assert_eq!(size_of::<&[i32]>(), 8 + 8);
11
12 let array = [11, 22, 33, 44, 55];
13 let slice = array.as_slice();
14
15 let addr_slice = &slice as *const _ as usize;
16 let addr_ptr = addr_slice;
17 let addr_len = addr_slice + 8;
18 assert_eq!(unsafe { *(addr_len as *const usize) }, 5);
19
20 let ptr_data = addr_ptr as *const *const i32;
21 assert_eq!(unsafe { *((*ptr_data).offset(0)) }, 11);
22 assert_eq!(unsafe { *((*ptr_data).offset(1)) }, 22);
23 assert_eq!(unsafe { *((*ptr_data).offset(2)) }, 33);
24 assert_eq!(unsafe { *((*ptr_data).offset(3)) }, 44);
25 assert_eq!(unsafe { *((*ptr_data).offset(4)) }, 55);
26 }
27}