use microscope_memory::ai_adapter::{AIAdapter, AICommand};
use microscope_memory::config::Config;
fn setup_test_memory() -> (tempfile::TempDir, Config) {
let tmp = tempfile::tempdir().expect("create temp dir");
let output_dir = tmp.path().join("data");
let layers_dir = tmp.path().join("layers");
std::fs::create_dir_all(&output_dir).unwrap();
std::fs::create_dir_all(&layers_dir).unwrap();
let layer_content = "Rust programming language for systems development.\n\nMemory management with ownership and borrowing.\n\nMicroscope Memory: hierarchical cognitive storage.";
std::fs::write(layers_dir.join("long_term.txt"), layer_content).unwrap();
let mut config = Config::default();
config.paths.layers_dir = layers_dir.to_string_lossy().to_string();
config.paths.output_dir = output_dir.to_string_lossy().to_string();
config.paths.temp_dir = tmp.path().join("tmp").to_string_lossy().to_string();
config.memory_layers.layers = vec!["long_term".to_string()];
config.embedding.provider = "mock".to_string();
microscope_memory::build::build(&config, true, true).expect("Failed to build test memory");
(tmp, config)
}
#[test]
fn test_ai_adapter_read_operations() {
let (_tmp, config) = setup_test_memory();
let mut adapter = AIAdapter::new(config).expect("Failed to create AI adapter");
let cmd = AICommand::read(1, 0);
let result = adapter.process_command(cmd);
assert!(result.is_ok());
let response = result.unwrap();
assert_eq!(response.op_code, 0); assert_eq!(response.block_id, 0);
assert!(response.payload.len() == 242); }
#[test]
fn test_ai_adapter_write_operations() {
let (_tmp, config) = setup_test_memory();
let mut adapter = AIAdapter::new(config).expect("Failed to create AI adapter");
let mut payload = [0u8; 242];
let text = b"Test data";
payload[0] = text.len() as u8;
payload[1..1 + text.len()].copy_from_slice(text);
let cmd = AICommand {
op_code: 1,
layer: 1, block_id: 0,
weight_delta: 0.0,
payload,
};
let result = adapter.process_command(cmd);
assert!(result.is_ok());
let response = result.unwrap();
assert_eq!(response.op_code, 1); }
#[test]
fn test_ai_adapter_learning_operations() {
let (_tmp, config) = setup_test_memory();
let mut adapter = AIAdapter::new(config).expect("Failed to create AI adapter");
let cmd = AICommand::learn(0, 0.1);
let result = adapter.process_command(cmd);
assert!(result.is_ok());
let response = result.unwrap();
assert_eq!(response.op_code, 2); assert_eq!(response.block_id, 0);
}
#[test]
fn test_ai_adapter_merkle_integrity() {
let (_tmp, config) = setup_test_memory();
let adapter = AIAdapter::new(config).expect("Failed to create AI adapter");
let root = adapter.current_merkle_root();
assert!(root.is_ok());
let root_bytes = root.unwrap();
assert_eq!(root_bytes.len(), 32); }
#[test]
fn test_lazy_merkle_updates() {
let (_tmp, config) = setup_test_memory();
let mut adapter = AIAdapter::new(config).expect("Failed to create AI adapter");
for i in 0..150 {
let cmd = AICommand::read(1, (i % 3) as u64);
let _ = adapter.process_command(cmd);
}
let cmd = AICommand::read(1, 0);
let result = adapter.process_command(cmd);
assert!(result.is_ok());
}