picori/helper/
alignment.rs1pub trait AlignPowerOfTwo {
2 fn align_next(self, alignment: u32) -> Self;
3}
4
5impl AlignPowerOfTwo for u32 {
6 fn align_next(self, alignment: u32) -> Self {
7 assert!(
8 alignment.is_power_of_two(),
9 "alignment must be a power of two"
10 );
11 let alignment = alignment - 1;
12 self.wrapping_add(alignment) & !alignment
13 }
14}
15
16#[cfg(test)]
21mod tests {
22 use super::*;
23
24 #[test]
25 fn align_32() {
26 assert_eq!(0u32.align_next(32), 0);
27 assert_eq!(31u32.align_next(32), 32);
28 assert_eq!(32u32.align_next(32), 32);
29 }
30
31 #[test]
32 #[should_panic]
33 fn align_0() { 0u32.align_next(0); }
34
35 #[test]
36 #[should_panic]
37 fn align_non_power_of_two() { 0u32.align_next(3); }
38}