#[path = "support/flat_index.rs"]
mod flat_index;
use std::sync::Arc;
use flat_index::FlatIndex;
use iqdb_cache::{CacheConfig, CachedIndex, EvictionPolicy};
use iqdb_index::IndexCore;
use iqdb_types::{DistanceMetric, SearchParams, VectorId};
fn index() -> FlatIndex {
let mut idx = FlatIndex::new(1);
idx.insert(VectorId::from(1u64), Arc::from(&[0.0][..]), None)
.expect("insert");
idx
}
fn main() {
let params = SearchParams::new(1, DistanceMetric::Euclidean);
for policy in [
EvictionPolicy::Lru,
EvictionPolicy::Lfu,
EvictionPolicy::Fifo,
EvictionPolicy::Arc,
] {
let cached =
CachedIndex::with_config(index(), CacheConfig::new().capacity(2).policy(policy));
for q in [0.0_f32, 1.0] {
let _ = cached.search(&[q], ¶ms).expect("search");
}
for _ in 0..3 {
let _ = cached.search(&[0.0], ¶ms).expect("search"); }
let _ = cached.search(&[2.0], ¶ms).expect("search");
let stats = cached.cache_stats();
println!(
"{policy:<5?} -> len={} hits={} misses={} evictions={}",
stats.len, stats.hits, stats.misses, stats.evictions
);
}
println!(
"\nAll four keep the cache within capacity; they differ only in which entry they drop."
);
}