use fathomdb_engine::rerank_passages;
#[test]
fn rerank_passages_rejects_nan_score() {
let passages = vec![(1u64, "body text".to_string(), f64::NAN)];
let result = rerank_passages("query", passages, 3, 0.3, 3);
assert!(
result.is_err(),
"NaN score must return Err — got Ok (is_finite guard not yet in place)"
);
let msg = result.unwrap_err();
assert!(msg.contains("non-finite"), "error message must mention 'non-finite'; got: {msg:?}");
}
#[test]
fn rerank_passages_rejects_pos_inf_score() {
let passages = vec![(2u64, "another passage".to_string(), f64::INFINITY)];
let result = rerank_passages("query", passages, 1, 0.3, 1);
assert!(
result.is_err(),
"+Inf score must return Err — got Ok (is_finite guard not yet in place)"
);
}
#[test]
fn rerank_passages_rejects_neg_inf_score() {
let passages = vec![(3u64, "yet another passage".to_string(), f64::NEG_INFINITY)];
let result = rerank_passages("query", passages, 1, 0.3, 1);
assert!(
result.is_err(),
"-Inf score must return Err — got Ok (is_finite guard not yet in place)"
);
}
#[test]
fn rerank_passages_rejects_nonfinite_in_mixed_pool() {
let passages = vec![
(10u64, "fine passage".to_string(), 0.9_f64),
(11u64, "bad passage".to_string(), f64::NAN),
];
let result = rerank_passages("query", passages, 2, 0.3, 2);
assert!(result.is_err(), "NaN in a mixed pool must reject the whole call");
}
#[test]
fn rerank_passages_accepts_finite_scores() {
let passages =
vec![(20u64, "alpha".to_string(), 0.8_f64), (21u64, "beta".to_string(), 0.5_f64)];
let result = rerank_passages("query", passages, 0, 0.3, 0);
assert!(result.is_ok(), "finite scores must not be rejected; got: {:?}", result.err());
}