use selfware::agent::context::ContextCompressor;
use selfware::api::types::Message;
#[test]
fn test_compression_threshold_small() {
let compressor = ContextCompressor::new(100000);
let small: Vec<Message> = vec![Message::system("test")];
assert!(!compressor.should_compress(&small));
}
#[test]
fn test_compression_threshold_large() {
let compressor = ContextCompressor::new(1000);
let large: Vec<Message> = vec![
Message::system("A".repeat(4000)),
Message::user("B".repeat(4000)),
];
assert!(
compressor.should_compress(&large),
"Large messages should trigger compression"
);
}
#[test]
fn test_estimate_tokens_text() {
let compressor = ContextCompressor::new(10000);
let messages = vec![Message::user("hello world")];
let tokens = compressor.estimate_tokens(&messages);
assert!(tokens > 50 && tokens < 100);
}
#[test]
fn test_estimate_tokens_code() {
let compressor = ContextCompressor::new(10000);
let messages = vec![Message::user("fn main() { println!(); }")];
let tokens = compressor.estimate_tokens(&messages);
assert!(tokens > 55 && tokens < 70);
}
#[test]
fn test_hard_compress_preserves_recent() {
let compressor = ContextCompressor::new(100000);
let messages = vec![
Message::system("system"),
Message::user("old1"),
Message::assistant("old2"),
Message::user("old3"),
Message::assistant("old4"),
Message::user("old5"),
Message::assistant("old6"),
Message::user("recent1"),
Message::assistant("recent2"),
];
let compressed = compressor.hard_compress(&messages);
assert!(
compressed.len() >= 2,
"Should preserve at least system and some recent"
);
assert_eq!(compressed[0].role, "system");
}
#[test]
fn test_hard_compress_adds_compression_note() {
let compressor = ContextCompressor::new(100000);
let messages = vec![Message::system("system"), Message::user("user1")];
let compressed = compressor.hard_compress(&messages);
assert!(
compressed.len() >= 2,
"Should have at least system and note"
);
assert_eq!(compressed[0].role, "system");
assert!(compressed[1].content.contains("compressed"));
}