|
| 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 | +} |
0 commit comments