Module malachite_nz::integer::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
extern crate malachite_base;
use malachite_base::rounding_modes::RoundingMode;
use malachite_base::num::arithmetic::traits::ShlRound;
use malachite_base::num::basic::traits::Zero;
use malachite_nz::integer::Integer;
assert_eq!(Integer::from(0x101).shl_round(-8i8, RoundingMode::Down), 1);
assert_eq!(Integer::from(0x101).shl_round(-8i16, RoundingMode::Up), 2);
assert_eq!(Integer::from(-0x101).shl_round(-9i32, RoundingMode::Down), 0);
assert_eq!(Integer::from(-0x101).shl_round(-9i64, RoundingMode::Up), -1);
assert_eq!(Integer::from(-0x101).shl_round(-9i8, RoundingMode::Nearest), -1);
assert_eq!(Integer::from(-0xff).shl_round(-9i16, RoundingMode::Nearest), 0);
assert_eq!(Integer::from(-0x100).shl_round(-9i32, RoundingMode::Nearest), 0);
assert_eq!(Integer::from(0x100).shl_round(-8i64, RoundingMode::Exact), 1);
assert_eq!(Integer::ZERO.shl_round(10i8, RoundingMode::Exact), 0);
assert_eq!(Integer::from(123u32).shl_round(2i16, RoundingMode::Exact), 492);
assert_eq!(
Integer::from(123u32).shl_round(100i32, RoundingMode::Exact).to_string(),
"155921023828072216384094494261248"
);
assert_eq!((&Integer::from(0x101)).shl_round(-8i8, RoundingMode::Down), 1);
assert_eq!((&Integer::from(0x101)).shl_round(-8i16, RoundingMode::Up), 2);
assert_eq!((&Integer::from(-0x101)).shl_round(-9i32, RoundingMode::Down), 0);
assert_eq!((&Integer::from(-0x101)).shl_round(-9i64, RoundingMode::Up), -1);
assert_eq!((&Integer::from(-0x101)).shl_round(-9i8, RoundingMode::Nearest), -1);
assert_eq!((&Integer::from(-0xff)).shl_round(-9i16, RoundingMode::Nearest), 0);
assert_eq!((&Integer::from(-0x100)).shl_round(-9i32, RoundingMode::Nearest), 0);
assert_eq!((&Integer::from(0x100)).shl_round(-8i64, RoundingMode::Exact), 1);
assert_eq!((&Integer::ZERO).shl_round(10i8, RoundingMode::Exact), 0);
assert_eq!((&Integer::from(123u32)).shl_round(2i16, RoundingMode::Exact), 492);
assert_eq!(
(&Integer::from(123u32)).shl_round(100i32, RoundingMode::Exact).to_string(),
"155921023828072216384094494261248"
);
shl_round_assign
extern crate malachite_base;
use malachite_base::rounding_modes::RoundingMode;
use malachite_base::num::arithmetic::traits::ShlRoundAssign;
use malachite_base::num::basic::traits::One;
use malachite_nz::integer::Integer;
let mut n = Integer::from(0x101);
n.shl_round_assign(-8i8, RoundingMode::Down);
assert_eq!(n, 1);
let mut n = Integer::from(0x101);
n.shl_round_assign(-8i16, RoundingMode::Up);
assert_eq!(n, 2);
let mut n = Integer::from(-0x101);
n.shl_round_assign(-9i32, RoundingMode::Down);
assert_eq!(n, 0);
let mut n = Integer::from(-0x101);
n.shl_round_assign(-9i64, RoundingMode::Up);
assert_eq!(n, -1);
let mut n = Integer::from(-0x101);
n.shl_round_assign(-9i8, RoundingMode::Nearest);
assert_eq!(n, -1);
let mut n = Integer::from(-0xff);
n.shl_round_assign(-9i16, RoundingMode::Nearest);
assert_eq!(n, 0);
let mut n = Integer::from(-0x100);
n.shl_round_assign(-9i32, RoundingMode::Nearest);
assert_eq!(n, 0);
let mut n = Integer::from(0x100);
n.shl_round_assign(-8i64, RoundingMode::Exact);
assert_eq!(n, 1);
let mut x = Integer::ONE;
x.shl_round_assign(1i8, RoundingMode::Exact);
x.shl_round_assign(2i16, RoundingMode::Exact);
x.shl_round_assign(3i32, RoundingMode::Exact);
x.shl_round_assign(4i64, RoundingMode::Exact);
assert_eq!(x, 1024);