use crate::number::{instances::integer::Integer, traits::real::Real};
pub trait Integral: Real
where
Self: std::cmp::Ord,
{
fn quotient(self, rhs: Self) -> Self {
self.quot_rem(rhs).0
}
fn remainder(self, rhs: Self) -> Self {
self.quot_rem(rhs).1
}
fn division(self, rhs: Self) -> Self {
self.div_mod(rhs).0
}
fn modulus(self, rhs: Self) -> Self {
self.div_mod(rhs).1
}
fn quot_rem(self, rhs: Self) -> (Self, Self);
fn div_mod(self, rhs: Self) -> (Self, Self);
fn to_integer(self) -> Integer;
fn is_even(&self) -> bool {
self.clone().modulus(Self::one() + Self::one()) == Self::zero()
}
fn is_odd(&self) -> bool {
!self.is_even()
}
}