4 use std::mem::{size_of, align_of};
73 enum Ei64NonCLike<T> {
79 enum Eu64NonCLike<T> {
85 assert_eq!(size_of::<Ei8>(), 1);
86 assert_eq!(size_of::<Eu8>(), 1);
87 assert_eq!(size_of::<Ei16>(), 2);
88 assert_eq!(size_of::<Eu16>(), 2);
89 assert_eq!(size_of::<Ei32>(), 4);
90 assert_eq!(size_of::<Eu32>(), 4);
91 assert_eq!(size_of::<Ei64>(), 8);
92 assert_eq!(size_of::<Eu64>(), 8);
93 assert_eq!(size_of::<Eint>(), size_of::<isize>());
94 assert_eq!(size_of::<Euint>(), size_of::<usize>());
95 assert_eq!(size_of::<Eu8NonCLike<()>>(), 1);
96 assert_eq!(size_of::<Ei64NonCLike<()>>(), 8);
97 assert_eq!(size_of::<Eu64NonCLike<()>>(), 8);
98 let u8_expected_size = round_up(9, align_of::<Eu64NonCLike<u8>>());
99 assert_eq!(size_of::<Eu64NonCLike<u8>>(), u8_expected_size);
100 let array_expected_size = round_up(28, align_of::<Eu64NonCLike<[u32; 5]>>());
101 assert_eq!(size_of::<Eu64NonCLike<[u32; 5]>>(), array_expected_size);
102 assert_eq!(size_of::<Eu64NonCLike<[u32; 6]>>(), 32);
104 assert_eq!(align_of::<Eu32>(), align_of::<u32>());
105 assert_eq!(align_of::<Eu64NonCLike<u8>>(), align_of::<u64>());
108 // Rounds x up to the next multiple of a
109 fn round_up(x: usize, a: usize) -> usize {
110 ((x + (a - 1)) / a) * a