mod model;
pub use model::*;
#[cfg(test)]
mod tests {
use super::*;
use crate::errors::MbusError;
#[test]
fn test_coils_new() {
let mut values = [0u8; MAX_COIL_BYTES];
values[0] = 0b0000_1011;
let coils = Coils::new(100, 8)
.unwrap()
.with_values(&values, 8)
.expect("Should successfully load values");
assert_eq!(coils.from_address(), 100);
assert_eq!(coils.quantity(), 8);
assert_eq!(coils.values(), &values);
}
#[test]
fn test_coils_get_value() {
let mut values = [0u8; MAX_COIL_BYTES];
values[0] = 0x05;
let coils = Coils::new(10, 8).unwrap().with_values(&values, 8).unwrap();
assert_eq!(coils.value(10).unwrap(), true); assert_eq!(coils.value(11).unwrap(), false); assert_eq!(coils.value(12).unwrap(), true); assert_eq!(coils.value(17).unwrap(), false); }
#[test]
fn test_coils_get_value_out_of_bounds() {
let values = [0u8; MAX_COIL_BYTES];
let coils = Coils::new(10, 8).unwrap().with_values(&values, 8).unwrap();
assert_eq!(coils.value(9), Err(MbusError::InvalidAddress));
assert_eq!(coils.value(18), Err(MbusError::InvalidAddress));
}
#[test]
fn test_coils_set_value() {
let values = [0u8; MAX_COIL_BYTES];
let mut coils = Coils::new(20, 16)
.unwrap()
.with_values(&values, 16)
.unwrap();
assert_eq!(coils.set_value(22, true), Ok(()));
assert_eq!(coils.value(22).unwrap(), true);
assert_eq!(coils.set_value(30, true), Ok(()));
assert_eq!(coils.value(30).unwrap(), true);
assert_eq!(coils.set_value(22, false), Ok(()));
assert_eq!(coils.value(22).unwrap(), false);
assert_eq!(coils.value(30).unwrap(), true);
}
#[test]
fn test_coils_set_value_out_of_bounds() {
let values = [0u8; MAX_COIL_BYTES];
let mut coils = Coils::new(10, 8).unwrap().with_values(&values, 8).unwrap();
assert_eq!(coils.set_value(18, true), Err(MbusError::InvalidAddress));
assert_eq!(coils.set_value(50, true), Err(MbusError::InvalidAddress));
}
}