//! # Rational Numbers (fractions) //! //! Traits to implement: //! * Add //! * AddAssign //! * Div //! * DivAssign //! * Mul //! * MulAssign //! * Neg //! * Sub //! * SubAssign use crate::{Sign, Unsigned}; use std::ops::Neg; #[derive(Debug, Copy, Clone)] pub enum FracType { Proper(T, Frac), Improper(Frac), } #[derive(Debug, Copy, Clone)] pub struct Frac { numer: T, denom: T, sign: Sign, } impl Frac { /// Create a new rational number pub fn new(n: T, d: T) -> Self { Frac { numer: n, denom: d, sign: Sign::Positive, } } } impl Neg for Frac { type Output = Self; fn neg(self) -> Self::Output { let mut out = self.clone(); out.sign = !self.sign; out } } #[cfg(test)] mod tests { }