negicon_protocol/
lib.rs

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}