pub use crate::msg::*;
mod msg;
#[cfg(test)]
mod tests {
use super::*;
use bebop::Record;
#[test]
fn test_msg_serialization() {
let original = Msg {
body: "Test message",
from_id: "user1",
id: "test123",
to_ids: vec!["user2", "user3"],
_type: "test",
};
let mut serialized = Vec::new();
original.serialize(&mut serialized).unwrap();
assert!(!serialized.is_empty());
let deserialized = Msg::deserialize(&serialized).expect("Deserialization failed");
assert_eq!(original, deserialized);
}
#[test]
fn test_empty_to_ids() {
let msg = Msg {
body: "Broadcast message",
from_id: "system",
id: "broadcast1",
to_ids: vec![],
_type: "broadcast",
};
let mut bytes = Vec::new();
msg.serialize(&mut bytes).unwrap();
let decoded = Msg::deserialize(&bytes).unwrap();
assert_eq!(msg.to_ids.len(), 0);
assert_eq!(decoded.to_ids.len(), 0);
}
#[test]
fn test_performance_benchmark() {
let user_ids: Vec<String> = (0..10).map(|i| format!("user{}", i)).collect();
let user_refs: Vec<&str> = user_ids.iter().map(|s| s.as_str()).collect();
let body = "x".repeat(1000);
let msg = Msg {
body: &body, from_id: "perf_test",
id: "perf123",
to_ids: user_refs,
_type: "performance",
};
let start = std::time::Instant::now();
for _ in 0..1000 {
let mut bytes = Vec::new();
msg.serialize(&mut bytes).unwrap();
let _decoded = Msg::deserialize(&bytes).unwrap();
}
let duration = start.elapsed();
println!("1000 serialize/deserialize cycles took: {:?}", duration);
assert!(duration.as_millis() < 100, "Performance test failed: took {:?}", duration);
}
}