test: division
This commit is contained in:
88
src/lib.rs
88
src/lib.rs
@@ -432,4 +432,92 @@ mod tests {
|
|||||||
assert_eq!(c.num, -1);
|
assert_eq!(c.num, -1);
|
||||||
assert_eq!(c.den, 2);
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user