Skip to content

Commit f0f289d

Browse files
committed
add hnsw tests
1 parent b312a43 commit f0f289d

File tree

3 files changed

+38
-1
lines changed

3 files changed

+38
-1
lines changed

src/hnsw/hnsw.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -866,7 +866,9 @@ impl Index {
866866
let cnr = cr.node.read();
867867
res.push(SearchResult::new(
868868
cr.sim,
869-
(&cnr.name).split(".").collect::<Vec<&str>>()[2],
869+
&((&cnr.name).split(".").collect::<Vec<&str>>())
870+
.last()
871+
.unwrap(),
870872
&cnr.data,
871873
));
872874
}

src/hnsw/hnsw_tests.rs

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
use crate::hnsw::hnsw::*;
2+
3+
#[test]
4+
fn hnsw_test() {
5+
let mut index = Index::new("foo", 4, 5, 16);
6+
assert_eq!(&index.name, "foo");
7+
assert_eq!(index.data_dim, 4);
8+
assert_eq!(index.m, 5);
9+
assert_eq!(index.ef_construction, 16);
10+
assert_eq!(index.node_count, 0);
11+
assert_eq!(index.max_layer, 0);
12+
assert_eq!(index.enterpoint, None);
13+
14+
let mock_fn = |_s: String, _n: Node<f32>| {};
15+
for i in 0..100 {
16+
let name = format!("node{}", i);
17+
let data = vec![i as f32; 4];
18+
index.add_node(&name, &data, mock_fn).unwrap();
19+
}
20+
assert_eq!(index.node_count, 100);
21+
assert_ne!(index.enterpoint, None);
22+
23+
let query = vec![10.0; 4];
24+
let res = index.search_knn(&query, 5).unwrap();
25+
assert_eq!(res.len(), 5);
26+
assert_eq!(res[0].sim.into_inner(), 0.0);
27+
assert_eq!(res[0].name.as_str(), "node10");
28+
assert_eq!(res[1].sim.into_inner(), -4.0);
29+
assert_eq!(res[2].sim.into_inner(), -4.0);
30+
assert_eq!(res[3].sim.into_inner(), -16.0);
31+
assert_eq!(res[4].sim.into_inner(), -16.0);
32+
}

src/hnsw/mod.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
pub mod hnsw;
22
pub use hnsw::*;
33

4+
#[cfg(test)]
5+
mod hnsw_tests;
6+
47
pub mod metrics;
58
pub use metrics::*;
69

0 commit comments

Comments
 (0)