#![cfg(feature = "hnsw")]
use semantic_memory::{MemoryConfig, MemoryStore, MockEmbedder};
use tempfile::TempDir;
fn test_store() -> (MemoryStore, TempDir) {
let tmp = TempDir::new().unwrap();
let config = MemoryConfig {
base_dir: tmp.path().to_path_buf(),
..Default::default()
};
let embedder = Box::new(MockEmbedder::new(768));
let store = MemoryStore::open_with_embedder(config, embedder).unwrap();
(store, tmp)
}
#[tokio::test]
async fn add_fact_stores_q8() {
let tmp = TempDir::new().unwrap();
{
let config = MemoryConfig {
base_dir: tmp.path().to_path_buf(),
..Default::default()
};
let embedder = Box::new(MockEmbedder::new(768));
let store = MemoryStore::open_with_embedder(config, embedder).unwrap();
store
.add_fact(
"general",
"quantization pipeline stores q8 embeddings correctly",
None,
None,
)
.await
.unwrap();
}
let config = MemoryConfig {
base_dir: tmp.path().to_path_buf(),
..Default::default()
};
let embedder = Box::new(MockEmbedder::new(768));
let store = MemoryStore::open_with_embedder(config, embedder).unwrap();
let results = store
.search("quantization pipeline", Some(5), None, None)
.await
.unwrap();
assert!(
!results.is_empty(),
"Fact should be found after close/reopen, confirming embeddings were stored"
);
}
#[tokio::test]
async fn reembed_all_regenerates_q8() {
let (store, _tmp) = test_store();
for i in 0..5 {
store
.add_fact(
"general",
&format!("reembed fact number {} with quantized vectors", i),
None,
None,
)
.await
.unwrap();
}
let count = store.reembed_all().await.unwrap();
assert_eq!(count, 5, "Should re-embed all 5 facts");
let results = store
.search("reembed quantized vectors", Some(5), None, None)
.await
.unwrap();
assert!(
!results.is_empty(),
"Search should return results after reembed_all"
);
}