From c46081c0c317dba4a2c5f4fdc3b24cd17e6d79a4 Mon Sep 17 00:00:00 2001 From: Eryn Wells Date: Sat, 15 Apr 2017 11:01:12 -0700 Subject: [PATCH] Make Rational addition work! --- types/src/number/add.rs | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/types/src/number/add.rs b/types/src/number/add.rs index 9d27963..cc44778 100644 --- a/types/src/number/add.rs +++ b/types/src/number/add.rs @@ -18,8 +18,11 @@ impl Add for Real { } else { let lcm = q.lcm(oq); - Real::Rational(1, 1) - } + let numer = (p * (lcm / q)) + (op * (lcm / oq)); + let denom = lcm; + println!("lcm = {}, numer = {}, denom = {}", lcm, numer, denom); + Real::Rational(numer, denom) + }.reduce() }, (Real::Irrational(v), Real::Irrational(ov)) => Real::Irrational(v + ov), // TODO: The rest. @@ -39,11 +42,17 @@ mod tests { } #[test] - fn rational_addition() { + fn rational_addition_with_like_denominators() { let r = Real::Rational(1, 4) + Real::Rational(1, 4); assert_eq!(r, Real::Rational(1, 2)); } + #[test] + fn rational_addition_with_unlike_denominators() { + let r = Real::Rational(4, 7) + Real::Rational(14, 3); + assert_eq!(r, Real::Rational(110, 21)); + } + #[test] fn irrational_addition() { let r = Real::Irrational(3.2) + Real::Irrational(3.2);