use ek_data::{ceil_to, floor_to, get_digits, round_to, try_round_to};
#[test]
fn round_to_uses_half_even_like_python() {
assert_eq!(round_to(2.5, 1.0), 2.0);
assert_eq!(round_to(3.5, 1.0), 4.0);
assert_eq!(round_to(-2.5, 1.0), -2.0);
assert_eq!(round_to(-3.5, 1.0), -4.0);
assert_eq!(round_to(0.5, 1.0), 0.0);
assert_eq!(round_to(1.5, 1.0), 2.0);
}
#[test]
fn decimal_exactness_cases() {
assert_eq!(floor_to(0.3, 0.1), 0.3);
assert_eq!(ceil_to(0.3, 0.1), 0.3);
assert_eq!(round_to(0.3, 0.1), 0.3);
assert_eq!(round_to(3500.3, 0.2), 3500.4);
assert_eq!(floor_to(3500.35, 0.2), 3500.2);
assert_eq!(ceil_to(3500.35, 0.2), 3500.4);
assert_eq!(round_to(3500.1, 0.2), 3500.0);
assert_eq!(round_to(3500.3, 0.2), 3500.4);
}
#[test]
fn floor_ceil_directions() {
assert_eq!(floor_to(1.9, 1.0), 1.0);
assert_eq!(ceil_to(1.1, 1.0), 2.0);
assert_eq!(floor_to(-1.1, 1.0), -2.0);
assert_eq!(ceil_to(-1.9, 1.0), -1.0);
assert_eq!(round_to(10.0, 0.01), 10.0);
assert_eq!(floor_to(3500.2, 0.2), 3500.2);
assert_eq!(ceil_to(-0.4, 0.2), -0.4);
}
#[test]
fn get_digits_matches_python_repr() {
assert_eq!(get_digits(0.001), 3);
assert_eq!(get_digits(0.1), 1);
assert_eq!(get_digits(100.0), 1); assert_eq!(get_digits(0.0), 1); assert_eq!(get_digits(1e-5), 5); assert_eq!(get_digits(1e16), 0); assert_eq!(get_digits(-3.25), 2);
}
#[test]
fn degenerate_inputs_are_explicit() {
assert!(try_round_to(1.0, 0.0).is_none());
assert!(round_to(1.0, 0.0).is_nan());
assert!(floor_to(f64::NAN, 1.0).is_nan());
assert!(ceil_to(f64::INFINITY, 1.0).is_nan());
}
#[test]
fn negative_target_matches_python() {
assert_eq!(round_to(2.5, -1.0), 2.0);
assert_eq!(floor_to(1.9, -1.0), 2.0);
assert_eq!(ceil_to(1.9, -1.0), 1.0);
assert_eq!(round_to(-2.5, -1.0), -2.0);
assert_eq!(round_to(3500.3, -0.2), 3500.4);
}