2020-02-19 21:10:53 -05:00
|
|
|
#![cfg_attr(tarpaulin, skip)]
|
|
|
|
|
2020-02-19 16:22:01 -05:00
|
|
|
use rusty_numbers::frac;
|
2020-02-24 13:49:09 -05:00
|
|
|
use rusty_numbers::rational::Frac;
|
2020-02-19 16:22:01 -05:00
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn mul_test() {
|
|
|
|
let frac1 = frac!(1 / 3u8);
|
|
|
|
let frac2 = frac!(2u8 / 3);
|
|
|
|
|
|
|
|
let expected = frac!(2u8 / 9);
|
|
|
|
|
|
|
|
assert_eq!(frac1 * frac2, expected);
|
|
|
|
|
|
|
|
assert_eq!(frac!(0), frac!(0) * frac!(5 / 8));
|
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn div_test() {
|
|
|
|
assert_eq!(frac!(1), frac!(1 / 3) / frac!(1 / 3));
|
|
|
|
assert_eq!(frac!(1 / 9), frac!(1 / 3) / frac!(3));
|
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn add_test() {
|
|
|
|
assert_eq!(frac!(5 / 8), frac!(5 / 8) + frac!(0));
|
|
|
|
assert_eq!(frac!(5 / 6), frac!(1 / 3) + frac!(1 / 2), "1/3 + 1/2");
|
|
|
|
assert_eq!(frac!(1 / 3), frac!(2 / 3) + -frac!(1 / 3), "2/3 + -1/3");
|
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn sub_test() {
|
|
|
|
assert_eq!(frac!(5 / 8), frac!(5 / 8) - frac!(0));
|
|
|
|
assert_eq!(frac!(1 / 6), frac!(1 / 2) - frac!(1 / 3), "1/2 - 1/3");
|
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn cmp_test() {
|
2020-02-19 21:23:07 -05:00
|
|
|
assert!(frac!(1 / 2) <= frac!(1 / 2));
|
2020-02-19 16:22:01 -05:00
|
|
|
assert!(frac!(0) < frac!(1));
|
|
|
|
assert!(-frac!(5 / 3) < frac!(1 / 10_000));
|
|
|
|
assert!(frac!(1 / 10_000) > -frac!(10));
|
|
|
|
assert!(frac!(1 / 3) < frac!(1 / 2));
|
|
|
|
assert_eq!(frac!(1 / 2), frac!(3 / 6));
|
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn negative_fractions() {
|
|
|
|
assert_eq!(-frac!(1 / 3), -frac!(2 / 3) + frac!(1 / 3), "-2/3 + 1/3");
|
|
|
|
assert_eq!(frac!(1), frac!(1 / 3) - -frac!(2 / 3), "1/3 - -2/3");
|
|
|
|
assert_eq!(-frac!(1), -frac!(2 / 3) - frac!(1 / 3), "-2/3 - +1/3");
|
|
|
|
assert_eq!(-frac!(1), -frac!(2 / 3) + -frac!(1 / 3), "-2/3 + -1/3");
|
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn negative_mul_div() {
|
|
|
|
assert_eq!(-frac!(1 / 12), -frac!(1 / 3) * frac!(1 / 4));
|
|
|
|
assert_eq!(-frac!(1 / 12), frac!(1 / 3) * -frac!(1 / 4));
|
|
|
|
assert_eq!(frac!(1 / 12), -frac!(1 / 3) * -frac!(1 / 4));
|
|
|
|
}
|
2020-02-19 21:10:53 -05:00
|
|
|
|
|
|
|
#[test]
|
|
|
|
#[should_panic(expected = "Fraction can not have a zero denominator")]
|
|
|
|
fn zero_denom() {
|
|
|
|
frac!(1 / 0);
|
|
|
|
}
|
|
|
|
|
2020-02-24 13:49:09 -05:00
|
|
|
#[test]
|
|
|
|
fn fraction_reducing() {
|
2020-02-28 17:11:36 -05:00
|
|
|
assert_eq!(frac!(1u8 / 2), Frac::new_unreduced(48u8, 96u8).reduce());
|
2020-02-24 13:49:09 -05:00
|
|
|
}
|
|
|
|
|
2020-02-19 21:10:53 -05:00
|
|
|
#[test]
|
|
|
|
fn op_assign() {
|
|
|
|
// Addition
|
2020-02-19 21:23:07 -05:00
|
|
|
let mut quart = frac!(1 / 4);
|
|
|
|
quart += frac!(1 / 4);
|
|
|
|
assert_eq!(frac!(1 / 2), quart);
|
2020-02-19 21:10:53 -05:00
|
|
|
|
|
|
|
// Subtraction
|
2020-02-19 21:23:07 -05:00
|
|
|
let mut half = frac!(1 / 2);
|
|
|
|
half -= frac!(1 / 4);
|
|
|
|
assert_eq!(frac!(1 / 4), half);
|
2020-02-19 21:10:53 -05:00
|
|
|
|
|
|
|
// Multiplication
|
2020-02-19 21:23:07 -05:00
|
|
|
let mut half = frac!(1 / 2);
|
|
|
|
half *= frac!(1 / 2);
|
|
|
|
assert_eq!(frac!(1 / 4), half);
|
2020-02-19 21:10:53 -05:00
|
|
|
|
|
|
|
// Division
|
2020-02-19 21:23:07 -05:00
|
|
|
let mut quart = frac!(1 / 4);
|
2020-02-19 21:10:53 -05:00
|
|
|
quart /= frac!(4);
|
2020-02-19 21:23:07 -05:00
|
|
|
assert_eq!(frac!(1 / 16), quart);
|
2020-02-19 21:10:53 -05:00
|
|
|
}
|