use face_core::detect::preset::invert;
#[track_caller]
fn assert_close(got: f64, expected: f64) {
let diff = (got - expected).abs();
assert!(
diff < 1e-12,
"got {got}, expected {expected} (|Δ| = {diff})",
);
}
mod sign_flip {
use super::*;
#[test]
fn none_scale_negates() {
assert_eq!(invert(0.5, None), -0.5);
}
#[test]
fn negative_input() {
assert_eq!(invert(-0.3, None), 0.3);
}
#[test]
fn zero() {
let got = invert(0.0, None);
assert_eq!(got + 0.0, 0.0, "invert(0.0, None) ≈ 0.0; got {got}");
}
}
mod scale_subtraction {
use super::*;
#[test]
fn confidence_polarity_flip() {
assert_close(invert(0.7, Some(1.0)), 0.3);
}
#[test]
fn bm25_distance_flip() {
assert_close(invert(12.0, Some(50.0)), 38.0);
}
#[test]
fn value_above_scale_goes_negative() {
assert_close(invert(60.0, Some(50.0)), -10.0);
}
}