mod model;
pub use model::*;
#[cfg(test)]
mod tests {
use super::*;
use crate::errors::MbusError;
#[test]
fn test_registers_new_success() {
let from_addr = 100;
let quantity = 10;
let regs = Registers::<20>::new(from_addr, quantity).unwrap();
assert_eq!(regs.from_address(), from_addr);
assert_eq!(regs.quantity(), quantity);
assert_eq!(regs.values()[0], 0);
}
#[test]
fn test_registers_new_invalid_quantity() {
let res = Registers::<5>::new(100, 6);
assert!(matches!(res, Err(MbusError::InvalidQuantity)));
}
#[test]
fn test_registers_with_values_success() {
let regs = Registers::<10>::new(100, 5).unwrap();
let data = [1, 2, 3, 4, 5];
let regs = regs.with_values(&data, 5).unwrap();
assert_eq!(regs.values()[0], 1);
assert_eq!(regs.values()[4], 5);
assert_eq!(regs.values()[5], 0); }
#[test]
fn test_registers_with_values_bounds_error() {
let regs = Registers::<10>::new(100, 5).unwrap();
let data = [1, 2, 3, 4, 5, 6];
let res = regs.with_values(&data, 6);
assert!(matches!(res, Err(MbusError::InvalidQuantity)));
}
#[test]
fn test_set_and_get_value_success() {
let mut regs = Registers::<10>::new(100, 5).unwrap();
regs.set_value(102, 0xABCD).unwrap();
assert_eq!(regs.value(102).unwrap(), 0xABCD);
assert_eq!(regs.values()[2], 0xABCD);
}
#[test]
fn test_set_value_out_of_range() {
let mut regs = Registers::<10>::new(100, 5).unwrap();
assert!(matches!(
regs.set_value(99, 1),
Err(MbusError::InvalidAddress)
));
assert!(matches!(
regs.set_value(105, 1),
Err(MbusError::InvalidAddress)
));
}
#[test]
fn test_get_value_out_of_range() {
let regs = Registers::<10>::new(100, 5).unwrap();
assert!(matches!(regs.value(105), Err(MbusError::InvalidAddress)));
}
#[test]
fn test_default_capacity() {
let regs: Registers = Registers::new(0, 125).unwrap();
assert_eq!(regs.values().len(), 125);
}
}