use scientific::{Precision, Rounding, Scientific};
use std::str::FromStr;
#[test]
fn round() {
let test = [
Scientific::from_str("-1.7").unwrap(),
Scientific::from_str("-1.5").unwrap(),
Scientific::from_str("-1.3").unwrap(),
Scientific::from_str("-0.7").unwrap(),
Scientific::from_str("-0.5").unwrap(),
Scientific::from_str("-0.3").unwrap(),
Scientific::from_str("0.3").unwrap(),
Scientific::from_str("0.5").unwrap(),
Scientific::from_str("0.7").unwrap(),
Scientific::from_str("1.3").unwrap(),
Scientific::from_str("1.5").unwrap(),
Scientific::from_str("1.7").unwrap(),
];
for (rounding, results) in [
(
Rounding::RoundDown,
[
Scientific::from_str("-2").unwrap(),
Scientific::from_str("-2").unwrap(),
Scientific::from_str("-2").unwrap(),
Scientific::from_str("-1").unwrap(),
Scientific::from_str("-1").unwrap(),
Scientific::from_str("-1").unwrap(),
Scientific::from_str("0").unwrap(),
Scientific::from_str("0").unwrap(),
Scientific::from_str("0").unwrap(),
Scientific::from_str("1").unwrap(),
Scientific::from_str("1").unwrap(),
Scientific::from_str("1").unwrap(),
],
),
(
Rounding::RoundUp,
[
Scientific::from_str("-1").unwrap(),
Scientific::from_str("-1").unwrap(),
Scientific::from_str("-1").unwrap(),
Scientific::from_str("0").unwrap(),
Scientific::from_str("0").unwrap(),
Scientific::from_str("0").unwrap(),
Scientific::from_str("1").unwrap(),
Scientific::from_str("1").unwrap(),
Scientific::from_str("1").unwrap(),
Scientific::from_str("2").unwrap(),
Scientific::from_str("2").unwrap(),
Scientific::from_str("2").unwrap(),
],
),
(
Rounding::RoundTowardsZero,
[
Scientific::from_str("-1").unwrap(),
Scientific::from_str("-1").unwrap(),
Scientific::from_str("-1").unwrap(),
Scientific::from_str("0").unwrap(),
Scientific::from_str("0").unwrap(),
Scientific::from_str("0").unwrap(),
Scientific::from_str("0").unwrap(),
Scientific::from_str("0").unwrap(),
Scientific::from_str("0").unwrap(),
Scientific::from_str("1").unwrap(),
Scientific::from_str("1").unwrap(),
Scientific::from_str("1").unwrap(),
],
),
(
Rounding::RoundAwayFromZero,
[
Scientific::from_str("-2").unwrap(),
Scientific::from_str("-2").unwrap(),
Scientific::from_str("-2").unwrap(),
Scientific::from_str("-1").unwrap(),
Scientific::from_str("-1").unwrap(),
Scientific::from_str("-1").unwrap(),
Scientific::from_str("1").unwrap(),
Scientific::from_str("1").unwrap(),
Scientific::from_str("1").unwrap(),
Scientific::from_str("2").unwrap(),
Scientific::from_str("2").unwrap(),
Scientific::from_str("2").unwrap(),
],
),
(
Rounding::RoundHalfDown,
[
Scientific::from_str("-2").unwrap(),
Scientific::from_str("-2").unwrap(),
Scientific::from_str("-1").unwrap(),
Scientific::from_str("-1").unwrap(),
Scientific::from_str("-1").unwrap(),
Scientific::from_str("0").unwrap(),
Scientific::from_str("0").unwrap(),
Scientific::from_str("0").unwrap(),
Scientific::from_str("1").unwrap(),
Scientific::from_str("1").unwrap(),
Scientific::from_str("1").unwrap(),
Scientific::from_str("2").unwrap(),
],
),
(
Rounding::RoundHalfUp,
[
Scientific::from_str("-2").unwrap(),
Scientific::from_str("-1").unwrap(),
Scientific::from_str("-1").unwrap(),
Scientific::from_str("-1").unwrap(),
Scientific::from_str("0").unwrap(),
Scientific::from_str("0").unwrap(),
Scientific::from_str("0").unwrap(),
Scientific::from_str("1").unwrap(),
Scientific::from_str("1").unwrap(),
Scientific::from_str("1").unwrap(),
Scientific::from_str("2").unwrap(),
Scientific::from_str("2").unwrap(),
],
),
(
Rounding::RoundHalfTowardsZero,
[
Scientific::from_str("-2").unwrap(),
Scientific::from_str("-1").unwrap(),
Scientific::from_str("-1").unwrap(),
Scientific::from_str("-1").unwrap(),
Scientific::from_str("0").unwrap(),
Scientific::from_str("0").unwrap(),
Scientific::from_str("0").unwrap(),
Scientific::from_str("0").unwrap(),
Scientific::from_str("1").unwrap(),
Scientific::from_str("1").unwrap(),
Scientific::from_str("1").unwrap(),
Scientific::from_str("2").unwrap(),
],
),
(
Rounding::RoundHalfAwayFromZero,
[
Scientific::from_str("-2").unwrap(),
Scientific::from_str("-2").unwrap(),
Scientific::from_str("-1").unwrap(),
Scientific::from_str("-1").unwrap(),
Scientific::from_str("-1").unwrap(),
Scientific::from_str("0").unwrap(),
Scientific::from_str("0").unwrap(),
Scientific::from_str("1").unwrap(),
Scientific::from_str("1").unwrap(),
Scientific::from_str("1").unwrap(),
Scientific::from_str("2").unwrap(),
Scientific::from_str("2").unwrap(),
],
),
(
Rounding::RoundHalfToEven,
[
Scientific::from_str("-2").unwrap(),
Scientific::from_str("-2").unwrap(),
Scientific::from_str("-1").unwrap(),
Scientific::from_str("-1").unwrap(),
Scientific::from_str("0").unwrap(),
Scientific::from_str("0").unwrap(),
Scientific::from_str("0").unwrap(),
Scientific::from_str("0").unwrap(),
Scientific::from_str("1").unwrap(),
Scientific::from_str("1").unwrap(),
Scientific::from_str("2").unwrap(),
Scientific::from_str("2").unwrap(),
],
),
(
Rounding::RoundHalfToOdd,
[
Scientific::from_str("-2").unwrap(),
Scientific::from_str("-1").unwrap(),
Scientific::from_str("-1").unwrap(),
Scientific::from_str("-1").unwrap(),
Scientific::from_str("-1").unwrap(),
Scientific::from_str("0").unwrap(),
Scientific::from_str("0").unwrap(),
Scientific::from_str("1").unwrap(),
Scientific::from_str("1").unwrap(),
Scientific::from_str("1").unwrap(),
Scientific::from_str("1").unwrap(),
Scientific::from_str("2").unwrap(),
],
),
] {
for (t, r) in test.iter().zip(results) {
assert_eq!(
t.round(Precision::INTEGER, rounding),
r,
"while rounding {rounding:?} {t}"
);
}
}
}