use langchainrust::{
ThreadSafeMemoryCheckpointer,
AgentState,
};
use langchainrust::Checkpointer;
#[tokio::test]
async fn test_checkpointer_save() {
let checkpointer = ThreadSafeMemoryCheckpointer::<AgentState>::new();
let state = AgentState::new("test input".to_string());
let id = checkpointer.save(&state).await.unwrap();
assert!(!id.is_empty());
}
#[tokio::test]
async fn test_checkpointer_load() {
let checkpointer = ThreadSafeMemoryCheckpointer::<AgentState>::new();
let state = AgentState::new("saved state".to_string());
let id = checkpointer.save(&state).await.unwrap();
let loaded = checkpointer.load(&id).await.unwrap();
assert_eq!(loaded.input, "saved state");
}
#[tokio::test]
async fn test_checkpointer_list() {
let checkpointer = ThreadSafeMemoryCheckpointer::<AgentState>::new();
let state1 = AgentState::new("first".to_string());
let id1 = checkpointer.save(&state1).await.unwrap();
let state2 = AgentState::new("second".to_string());
let id2 = checkpointer.save(&state2).await.unwrap();
let list = checkpointer.list().await.unwrap();
assert_eq!(list.len(), 2);
assert!(list.contains(&id1));
assert!(list.contains(&id2));
}
#[tokio::test]
async fn test_checkpointer_delete() {
let checkpointer = ThreadSafeMemoryCheckpointer::<AgentState>::new();
let state = AgentState::new("to_delete".to_string());
let id = checkpointer.save(&state).await.unwrap();
let list_before = checkpointer.list().await.unwrap();
assert_eq!(list_before.len(), 1);
checkpointer.delete(&id).await.unwrap();
let list_after = checkpointer.list().await.unwrap();
assert!(list_after.is_empty());
}
#[tokio::test]
async fn test_checkpointer_load_nonexistent_fails() {
let checkpointer = ThreadSafeMemoryCheckpointer::<AgentState>::new();
let result = checkpointer.load("nonexistent_id").await;
assert!(result.is_err());
}
#[tokio::test]
async fn test_checkpointer_multiple_states() {
let checkpointer = ThreadSafeMemoryCheckpointer::<AgentState>::new();
let mut ids: Vec<String> = Vec::new();
for i in 0..5 {
let state = AgentState::new(format!("state_{}", i));
let id = checkpointer.save(&state).await.unwrap();
ids.push(id);
}
let list = checkpointer.list().await.unwrap();
assert_eq!(list.len(), 5);
for (i, id) in ids.iter().enumerate() {
let loaded = checkpointer.load(id).await.unwrap();
assert_eq!(loaded.input, format!("state_{}", i));
}
}
#[tokio::test]
async fn test_checkpointer_id_uniqueness() {
let checkpointer = ThreadSafeMemoryCheckpointer::<AgentState>::new();
let state = AgentState::new("same input".to_string());
let id1 = checkpointer.save(&state).await.unwrap();
let id2 = checkpointer.save(&state).await.unwrap();
assert_ne!(id1, id2);
}