diff --git a/src/lib.rs b/src/lib.rs index ed79fe1..2b11f08 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -104,7 +104,7 @@ impl ops::Add for Fraction { fn add(self, other: Self) -> Self::Output { let mut new = Fraction { num: (self.num * other.den) + (self.den * other.num), - den: self.num * other.den, + den: self.den * other.den, }; new.reduce(); new.correct_sign(); @@ -248,4 +248,49 @@ mod tests { assert_eq!(f.num, -1); assert_eq!(f.den, 2); } + + #[test] + fn test_add_basic() { + let a = Fraction::new(7, 13).unwrap(); + let b = Fraction::new(4, 7).unwrap(); + let c = a + b; + assert_eq!(c.num, 101); + assert_eq!(c.den, 91); + } + + #[test] + fn test_add_with_common_denominator() { + let a = Fraction::new(7, 13).unwrap(); + let b = Fraction::new(4, 13).unwrap(); + let c = a + b; + assert_eq!(c.num, 11); + assert_eq!(c.den, 13); + } + + #[test] + fn test_add_positive_and_negative() { + let a = Fraction::new(-32, 237).unwrap(); + let b = Fraction::new(22, 44).unwrap(); + let c = a + b; + assert_eq!(c.num, 173); + assert_eq!(c.den, 474); + } + + #[test] + fn test_add_negative_and_negative() { + let a = Fraction::new(-500, 12).unwrap(); + let b = Fraction::new(-22, 4).unwrap(); + let c = a + b; + assert_eq!(c.num, -283); + assert_eq!(c.den, 6); + } + + #[test] + fn test_add_with_zero() { + let a = Fraction::new(0, 13).unwrap(); + let b = Fraction::new(4, 7).unwrap(); + let c = a + b; + assert_eq!(c.num, 4); + assert_eq!(c.den, 7); + } }