#[cfg(test)]
mod tests {
use espionox::agents::memory::{Message, MessageRole, MessageStack};
#[test]
fn message_stack_filter_by_behavior() {
let mut stack = MessageStack::new("SYSTEM");
stack.push(Message::new_user("USER"));
stack.push(Message::new_user("USE1"));
stack.push(Message::new_user("USE2"));
stack.push(Message::new_assistant("ASS"));
stack.push(Message::new_assistant("ASS1"));
let mut clone = stack.clone();
stack.mut_filter_by(&MessageRole::System, true);
clone.mut_filter_by(&MessageRole::System, false);
assert_eq!(1, stack.len());
assert_eq!(5, clone.len());
let clone_ref = clone.ref_filter_by(&MessageRole::User, false);
assert_eq!(2, clone_ref.len());
let clone_ref = clone_ref.filter_by(&MessageRole::User, true);
assert_eq!(0, clone_ref.len());
}
#[test]
fn message_stack_pop_behavior() {
let mut stack = MessageStack::new("SYSTEM");
stack.push(Message::new_user("USER"));
stack.push(Message::new_user("USE1"));
stack.push(Message::new_user("USE2"));
stack.push(Message::new_assistant("ASS"));
stack.push(Message::new_assistant("ASS1"));
assert_eq!("USE2", &stack.pop(Some(MessageRole::User)).unwrap().content);
assert_eq!(
"ASS1",
&stack.pop(Some(MessageRole::Assistant)).unwrap().content
);
assert_eq!("ASS", &stack.pop(None).unwrap().content);
let mut stack_ref = stack.ref_filter_by(&MessageRole::User, true);
let m = stack_ref.pop(None).unwrap();
assert_eq!("USE1", m.content);
println!("{:?}", stack_ref);
let m = stack_ref.pop(Some(MessageRole::System));
assert_eq!(None, m);
}
}