picori/helper/
alignment.rs

1pub 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// -------------------------------------------------------------------------------
17// Tests
18// -------------------------------------------------------------------------------
19
20#[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}