26 lines
921 B
Rust
26 lines
921 B
Rust
use alpha_id::vector::VectorIndex;
|
|
|
|
#[test]
|
|
fn cosine_topk_ranks_nearest_first() {
|
|
let vi = VectorIndex::from_vectors(vec![
|
|
vec![1.0, 0.0], // id 0
|
|
vec![0.0, 1.0], // id 1
|
|
vec![0.9, 0.1], // id 2
|
|
]);
|
|
let hits = vi.top_k(&[1.0, 0.0], 2);
|
|
assert_eq!(hits[0].0, 0);
|
|
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());
|
|
}
|