diff --git a/crates/ruvector-acorn/src/graph.rs b/crates/ruvector-acorn/src/graph.rs index 3d412013..3fca3971 100644 --- a/crates/ruvector-acorn/src/graph.rs +++ b/crates/ruvector-acorn/src/graph.rs @@ -126,6 +126,10 @@ impl AcornGraph { self.data.len() / self.dim.max(1) } + pub fn is_empty(&self) -> bool { + self.len() == 0 + } + /// Borrow vector `i` as a contiguous slice — the hot path for L2². #[inline(always)] pub fn row(&self, i: usize) -> &[f32] { @@ -155,7 +159,7 @@ pub fn flat_k_nearest(data: &[Vec], query: &[f32], k: usize) -> Vec { } } let mut out: Vec<(OrdF32, u32)> = heap.into_sorted_vec(); - out.sort_by(|a, b| a.0.cmp(&b.0)); + out.sort_by_key(|a| a.0); out.into_iter().map(|(_, id)| id).collect() } @@ -173,7 +177,7 @@ pub fn exact_filtered_knn( .filter(|&i| predicate(i as u32)) .map(|i| (OrdF32(l2_sq(&data[i], query)), i as u32)) .collect(); - scored.sort_by(|a, b| a.0.cmp(&b.0)); + scored.sort_by_key(|a| a.0); scored.truncate(k); scored.into_iter().map(|(_, id)| id).collect() } diff --git a/crates/ruvector-acorn/src/main.rs b/crates/ruvector-acorn/src/main.rs index fabf5b22..ddeadfb8 100644 --- a/crates/ruvector-acorn/src/main.rs +++ b/crates/ruvector-acorn/src/main.rs @@ -62,7 +62,7 @@ fn run_variant( sel_pct: f64, predicate: &(dyn Fn(u32) -> bool + Sync), ) { - let recall = recall_at_k(data, queries, K, |id| predicate(id), index); + let recall = recall_at_k(data, queries, K, predicate, index); let qps = bench_qps(index, queries, K, predicate); let mem_mb = index.memory_bytes() as f64 / 1_048_576.0; println!( @@ -156,8 +156,8 @@ fn main() { println!("{}", "-".repeat(44)); for sel_frac in [0.50, 0.20, 0.10, 0.05, 0.02, 0.01] { let pred = selectivity_predicate(N, sel_frac); - let r_flat = recall_at_k(&data, &queries, K, |id| pred(id), &flat); - let r_acorn = recall_at_k(&data, &queries, K, |id| pred(id), &acorng); + let r_flat = recall_at_k(&data, &queries, K, pred, &flat); + let r_acorn = recall_at_k(&data, &queries, K, pred, &acorng); println!( "{:>7.0}% {:>16.1}% {:>16.1}%", sel_frac * 100.0, diff --git a/crates/ruvector-acorn/src/search.rs b/crates/ruvector-acorn/src/search.rs index dd10e844..98e2ee61 100644 --- a/crates/ruvector-acorn/src/search.rs +++ b/crates/ruvector-acorn/src/search.rs @@ -34,7 +34,7 @@ pub fn acorn_search( ef: usize, predicate: impl Fn(u32) -> bool, ) -> Vec<(u32, f32)> { - if graph.len() == 0 { + if graph.is_empty() { return vec![]; } let n = graph.len();