#[cfg(feature = "id-compression")]
mod idpaq_integration {
use vicinity::compression::{IdSetCompressor, RocCompressor};
#[test]
fn vicinity_uses_idpaq_compressor() {
let compressor = RocCompressor::new();
let neighbor_ids: Vec<u32> = vec![42, 156, 789, 1234, 2345];
let universe = 10_000;
let compressed = compressor.compress_set(&neighbor_ids, universe).unwrap();
let decompressed = compressor.decompress_set(&compressed, universe).unwrap();
assert_eq!(neighbor_ids, decompressed, "Round-trip should preserve IDs");
}
#[test]
fn ivf_posting_list_pattern() {
let compressor = RocCompressor::new();
let posting_list: Vec<u32> = (0..500).map(|i| i * 200).collect();
let universe = 100_000;
let compressed = compressor.compress_set(&posting_list, universe).unwrap();
let decompressed = compressor.decompress_set(&compressed, universe).unwrap();
assert_eq!(posting_list, decompressed);
let uncompressed_size = posting_list.len() * 4;
let ratio = uncompressed_size as f64 / compressed.len() as f64;
assert!(
ratio > 1.5,
"Should achieve some compression, got {:.2}x",
ratio
);
}
#[test]
fn ann_edge_cases() {
let compressor = RocCompressor::new();
let single: Vec<u32> = vec![5000];
let compressed = compressor.compress_set(&single, 10_000).unwrap();
let decompressed = compressor.decompress_set(&compressed, 10_000).unwrap();
assert_eq!(single, decompressed);
let max_neighbors: Vec<u32> = (0..64).map(|i| i * 100).collect();
let compressed = compressor.compress_set(&max_neighbors, 10_000).unwrap();
let decompressed = compressor.decompress_set(&compressed, 10_000).unwrap();
assert_eq!(max_neighbors, decompressed);
}
}
mod feature_compilation {
#[test]
fn default_features_compile() {
let _ = std::any::type_name::<vicinity::compression::IdCompressionMethod>();
}
#[cfg(feature = "hnsw")]
#[test]
fn hnsw_feature_compiles() {
}
#[cfg(feature = "persistence")]
#[test]
fn persistence_feature_compiles() {
}
}
mod dependency_documentation {
#[test]
fn compression_dependency_chain() {
}
#[test]
fn simd_dependency_chain() {
let a = [1.0_f32, 0.0, 0.0];
let b = [0.707, 0.707, 0.0];
let d = vicinity::simd::dot(&a, &b);
let c = vicinity::simd::cosine(&a, &b);
let n = vicinity::simd::norm(&a);
assert!((d - 0.707).abs() < 0.01);
assert!((c - 0.707).abs() < 0.01);
assert!((n - 1.0).abs() < 0.001);
}
}