use std::collections::HashMap;
use vecstore::{Metadata, Query, VecStore};
#[test]
fn test_basic_operations() {
let temp_dir = tempfile::tempdir().unwrap();
let mut store = VecStore::open(temp_dir.path()).unwrap();
assert_eq!(store.count(), 0);
let mut meta = Metadata {
fields: HashMap::new(),
};
meta.fields.insert("type".into(), serde_json::json!("test"));
store
.upsert("vec1".into(), vec![1.0, 0.0, 0.0], meta.clone())
.unwrap();
assert_eq!(store.count(), 1);
let query = Query {
vector: vec![1.0, 0.0, 0.0],
k: 1,
filter: None,
};
let results = store.query(query).unwrap();
assert_eq!(results.len(), 1);
assert_eq!(results[0].id, "vec1");
store
.upsert("vec1".into(), vec![0.0, 1.0, 0.0], meta)
.unwrap();
assert_eq!(store.count(), 1);
store.remove("vec1").unwrap();
assert_eq!(store.count(), 0);
}
#[test]
fn test_dimension_validation() {
let temp_dir = tempfile::tempdir().unwrap();
let mut store = VecStore::open(temp_dir.path()).unwrap();
let meta = Metadata {
fields: HashMap::new(),
};
store
.upsert("vec1".into(), vec![1.0, 2.0, 3.0], meta.clone())
.unwrap();
let result = store.upsert("vec2".into(), vec![1.0, 2.0], meta);
assert!(result.is_err());
}
#[test]
fn test_query_with_k() {
let temp_dir = tempfile::tempdir().unwrap();
let mut store = VecStore::open(temp_dir.path()).unwrap();
let meta = Metadata {
fields: HashMap::new(),
};
for i in 0..10 {
let vec = vec![i as f32, 0.0, 0.0];
store
.upsert(format!("vec{}", i), vec, meta.clone())
.unwrap();
}
let query = Query {
vector: vec![5.0, 0.0, 0.0],
k: 3,
filter: None,
};
let results = store.query(query).unwrap();
assert!(results.len() <= 3);
}