Module malachite_nz::natural::arithmetic::shl_round

source ·
Expand description

Implementations of ShlRound and ShlRoundAssign, traits for multiplying a number by a power of 2 and rounding according to a specified RoundingMode.

§shl_round

use malachite_base::rounding_modes::RoundingMode;
use malachite_base::num::arithmetic::traits::ShlRound;
use malachite_base::num::basic::traits::Zero;
use malachite_base::strings::ToDebugString;
use malachite_nz::natural::Natural;

assert_eq!(
    Natural::from(0x101u32).shl_round(-8i8, RoundingMode::Down).to_debug_string(),
    "(1, Less)"
);
assert_eq!(
    Natural::from(0x101u32).shl_round(-8i16, RoundingMode::Up).to_debug_string(),
    "(2, Greater)"
);
assert_eq!(
    Natural::from(0x101u32).shl_round(-9i32, RoundingMode::Down).to_debug_string(),
    "(0, Less)"
);
assert_eq!(
    Natural::from(0x101u32).shl_round(-9i64, RoundingMode::Up).to_debug_string(),
    "(1, Greater)"
);
assert_eq!(
    Natural::from(0x101u32).shl_round(-9i8, RoundingMode::Nearest).to_debug_string(),
    "(1, Greater)"
);
assert_eq!(
    Natural::from(0xffu32).shl_round(-9i16, RoundingMode::Nearest).to_debug_string(),
    "(0, Less)"
);
assert_eq!(
    Natural::from(0x100u32).shl_round(-9i32, RoundingMode::Nearest).to_debug_string(),
    "(0, Less)"
);
assert_eq!(
    Natural::from(0x100u32).shl_round(-8i64, RoundingMode::Exact).to_debug_string(),
    "(1, Equal)"
);
assert_eq!(Natural::ZERO.shl_round(10i8, RoundingMode::Exact).to_debug_string(), "(0, Equal)");
assert_eq!(
    Natural::from(123u32).shl_round(2i16, RoundingMode::Exact).to_debug_string(),
    "(492, Equal)"
);
assert_eq!(
    Natural::from(123u32).shl_round(100i32, RoundingMode::Exact).to_debug_string(),
    "(155921023828072216384094494261248, Equal)"
);

assert_eq!(
    (&Natural::from(0x101u32)).shl_round(-8i8, RoundingMode::Down).to_debug_string(),
    "(1, Less)"
);
assert_eq!(
    (&Natural::from(0x101u32)).shl_round(-8i16, RoundingMode::Up).to_debug_string(),
    "(2, Greater)"
);
assert_eq!(
    (&Natural::from(0x101u32)).shl_round(-9i32, RoundingMode::Down).to_debug_string(),
    "(0, Less)"
);
assert_eq!(
    (&Natural::from(0x101u32)).shl_round(-9i64, RoundingMode::Up).to_debug_string(),
    "(1, Greater)"
);
assert_eq!(
    (&Natural::from(0x101u32)).shl_round(-9i8, RoundingMode::Nearest).to_debug_string(),
    "(1, Greater)"
);
assert_eq!(
    (&Natural::from(0xffu32)).shl_round(-9i16, RoundingMode::Nearest).to_debug_string(),
    "(0, Less)"
);
assert_eq!(
    (&Natural::from(0x100u32)).shl_round(-9i32, RoundingMode::Nearest).to_debug_string(),
    "(0, Less)"
);
assert_eq!(
    (&Natural::from(0x100u32)).shl_round(-8i64, RoundingMode::Exact).to_debug_string(),
    "(1, Equal)"
);
assert_eq!(
    (&Natural::ZERO).shl_round(10i8, RoundingMode::Exact).to_debug_string(),
    "(0, Equal)"
);
assert_eq!(
    (&Natural::from(123u32)).shl_round(2i16, RoundingMode::Exact).to_debug_string(),
    "(492, Equal)"
);
assert_eq!(
    (&Natural::from(123u32)).shl_round(100i32, RoundingMode::Exact).to_debug_string(),
    "(155921023828072216384094494261248, Equal)"
);

§shl_round_assign

use malachite_base::rounding_modes::RoundingMode;
use malachite_base::num::arithmetic::traits::ShlRoundAssign;
use malachite_base::num::basic::traits::One;
use malachite_nz::natural::Natural;
use core::cmp::Ordering;

let mut n = Natural::from(0x101u32);
assert_eq!(n.shl_round_assign(-8i8, RoundingMode::Down), Ordering::Less);
assert_eq!(n, 1);

let mut n = Natural::from(0x101u32);
assert_eq!(n.shl_round_assign(-8i16, RoundingMode::Up), Ordering::Greater);
assert_eq!(n, 2);

let mut n = Natural::from(0x101u32);
assert_eq!(n.shl_round_assign(-9i32, RoundingMode::Down), Ordering::Less);
assert_eq!(n, 0);

let mut n = Natural::from(0x101u32);
assert_eq!(n.shl_round_assign(-9i64, RoundingMode::Up), Ordering::Greater);
assert_eq!(n, 1);

let mut n = Natural::from(0x101u32);
assert_eq!(n.shl_round_assign(-9i8, RoundingMode::Nearest), Ordering::Greater);
assert_eq!(n, 1);

let mut n = Natural::from(0xffu32);
assert_eq!(n.shl_round_assign(-9i16, RoundingMode::Nearest), Ordering::Less);
assert_eq!(n, 0);

let mut n = Natural::from(0x100u32);
assert_eq!(n.shl_round_assign(-9i32, RoundingMode::Nearest), Ordering::Less);
assert_eq!(n, 0);

let mut n = Natural::from(0x100u32);
assert_eq!(n.shl_round_assign(-8i64, RoundingMode::Exact), Ordering::Equal);
assert_eq!(n, 1);

let mut x = Natural::ONE;
assert_eq!(x.shl_round_assign(1i8, RoundingMode::Exact), Ordering::Equal);
assert_eq!(x.shl_round_assign(2i16, RoundingMode::Exact), Ordering::Equal);
assert_eq!(x.shl_round_assign(3i32, RoundingMode::Exact), Ordering::Equal);
assert_eq!(x.shl_round_assign(4i64, RoundingMode::Exact), Ordering::Equal);
assert_eq!(x, 1024);