use impl_num_traits::integer_sqrt::IntegerSquareRoot;
use num_traits::ops::checked::{CheckedAdd, CheckedDiv, CheckedMul, CheckedSub};
use primitive_types::U256;
#[test]
fn u256_isqrt() {
let x = U256::MAX;
let s = x.integer_sqrt_checked().unwrap();
assert_eq!(x.integer_sqrt(), s);
}
#[test]
fn u256_checked_traits_supported() {
const ZERO: &U256 = &U256::zero();
const ONE: &U256 = &U256::one();
const MAX: &U256 = &U256::MAX;
assert_eq!(<U256 as CheckedAdd>::checked_add(MAX, ONE), None);
assert_eq!(<U256 as CheckedAdd>::checked_add(ZERO, ONE), Some(*ONE));
assert_eq!(<U256 as CheckedSub>::checked_sub(ZERO, ONE), None);
assert_eq!(<U256 as CheckedSub>::checked_sub(ONE, ZERO), Some(*ONE));
assert_eq!(<U256 as CheckedDiv>::checked_div(MAX, ZERO), None);
assert_eq!(<U256 as CheckedDiv>::checked_div(MAX, ONE), Some(*MAX));
assert_eq!(<U256 as CheckedMul>::checked_mul(MAX, MAX), None);
assert_eq!(<U256 as CheckedMul>::checked_mul(MAX, ZERO), Some(*ZERO));
}