Skip to content

Commit ed51217

Browse files
committed
Test aligment of Complex
1 parent 5bcc6b0 commit ed51217

File tree

1 file changed

+20
-0
lines changed

1 file changed

+20
-0
lines changed

hdf5-types/src/complex.rs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,30 @@ unsafe impl<T: H5Type> H5Type for Complex<T> {
2121
mod tests {
2222
use super::*;
2323
use num_complex::{Complex32, Complex64};
24+
use std::mem::size_of_val;
2425

2526
#[test]
2627
fn complex() {
2728
assert_eq!(Complex32::type_descriptor().size(), 8);
29+
assert_eq!(Complex32::type_descriptor().size(), size_of::<Complex32>());
2830
assert_eq!(Complex64::type_descriptor().size(), 16);
31+
assert_eq!(Complex64::type_descriptor().size(), size_of::<Complex64>());
32+
}
33+
34+
#[test]
35+
fn alignment() {
36+
use std::ptr::addr_of;
37+
38+
let a = Complex { re: 0.0, im: 1.0 };
39+
40+
assert_eq!(size_of_val(&a), size_of_val(&a.re) + size_of_val(&a.im));
41+
assert_eq!(size_of_val(&a.re), size_of_val(&a.im));
42+
43+
let base: *const u8 = addr_of!(a).cast::<u8>();
44+
let ptr_r = addr_of!(a.re).cast::<u8>();
45+
let ptr_i = addr_of!(a.im).cast::<u8>();
46+
47+
assert_eq!(unsafe { ptr_r.offset_from(base) }, 0);
48+
assert_eq!(unsafe { ptr_i.offset_from(base) }, size_of_val(&a.re) as isize);
2949
}
3050
}

0 commit comments

Comments
 (0)