use crate::number::traits::Number;
pub trait Rational: Number {
fn is_integer(&self) -> bool;
fn is_proper(&self) -> bool;
fn is_reduced(&self) -> bool;
fn reduce(&mut self);
#[must_use]
fn reduced(&self) -> Self;
fn invert(&mut self);
#[must_use]
fn inverted(&self) -> Self;
#[inline]
fn is_improper(&self) -> bool {
!self.is_proper()
}
#[inline]
fn is_reducible(&self) -> bool {
!self.is_reduced()
}
#[inline]
fn invert_reduce(&mut self) {
self.invert();
self.reduce();
}
#[inline]
#[must_use]
fn inverted_reduced(&self) -> Self
where
Self: Sized,
{
self.inverted().reduced()
}
}