Expand description

Implementations of ModShr and ModShrAssign, traits for right-shifting a number modulo another number.

mod_shr

extern crate malachite_base;

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

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

mod_shr_assign

extern crate malachite_base;

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

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

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

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

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

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

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