Expand description

Implementations of ModShl and ModShlAssign, traits for left-shifting a number modulo another number.

mod_shl

extern crate malachite_base;

use std::str::FromStr;
use malachite_base::num::arithmetic::traits::ModShl;
use malachite_nz::natural::Natural;

assert_eq!(Natural::from(8u32).mod_shl(2u16, Natural::from(10u32)), 2);
assert_eq!(
    Natural::from(123456u32).mod_shl(100u64, Natural::from_str("12345678987654321").unwrap()),
    7436663564915145u64
);
assert_eq!(Natural::from(8u32).mod_shl(2u16, &Natural::from(10u32)), 2);
assert_eq!(
    Natural::from(123456u32).mod_shl(100u64, &Natural::from_str("12345678987654321").unwrap()),
    7436663564915145u64
);
assert_eq!((&Natural::from(8u32)).mod_shl(2u16, Natural::from(10u32)), 2);
assert_eq!(
    (&Natural::from(123456u32)).mod_shl(
        100u64,
        Natural::from_str("12345678987654321").unwrap()
    ),
    7436663564915145u64
);
assert_eq!((&Natural::from(8u32)).mod_shl(2u16, &Natural::from(10u32)), 2);
assert_eq!(
    (&Natural::from(123456u32)).mod_shl(
        100u64,
        &Natural::from_str("12345678987654321").unwrap()
    ),
    7436663564915145u64
);

assert_eq!(Natural::from(8u32).mod_shl(2i8, Natural::from(10u32)), 2);
assert_eq!(Natural::from(10u32).mod_shl(-100i32, Natural::from(10u32)), 0);
assert_eq!(
    Natural::from(123456u32).mod_shl(100i64, Natural::from_str("12345678987654321").unwrap()),
    7436663564915145u64
);
assert_eq!(Natural::from(8u32).mod_shl(2i8, &Natural::from(10u32)), 2);
assert_eq!(Natural::from(10u32).mod_shl(-100i32, &Natural::from(10u32)), 0);
assert_eq!(
    Natural::from(123456u32).mod_shl(
        100i64,
        &Natural::from_str("12345678987654321").unwrap()
    ),
    7436663564915145u64
);
assert_eq!((&Natural::from(8u32)).mod_shl(2i8, Natural::from(10u32)), 2);
assert_eq!((&Natural::from(10u32)).mod_shl(-100i32, Natural::from(10u32)), 0);
assert_eq!(
    (&Natural::from(123456u32)).mod_shl(
        100i64,
        Natural::from_str("12345678987654321").unwrap()
    ),
    7436663564915145u64
);
assert_eq!((&Natural::from(8u32)).mod_shl(2i8, &Natural::from(10u32)), 2);
assert_eq!((&Natural::from(10u32)).mod_shl(-100i32, &Natural::from(10u32)), 0);
assert_eq!(
    (&Natural::from(123456u32)).mod_shl(
        100i64,
        &Natural::from_str("12345678987654321").unwrap()
    ),
    7436663564915145u64
);

mod_shl_assign

extern crate malachite_base;

use std::str::FromStr;
use malachite_base::num::arithmetic::traits::ModShlAssign;
use malachite_nz::natural::Natural;

let mut x = Natural::from(8u32);
x.mod_shl_assign(2u16, Natural::from(10u32));
assert_eq!(x, 2);

let mut x = Natural::from(123456u32);
x.mod_shl_assign(100u64, Natural::from_str("12345678987654321").unwrap());
assert_eq!(x, 7436663564915145u64);

let mut x = Natural::from(8u32);
x.mod_shl_assign(2u16, &Natural::from(10u32));
assert_eq!(x, 2);

let mut x = Natural::from(123456u32);
x.mod_shl_assign(100u64, &Natural::from_str("12345678987654321").unwrap());
assert_eq!(x, 7436663564915145u64);

let mut x = Natural::from(8u32);
x.mod_shl_assign(2i8, Natural::from(10u32));
assert_eq!(x, 2);

let mut x = Natural::from(10u32);
x.mod_shl_assign(-100i32, Natural::from(10u32));
assert_eq!(x, 0);

let mut x = Natural::from(123456u32);
x.mod_shl_assign(100i64, Natural::from_str("12345678987654321").unwrap());
assert_eq!(x, 7436663564915145u64);

let mut x = Natural::from(8u32);
x.mod_shl_assign(2i8, &Natural::from(10u32));
assert_eq!(x, 2);

let mut x = Natural::from(10u32);
x.mod_shl_assign(-100i32, &Natural::from(10u32));
assert_eq!(x, 0);

let mut x = Natural::from(123456u32);
x.mod_shl_assign(100i64, &Natural::from_str("12345678987654321").unwrap());
assert_eq!(x, 7436663564915145u64);