Expand description

RoundToMultipleOfPowerOf2 and RoundToMultipleOfPowerOf2Assign, traits for rounding a number to a multiple of a power of 2.

§round_to_multiple_of_power_of_2

use malachite_base::num::arithmetic::traits::RoundToMultipleOfPowerOf2;
use malachite_base::rounding_modes::RoundingMode;
use std::cmp::Ordering;

assert_eq!(10u8.round_to_multiple_of_power_of_2(2, RoundingMode::Floor), (8, Ordering::Less));
assert_eq!(
    10u8.round_to_multiple_of_power_of_2(2, RoundingMode::Ceiling),
    (12, Ordering::Greater)
);
assert_eq!(10u8.round_to_multiple_of_power_of_2(2, RoundingMode::Down), (8, Ordering::Less));
assert_eq!(10u8.round_to_multiple_of_power_of_2(2, RoundingMode::Up), (12, Ordering::Greater));
assert_eq!(
    10u8.round_to_multiple_of_power_of_2(2, RoundingMode::Nearest),
    (8, Ordering::Less)
);
assert_eq!(
    12u8.round_to_multiple_of_power_of_2(2, RoundingMode::Exact),
    (12, Ordering::Equal)
);

assert_eq!(
    (-10i8).round_to_multiple_of_power_of_2(2, RoundingMode::Floor),
    (-12, Ordering::Less)
);
assert_eq!(
    (-10i8).round_to_multiple_of_power_of_2(2, RoundingMode::Ceiling),
    (-8, Ordering::Greater)
);
assert_eq!(
    (-10i8).round_to_multiple_of_power_of_2(2, RoundingMode::Down),
    (-8, Ordering::Greater)
);
assert_eq!(
    (-10i8).round_to_multiple_of_power_of_2(2, RoundingMode::Up),
    (-12, Ordering::Less)
);
assert_eq!(
    (-10i8).round_to_multiple_of_power_of_2(2, RoundingMode::Nearest),
    (-8, Ordering::Greater)
);
assert_eq!(
    (-12i8).round_to_multiple_of_power_of_2(2, RoundingMode::Exact),
    (-12, Ordering::Equal)
);

§round_to_multiple_of_power_of_2_assign

use malachite_base::num::arithmetic::traits::RoundToMultipleOfPowerOf2Assign;
use malachite_base::rounding_modes::RoundingMode;
use std::cmp::Ordering;

let mut x = 10u8;
assert_eq!(x.round_to_multiple_of_power_of_2_assign(2, RoundingMode::Floor), Ordering::Less);
assert_eq!(x, 8);

let mut x = 10u8;
assert_eq!(
    x.round_to_multiple_of_power_of_2_assign(2, RoundingMode::Ceiling),
    Ordering::Greater
);
assert_eq!(x, 12);

let mut x = 10u8;
assert_eq!(x.round_to_multiple_of_power_of_2_assign(2, RoundingMode::Down), Ordering::Less);
assert_eq!(x, 8);

let mut x = 10u8;
assert_eq!(x.round_to_multiple_of_power_of_2_assign(2, RoundingMode::Up), Ordering::Greater);
assert_eq!(x, 12);

let mut x = 10u8;
assert_eq!(x.round_to_multiple_of_power_of_2_assign(2, RoundingMode::Nearest), Ordering::Less);
assert_eq!(x, 8);

let mut x = 12u8;
assert_eq!(x.round_to_multiple_of_power_of_2_assign(2, RoundingMode::Exact), Ordering::Equal);
assert_eq!(x, 12);

let mut x = -10i8;
assert_eq!(x.round_to_multiple_of_power_of_2_assign(2, RoundingMode::Floor), Ordering::Less);
assert_eq!(x, -12);

let mut x = -10i8;
assert_eq!(
    x.round_to_multiple_of_power_of_2_assign(2, RoundingMode::Ceiling),
    Ordering::Greater
);
assert_eq!(x, -8);

let mut x = -10i8;
assert_eq!(x.round_to_multiple_of_power_of_2_assign(2, RoundingMode::Down), Ordering::Greater);
assert_eq!(x, -8);

let mut x = -10i8;
assert_eq!(x.round_to_multiple_of_power_of_2_assign(2, RoundingMode::Up), Ordering::Less);
assert_eq!(x, -12);

let mut x = -10i8;
assert_eq!(
    x.round_to_multiple_of_power_of_2_assign(2, RoundingMode::Nearest),
    Ordering::Greater
);
assert_eq!(x, -8);

let mut x = -12i8;
assert_eq!(x.round_to_multiple_of_power_of_2_assign(2, RoundingMode::Exact), Ordering::Equal);
assert_eq!(x, -12);