use std::sync::Arc;
use synaptic_core::{MemoryStore, Message};
use synaptic_memory::{ChatMessageHistory, ConversationTokenBufferMemory};
fn new_store() -> Arc<ChatMessageHistory> {
Arc::new(ChatMessageHistory::new(Arc::new(
synaptic_store::InMemoryStore::new(),
)))
}
#[tokio::test]
async fn token_buffer_trims_old_messages() {
let store = new_store();
let token_buf = ConversationTokenBufferMemory::new(store, 5);
token_buf
.append("s1", Message::human("aaaa bbbb cccc dddd")) .await
.unwrap();
token_buf
.append("s1", Message::ai("eeee ffff")) .await
.unwrap();
token_buf
.append("s1", Message::human("gg")) .await
.unwrap();
let loaded = token_buf.load("s1").await.unwrap();
assert!(loaded.len() < 3);
assert_eq!(loaded.last().unwrap().content(), "gg");
}
#[tokio::test]
async fn token_buffer_returns_all_when_under_limit() {
let store = new_store();
let token_buf = ConversationTokenBufferMemory::new(store, 100);
token_buf
.append("s1", Message::human("hello"))
.await
.unwrap();
token_buf.append("s1", Message::ai("world")).await.unwrap();
let loaded = token_buf.load("s1").await.unwrap();
assert_eq!(loaded.len(), 2);
assert_eq!(loaded[0].content(), "hello");
assert_eq!(loaded[1].content(), "world");
}
#[tokio::test]
async fn token_buffer_clear() {
let store = new_store();
let token_buf = ConversationTokenBufferMemory::new(store, 100);
token_buf
.append("s1", Message::human("hello"))
.await
.unwrap();
token_buf.clear("s1").await.unwrap();
let loaded = token_buf.load("s1").await.unwrap();
assert!(loaded.is_empty());
}