1#![no_std]
2
3pub mod negicon_message;
4pub mod ringbuf;
5pub mod util;
6
7pub use negicon_message::*;
8pub use util::*;
9
10#[cfg(test)]
11mod tests {
12 use crate::negicon_message::{InvalidMessage, NegiconFrame};
13
14 use super::*;
15
16 #[test]
17 fn frame_de_serialize() {
18 let frame = NegiconFrame::nop();
19 let serialized = frame.serialize();
20 let deserialized = NegiconFrame::deserialize(&serialized).unwrap();
21 assert_eq!(frame, deserialized);
22 }
23
24 #[test]
25 fn detect_corruption() {
26 let frame = NegiconFrame::nop();
27 let mut serialized = frame.serialize();
28 serialized[5] = serialized[5].reverse_bits();
29 let deserialized = NegiconFrame::deserialize(&serialized);
30 assert_eq!(InvalidMessage::CrcError, deserialized.unwrap_err());
31 }
32
33 #[test]
34 fn ping() {
35 let frame = NegiconFrame::ping(0x1234, NegiconModuleType::Router, 0x56, 39);
36 let serialized = frame.serialize();
37 let deserialized = NegiconFrame::deserialize(&serialized);
38 assert_eq!(frame, deserialized.unwrap());
39 assert!(frame.is_ping());
40 }
41
42 #[test]
43 fn nop() {
44 let frame = NegiconFrame::nop();
45 let serialized = frame.serialize();
46 let deserialized = NegiconFrame::deserialize(&serialized);
47 assert!(deserialized.unwrap().is_nop());
48 }
49
50 #[test]
51 fn module_message_double() {
52 let first = NegiconModuleEventShortMessage::new(1, 39, 42);
53 let second = NegiconModuleEventShortMessage::new(2, 40, 43);
54 let serialized = NegiconModuleEventShortMessage::serialize_double(&first, &second);
55 let (deserialized_first, deserialized_second) =
56 NegiconModuleEventShortMessage::deserialize_double(&serialized);
57 assert_eq!(first, deserialized_first);
58 assert_eq!(second, deserialized_second);
59 }
60}