#![no_std]
pub mod negicon_message;
pub mod ringbuf;
pub mod util;
pub use negicon_message::*;
pub use util::*;
#[cfg(test)]
mod tests {
use crate::negicon_message::{InvalidMessage, NegiconFrame};
use super::*;
#[test]
fn frame_de_serialize() {
let frame = NegiconFrame::nop();
let serialized = frame.serialize();
let deserialized = NegiconFrame::deserialize(&serialized).unwrap();
assert_eq!(frame, deserialized);
}
#[test]
fn detect_corruption() {
let frame = NegiconFrame::nop();
let mut serialized = frame.serialize();
serialized[5] = serialized[5].reverse_bits();
let deserialized = NegiconFrame::deserialize(&serialized);
assert_eq!(InvalidMessage::CrcError, deserialized.unwrap_err());
}
#[test]
fn ping() {
let frame = NegiconFrame::ping(0x1234, NegiconModuleType::Router, 0x56, 39);
let serialized = frame.serialize();
let deserialized = NegiconFrame::deserialize(&serialized);
assert_eq!(frame, deserialized.unwrap());
assert!(frame.is_ping());
}
#[test]
fn nop() {
let frame = NegiconFrame::nop();
let serialized = frame.serialize();
let deserialized = NegiconFrame::deserialize(&serialized);
assert!(deserialized.unwrap().is_nop());
}
#[test]
fn module_message_double() {
let first = NegiconModuleEventShortMessage::new(1, 39, 42);
let second = NegiconModuleEventShortMessage::new(2, 40, 43);
let serialized = NegiconModuleEventShortMessage::serialize_double(&first, &second);
let (deserialized_first, deserialized_second) =
NegiconModuleEventShortMessage::deserialize_double(&serialized);
assert_eq!(first, deserialized_first);
assert_eq!(second, deserialized_second);
}
}