diff --git a/src/lib.rs b/src/lib.rs index bfc7633..d4deeec 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -432,4 +432,92 @@ mod tests { assert_eq!(c.num, -1); assert_eq!(c.den, 2); } + + #[test] + fn test_div_basic() { + let a = Fraction::new(2, 3).unwrap(); + let b = Fraction::new(4, 5).unwrap(); + let c = (a / b).unwrap(); + assert_eq!(c.num, 5); + assert_eq!(c.den, 6); + } + + #[test] + fn test_div_by_one() { + let a = Fraction::new(7, 9).unwrap(); + let b = Fraction::from(1); + let c = (a / b).unwrap(); + assert_eq!(c.num, 7); + assert_eq!(c.den, 9); + } + + #[test] + fn test_div_self() { + let a = Fraction::new(5, 8).unwrap(); + let c = (a / a).unwrap(); + assert_eq!(c.num, 1); + assert_eq!(c.den, 1); + } + + #[test] + fn test_div_negative_positive() { + let a = Fraction::new(-2, 3).unwrap(); + let b = Fraction::new(4, 5).unwrap(); + let c = (a / b).unwrap(); + assert_eq!(c.num, -5); + assert_eq!(c.den, 6); + } + + #[test] + fn test_div_negative_negative() { + let a = Fraction::new(-2, 3).unwrap(); + let b = Fraction::new(-4, 5).unwrap(); + let c = (a / b).unwrap(); + assert_eq!(c.num, 5); + assert_eq!(c.den, 6); + } + + #[test] + fn test_div_result_reduced() { + let a = Fraction::new(4, 6).unwrap(); // 2/3 + let b = Fraction::new(8, 9).unwrap(); // 8/9 + let c = (a / b).unwrap(); + assert_eq!(c.num, 3); + assert_eq!(c.den, 4); + } + + #[test] + fn test_div_by_zero_error() { + let a = Fraction::new(3, 5).unwrap(); + let b = Fraction::new(0, 7).unwrap(); + let result = a / b; + assert!(matches!(result, Err(FractionError::DivisionByZero))); + } + + #[test] + fn test_div_zero_by_fraction() { + let a = Fraction::new(0, 5).unwrap(); + let b = Fraction::new(3, 7).unwrap(); + let c = (a / b).unwrap(); + assert_eq!(c.num, 0); + assert_eq!(c.den, 1); + } + + #[test] + fn test_div_large_numbers() { + let a = Fraction::new(1000, 2000).unwrap(); // 1/2 + let b = Fraction::new(3000, 4000).unwrap(); // 3/4 + let c = (a / b).unwrap(); + assert_eq!(c.num, 2); + assert_eq!(c.den, 3); + } + + #[test] + fn test_div_sign_normalization() { + let a = Fraction::new(2, -3).unwrap(); // -2/3 + let b = Fraction::new(4, 5).unwrap(); + let c = (a / b).unwrap(); + assert_eq!(c.num, -5); + assert_eq!(c.den, 6); + } }