1pub use crate::msg::*;
30
31mod msg;
33
34#[cfg(test)]
35mod tests {
36 use super::*;
37 use bebop::Record; #[test]
40 fn test_msg_serialization() {
41 let original = Msg {
42 body: "Test message",
43 from_id: "user1",
44 id: "test123",
45 to_ids: vec!["user2", "user3"],
46 _type: "test",
47 };
48
49 let mut serialized = Vec::new();
51 original.serialize(&mut serialized).unwrap();
52 assert!(!serialized.is_empty());
53
54 let deserialized = Msg::deserialize(&serialized).expect("Deserialization failed");
56
57 assert_eq!(original, deserialized);
59 }
60
61 #[test]
62 fn test_empty_to_ids() {
63 let msg = Msg {
64 body: "Broadcast message",
65 from_id: "system",
66 id: "broadcast1",
67 to_ids: vec![],
68 _type: "broadcast",
69 };
70
71 let mut bytes = Vec::new();
72 msg.serialize(&mut bytes).unwrap();
73 let decoded = Msg::deserialize(&bytes).unwrap();
74 assert_eq!(msg.to_ids.len(), 0);
75 assert_eq!(decoded.to_ids.len(), 0);
76 }
77
78 #[test]
79 fn test_performance_benchmark() {
80 let user_ids: Vec<String> = (0..10).map(|i| format!("user{}", i)).collect();
82 let user_refs: Vec<&str> = user_ids.iter().map(|s| s.as_str()).collect();
83 let body = "x".repeat(1000);
84
85 let msg = Msg {
86 body: &body, from_id: "perf_test",
88 id: "perf123",
89 to_ids: user_refs,
90 _type: "performance",
91 };
92
93 let start = std::time::Instant::now();
94
95 for _ in 0..1000 {
97 let mut bytes = Vec::new();
98 msg.serialize(&mut bytes).unwrap();
99 let _decoded = Msg::deserialize(&bytes).unwrap();
100 }
101
102 let duration = start.elapsed();
103 println!("1000 serialize/deserialize cycles took: {:?}", duration);
104
105 assert!(duration.as_millis() < 100, "Performance test failed: took {:?}", duration);
107 }
108}