use super::*;
#[test]
fn test_negative_distance_regression() {
let seed = 34;
let size = 1000;
let indices: Vec<u32> = (0..size).map(|i| i as u32).collect();
let values: Vec<f32> = (0..size)
.map(|i| {
let mut x = i as f32 * (seed as f32 + 1.0);
x = x % 1000.0 + 0.1;
x
})
.collect();
let vec = SparseVec::new(indices, values, size as u32).unwrap();
let dist = sparse_squared_euclidean_distance(&vec, &vec).unwrap();
assert!(
dist >= 0.0,
"Distance should be non-negative, got {:.20}",
dist
);
assert!(
dist < 1e-6,
"Self distance should be close to 0, got {:.20}",
dist
);
}
#[test]
fn test_sparse_euclidean_distance_nan_regression() {
let seed = 34;
let size = 1000;
let indices: Vec<u32> = (0..size).map(|i| i as u32).collect();
let values: Vec<f32> = (0..size)
.map(|i| {
let mut x = i as f32 * (seed as f32 + 1.0);
x = x % 1000.0 + 0.1;
x
})
.collect();
let vec = SparseVec::new(indices, values, size as u32).unwrap();
let dist = sparse_euclidean_distance(&vec, &vec).unwrap();
assert!(!dist.is_nan(), "Euclidean distance should not be NaN");
assert!(dist >= 0.0);
}
#[test]
fn test_sparse_squared_euclidean_distance_correctness() {
let a = SparseVec::new(vec![0, 2], vec![1.0, 3.0], 5).unwrap();
let b = SparseVec::new(vec![0, 3], vec![2.0, 4.0], 5).unwrap();
let dist = sparse_squared_euclidean_distance(&a, &b).unwrap();
assert!((dist - 26.0).abs() < 1e-6, "Expected 26.0, got {}", dist);
}