#![allow(
clippy::cast_possible_truncation,
clippy::cast_possible_wrap,
clippy::cast_sign_loss
)]
#[must_use]
#[inline]
pub fn ftol(f: f32) -> i32 {
f.round_ties_even() as i64 as i32
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn ftol_rounds_ties_to_even_in_range() {
assert_eq!(ftol(0.5), 0);
assert_eq!(ftol(1.5), 2);
assert_eq!(ftol(2.5), 2);
assert_eq!(ftol(-0.5), 0);
assert_eq!(ftol(-1.5), -2);
assert_eq!(ftol(1.4), 1);
assert_eq!(ftol(1.6), 2);
}
#[test]
fn ftol_wraps_modulo_2_to_32_on_overflow() {
assert_eq!(ftol(2_147_483_648.0_f32), i32::MIN);
assert_eq!(ftol(4_294_967_296.0_f32), 0);
let f = 3.9e10_f32;
let want = f.round_ties_even() as i64 as i32;
assert_eq!(ftol(f), want);
assert_ne!(ftol(f), i32::MAX);
}
}