harden: NaN-safe sort + dimension-mismatch guard in VectorIndex

This commit is contained in:
2026-05-18 18:54:06 +02:00
parent 34e2f70d91
commit d920183f97
2 changed files with 18 additions and 1 deletions
+11
View File
@@ -12,3 +12,14 @@ fn cosine_topk_ranks_nearest_first() {
assert_eq!(hits[1].0, 2);
assert!(hits[0].1 > hits[1].1);
}
#[test]
fn nan_score_does_not_panic_and_dim_mismatch_returns_empty() {
// NaN in a stored vector must not panic the sort.
let vi = VectorIndex::from_vectors(vec![vec![1.0, 0.0], vec![f32::NAN, 1.0]]);
let hits = vi.top_k(&[1.0, 0.0], 2); // must not panic
assert!(hits.iter().any(|&(i, _)| i == 0)); // the valid vector still found
// Dimension mismatch → empty, never silently mispaired.
let vi2 = VectorIndex::from_vectors(vec![vec![1.0, 0.0, 0.0]]);
assert!(vi2.top_k(&[1.0, 0.0], 1).is_empty());
}