From 16741c8c4d99bec9fd0b7b8cce84eb676b8294a9 Mon Sep 17 00:00:00 2001 From: Timothy Warren Date: Fri, 14 Feb 2020 12:11:57 -0500 Subject: [PATCH] Add some tests --- src/num.rs | 6 ++++++ src/rational.rs | 46 ++++++++++++++++++++++++++++------------------ src/seq.rs | 13 ++++++++++++- 3 files changed, 46 insertions(+), 19 deletions(-) diff --git a/src/num.rs b/src/num.rs index 16f837e..67e892e 100644 --- a/src/num.rs +++ b/src/num.rs @@ -156,4 +156,10 @@ mod tests { assert_eq!(u8::gcd(2, 2), 2); assert_eq!(u16::gcd(36, 48), 12); } + + #[test] + fn test_lcm() { + assert_eq!(usize::lcm(15, 30), 30); + assert_eq!(u128::lcm(1, 5), 5); + } } diff --git a/src/rational.rs b/src/rational.rs index 7a77c8a..b3dc3ac 100644 --- a/src/rational.rs +++ b/src/rational.rs @@ -53,29 +53,27 @@ impl Frac { } macro_rules! impl_mul { - ($Type: ty) => { - impl Mul for Frac<$Type> { - type Output = Self; + ($( $Type: ty ),* ) => { + $( + impl Mul for Frac<$Type> { + type Output = Self; - fn mul(self, rhs: Self) -> Self { - let numer = self.numer * rhs.numer; - let denom = self.denom * rhs.denom; + fn mul(self, rhs: Self) -> Self { + let numer = self.numer * rhs.numer; + let denom = self.denom * rhs.denom; - // Figure out the sign - if self.sign != rhs.sign { - Self::new_neg(numer, denom) - } else { - Self::new(numer, denom) + // Figure out the sign + if self.sign != rhs.sign { + Self::new_neg(numer, denom) + } else { + Self::new(numer, denom) + } } } - } + )* }; } -impl_mul!(u8); -impl_mul!(u16); -impl_mul!(u32); -impl_mul!(u64); -impl_mul!(usize); +impl_mul!(u8, u16, u32, u64, usize, u128); impl Neg for Frac { type Output = Self; @@ -89,4 +87,16 @@ impl Neg for Frac { } #[cfg(test)] -mod tests {} +mod tests { + use super::*; + + #[test] + fn mul_test() { + let frac1 = Frac::new(1u8, 3u8); + let frac2 = Frac::new(2u8, 3u8); + + let expected = Frac::new(2u8, 9u8); + + assert_eq!(frac1 * frac2, expected); + } +} diff --git a/src/seq.rs b/src/seq.rs index 90721ff..655e90b 100644 --- a/src/seq.rs +++ b/src/seq.rs @@ -5,7 +5,7 @@ /// /// Can calculate up to 186 using native unsigned 128 bit integers. /// -/// Example +/// Example: /// ```rust /// use rusty_numbers::seq::fibonacci; /// @@ -47,6 +47,17 @@ fn _fibonacci(n: usize, table: &mut Vec) -> Option { /// using a lookup table for better worst-case performance. /// /// Can calculate up to 34! using native unsigned 128 bit integers. +/// +/// Example: +/// ```rust +/// use rusty_numbers::seq::{factorial, fibonacci}; +/// +/// let valid = factorial(3); // Some(6) +/// # assert_eq!(6, valid.unwrap()); +/// +/// let invalid = factorial(35); // None +/// # assert!(invalid.is_none()); +/// ``` pub fn factorial(n: usize) -> Option { let mut table: Vec = vec![1, 1, 2];