use umi_memory::umi::{Memory, MemoryConfig, RecallOptions, RememberOptions};
#[test]
fn test_memory_config_defaults() {
let config = MemoryConfig::default();
assert_eq!(config.core_memory_bytes, 32 * 1024); assert_eq!(config.working_memory_bytes, 1024 * 1024); assert_eq!(config.default_recall_limit, 10);
assert_eq!(config.embedding_batch_size, 100);
assert!(config.generate_embeddings);
assert!(config.semantic_search_enabled);
assert!(config.query_expansion_enabled);
}
#[test]
fn test_memory_config_builder_pattern() {
let config = MemoryConfig::default()
.with_core_memory_bytes(64 * 1024)
.with_working_memory_bytes(2 * 1024 * 1024)
.with_recall_limit(20)
.with_embedding_batch_size(50)
.without_embeddings()
.without_semantic_search();
assert_eq!(config.core_memory_bytes, 64 * 1024);
assert_eq!(config.working_memory_bytes, 2 * 1024 * 1024);
assert_eq!(config.default_recall_limit, 20);
assert_eq!(config.embedding_batch_size, 50);
assert!(!config.generate_embeddings);
assert!(!config.semantic_search_enabled);
}
#[test]
fn test_memory_config_method_chaining() {
let config = MemoryConfig::default()
.with_core_memory_bytes(32 * 1024)
.with_recall_limit(15)
.without_query_expansion();
assert_eq!(config.core_memory_bytes, 32 * 1024);
assert_eq!(config.default_recall_limit, 15);
assert!(!config.query_expansion_enabled);
}
#[tokio::test]
async fn test_memory_builder_with_config() {
let config = MemoryConfig::default().with_recall_limit(5);
let mut memory = Memory::sim_with_config(42, config);
memory
.remember("test", RememberOptions::default())
.await
.unwrap();
}
#[tokio::test]
#[ignore = "TODO: Wire config.default_recall_limit through Memory.recall()"]
async fn test_memory_respects_recall_limit_from_config() {
let config = MemoryConfig::default().with_recall_limit(3);
let mut memory = Memory::sim_with_config(42, config);
memory
.remember("Alice is an engineer", RememberOptions::default())
.await
.unwrap();
memory
.remember("Bob is a designer", RememberOptions::default())
.await
.unwrap();
memory
.remember("Charlie is a manager", RememberOptions::default())
.await
.unwrap();
memory
.remember("Diana is a developer", RememberOptions::default())
.await
.unwrap();
memory
.remember("Eve is an analyst", RememberOptions::default())
.await
.unwrap();
let results = memory
.recall("person", RecallOptions::default())
.await
.unwrap();
assert!(
results.len() <= 3,
"Expected at most 3 results, got {}",
results.len()
);
}
#[tokio::test]
async fn test_memory_explicit_limit_overrides_config() {
let config = MemoryConfig::default().with_recall_limit(3);
let mut memory = Memory::sim_with_config(42, config);
memory
.remember("Alice is an engineer", RememberOptions::default())
.await
.unwrap();
memory
.remember("Bob is a designer", RememberOptions::default())
.await
.unwrap();
let results = memory
.recall("person", RecallOptions::default().with_limit(10))
.await
.unwrap();
assert!(results.len() <= 10);
}
#[test]
fn test_config_with_zero_recall_limit() {
let config = MemoryConfig::default().with_recall_limit(0);
assert_eq!(config.default_recall_limit, 0);
}
#[test]
fn test_config_with_large_values() {
let config = MemoryConfig::default()
.with_core_memory_bytes(10 * 1024 * 1024) .with_working_memory_bytes(100 * 1024 * 1024) .with_recall_limit(1000);
assert_eq!(config.core_memory_bytes, 10 * 1024 * 1024);
assert_eq!(config.working_memory_bytes, 100 * 1024 * 1024);
assert_eq!(config.default_recall_limit, 1000);
}
#[test]
fn test_config_disable_embeddings() {
let config = MemoryConfig::default().without_embeddings();
assert!(!config.generate_embeddings);
assert!(config.semantic_search_enabled); }
#[test]
fn test_config_disable_semantic_search() {
let config = MemoryConfig::default().without_semantic_search();
assert!(!config.semantic_search_enabled);
assert!(config.generate_embeddings); }
#[test]
fn test_config_disable_query_expansion() {
let config = MemoryConfig::default().without_query_expansion();
assert!(!config.query_expansion_enabled);
assert!(config.semantic_search_enabled); }
#[test]
fn test_config_clone() {
let config1 = MemoryConfig::default().with_recall_limit(15);
let config2 = config1.clone();
assert_eq!(config1.default_recall_limit, config2.default_recall_limit);
assert_eq!(config1.core_memory_bytes, config2.core_memory_bytes);
}
#[test]
fn test_config_debug() {
let config = MemoryConfig::default();
let debug_str = format!("{:?}", config);
assert!(debug_str.contains("MemoryConfig"));
}