Expand description

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::num::arithmetic::traits::ShlRound;
use malachite_base::rounding_modes::RoundingMode;

assert_eq!(0x101u16.shl_round(-8i8, RoundingMode::Down), 1);
assert_eq!(0x101u32.shl_round(-8i16, RoundingMode::Up), 2);

assert_eq!((-0x101i16).shl_round(-9i32, RoundingMode::Down), 0);
assert_eq!((-0x101i32).shl_round(-9i64, RoundingMode::Up), -1);
assert_eq!((-0x101i64).shl_round(-9i8, RoundingMode::Nearest), -1);
assert_eq!((-0xffi32).shl_round(-9i16, RoundingMode::Nearest), 0);
assert_eq!((-0x100i16).shl_round(-9i32, RoundingMode::Nearest), 0);

assert_eq!(0x100u64.shl_round(-8i64, RoundingMode::Exact), 1);

shl_round_assign

use malachite_base::num::arithmetic::traits::ShlRoundAssign;
use malachite_base::rounding_modes::RoundingMode;

let mut x = 0x101u16;
x.shl_round_assign(-8i8, RoundingMode::Down);
assert_eq!(x, 1);

let mut x = 0x101u32;
x.shl_round_assign(-8i16, RoundingMode::Up);
assert_eq!(x, 2);

let mut x = -0x101i16;
x.shl_round_assign(-9i32, RoundingMode::Down);
assert_eq!(x, 0);

let mut x = -0x101i32;
x.shl_round_assign(-9i64, RoundingMode::Up);
assert_eq!(x, -1);

let mut x = -0x101i64;
x.shl_round_assign(-9i8, RoundingMode::Nearest);
assert_eq!(x, -1);

let mut x = -0xffi32;
x.shl_round_assign(-9i16, RoundingMode::Nearest);
assert_eq!(x, 0);

let mut x = -0x100i16;
x.shl_round_assign(-9i32, RoundingMode::Nearest);
assert_eq!(x, 0);

let mut x = 0x100u64;
x.shl_round_assign(-8i64, RoundingMode::Exact);
assert_eq!(x, 1);