use arrayvec::{ArrayVec, CapacityError};
use crate::verbose::{Scaling, VariableInfoUnit};
#[derive(Debug, PartialEq, Clone)]
#[cfg_attr(feature = "serde", derive(serde::Serialize))]
pub struct I128Value<'a> {
pub variable_info: Option<VariableInfoUnit<'a>>,
pub scaling: Option<Scaling<i128>>,
pub value: i128,
}
impl<'a> I128Value<'a> {
pub fn add_to_msg<const CAP: usize>(
&self,
buf: &mut ArrayVec<u8, CAP>,
is_big_endian: bool,
) -> Result<(), CapacityError> {
if let Some(var_info) = &self.variable_info {
let name_len;
let unit_len;
if is_big_endian {
name_len = (var_info.name.len() as u16 + 1).to_be_bytes();
unit_len = (var_info.unit.len() as u16 + 1).to_be_bytes();
} else {
name_len = (var_info.name.len() as u16 + 1).to_le_bytes();
unit_len = (var_info.unit.len() as u16 + 1).to_le_bytes();
};
if let Some(scaler) = &self.scaling {
let type_info = [0b0010_0101, 0b0001_1000, 0b0000_0000, 0b0000_0000];
let quantization;
let offset: [u8; 16];
if is_big_endian {
quantization = scaler.quantization.to_be_bytes();
offset = scaler.offset.to_be_bytes();
} else {
quantization = scaler.quantization.to_le_bytes();
offset = scaler.offset.to_le_bytes();
}
buf.try_extend_from_slice(&type_info)?;
buf.try_extend_from_slice(&[name_len[0], name_len[1], unit_len[0], unit_len[1]])?;
buf.try_extend_from_slice(var_info.name.as_bytes())?;
if buf.remaining_capacity() > var_info.unit.len() + 2 {
unsafe { buf.push_unchecked(0) };
let _ = buf.try_extend_from_slice(var_info.unit.as_bytes());
unsafe { buf.push_unchecked(0) };
} else {
return Err(CapacityError::new(()));
}
buf.try_extend_from_slice(&quantization)?;
buf.try_extend_from_slice(&offset)?;
} else {
let type_info = [0b0010_0101, 0b0000_1000, 0b0000_0000, 0b0000_0000];
buf.try_extend_from_slice(&type_info)?;
buf.try_extend_from_slice(&[name_len[0], name_len[1], unit_len[0], unit_len[1]])?;
buf.try_extend_from_slice(var_info.name.as_bytes())?;
if buf.remaining_capacity() > var_info.unit.len() + 2 {
unsafe { buf.push_unchecked(0) };
let _ = buf.try_extend_from_slice(var_info.unit.as_bytes());
unsafe { buf.push_unchecked(0) };
} else {
return Err(CapacityError::new(()));
}
}
}
else if let Some(scaler) = &self.scaling {
let type_info: [u8; 4] = [0b0010_0101, 0b0001_0000, 0b0000_0000, 0b0000_0000];
let quantization;
let offset: [u8; 16];
if is_big_endian {
quantization = scaler.quantization.to_be_bytes();
offset = scaler.offset.to_be_bytes();
} else {
quantization = scaler.quantization.to_le_bytes();
offset = scaler.offset.to_le_bytes();
}
buf.try_extend_from_slice(&type_info)?;
buf.try_extend_from_slice(&quantization)?;
buf.try_extend_from_slice(&offset)?;
} else {
let type_info: [u8; 4] = [0b0010_0101, 0b0000_0000, 0b0000_0000, 0b0000_0000];
buf.try_extend_from_slice(&type_info)?;
}
if is_big_endian {
buf.try_extend_from_slice(&self.value.to_be_bytes())
} else {
buf.try_extend_from_slice(&self.value.to_le_bytes())
}
}
}
#[cfg(test)]
mod test {
use super::*;
use crate::verbose::VerboseValue;
use crate::verbose::VerboseValue::I128;
use alloc::vec::Vec;
use proptest::prelude::*;
use std::format;
proptest! {
#[test]
fn write_read(value in any::<i128>(), ref name in "\\pc{0,20}", ref unit in "\\pc{0,20}", quantization in any::<f32>(), offset in any::<i128>()) {
const MAX_SYMBOL_LENGTH_NAME: usize = 20;
const MAX_SYMBOL_LENGTH_UNIT: usize = 20;
const FIXED_POINT_LENGTH: usize = 20;
const BYTES_NEEDED: usize = 20;
const BYTES_NEEDED_WITH_NAME: usize = 6 + BYTES_NEEDED;
const BUFFER_SIZE_NO_FIXED_POINT: usize = MAX_SYMBOL_LENGTH_NAME * 4 + MAX_SYMBOL_LENGTH_UNIT * 4 + BYTES_NEEDED_WITH_NAME;
const BUFFER_SIZE_FIXED_POINT: usize = BUFFER_SIZE_NO_FIXED_POINT + FIXED_POINT_LENGTH;
{
let mut msg_buff: ArrayVec<u8, BUFFER_SIZE_FIXED_POINT> = ArrayVec::new();
let slice_len = name.len() + unit.len() + FIXED_POINT_LENGTH + BYTES_NEEDED_WITH_NAME;
let is_big_endian = true;
let variable_info = Some(VariableInfoUnit { name , unit });
let scaling = Some(Scaling { quantization, offset });
let i128_value = I128Value {variable_info, scaling, value};
let mut content_buff = Vec::with_capacity(slice_len);
let len_name_be = (name.len() as u16 + 1).to_be_bytes();
let len_unit_be = (unit.len() as u16 + 1).to_be_bytes();
prop_assert_eq!(i128_value.add_to_msg(&mut msg_buff, is_big_endian), Ok(()));
content_buff.extend_from_slice(&[0b0010_0101, 0b0001_1000, 0b0000_0000, 0b0000_0000, len_name_be[0], len_name_be[1], len_unit_be[0], len_unit_be[1]]);
content_buff.extend_from_slice(name.as_bytes());
content_buff.push(0);
content_buff.extend_from_slice(unit.as_bytes());
content_buff.push(0);
content_buff.extend_from_slice(&quantization.to_be_bytes());
content_buff.extend_from_slice(&offset.to_be_bytes());
content_buff.extend_from_slice(&value.to_be_bytes());
prop_assert_eq!(&msg_buff[..slice_len], &content_buff[..]);
let parsed_back = VerboseValue::from_slice(&msg_buff, is_big_endian);
prop_assert_eq!(parsed_back, Ok((I128(i128_value),&[] as &[u8])));
}
{
let mut msg_buff: ArrayVec<u8, BUFFER_SIZE_FIXED_POINT> = ArrayVec::new();
let slice_len = name.len() + unit.len() + FIXED_POINT_LENGTH + BYTES_NEEDED_WITH_NAME;
let is_big_endian = true;
let variable_info = Some(VariableInfoUnit { name , unit });
let scaling = Some(Scaling { quantization, offset });
let i128_value = I128Value {variable_info, scaling, value};
let mut content_buff = Vec::with_capacity(slice_len);
let len_name_be = (name.len() as u16 + 1).to_be_bytes();
let len_unit_be = (unit.len() as u16 + 1).to_be_bytes();
prop_assert_eq!(i128_value.add_to_msg(&mut msg_buff, is_big_endian), Ok(()));
content_buff.extend_from_slice(&[0b0010_0101, 0b0001_1000, 0b0000_0000, 0b0000_0000, len_name_be[0], len_name_be[1], len_unit_be[0], len_unit_be[1]]);
content_buff.extend_from_slice(name.as_bytes());
content_buff.push(0);
content_buff.extend_from_slice(unit.as_bytes());
content_buff.push(0);
content_buff.extend_from_slice(&quantization.to_be_bytes());
content_buff.extend_from_slice(&offset.to_be_bytes());
content_buff.extend_from_slice(&value.to_be_bytes());
prop_assert_eq!(&msg_buff[..slice_len], &content_buff[..]);
let parsed_back = VerboseValue::from_slice(&msg_buff, is_big_endian);
prop_assert_eq!(parsed_back, Ok((I128(i128_value),&[] as &[u8])));
}
{
let mut msg_buff: ArrayVec<u8, BUFFER_SIZE_FIXED_POINT> = ArrayVec::new();
let slice_len = name.len() + unit.len() + FIXED_POINT_LENGTH + BYTES_NEEDED_WITH_NAME;
let is_big_endian = false;
let variable_info = Some(VariableInfoUnit { name , unit });
let scaling = Some(Scaling { quantization, offset });
let i128_value = I128Value {variable_info, scaling, value};
let mut content_buff = Vec::with_capacity(slice_len);
let len_name_le = (name.len() as u16 + 1).to_le_bytes();
let len_unit_le = (unit.len() as u16 + 1).to_le_bytes();
prop_assert_eq!(i128_value.add_to_msg(&mut msg_buff, is_big_endian), Ok(()));
content_buff.extend_from_slice(&[0b0010_0101, 0b0001_1000, 0b0000_0000, 0b0000_0000, len_name_le[0], len_name_le[1], len_unit_le[0], len_unit_le[1]]);
content_buff.extend_from_slice(name.as_bytes());
content_buff.push(0);
content_buff.extend_from_slice(unit.as_bytes());
content_buff.push(0);
content_buff.extend_from_slice(&quantization.to_le_bytes());
content_buff.extend_from_slice(&offset.to_le_bytes());
content_buff.extend_from_slice(&value.to_le_bytes());
prop_assert_eq!(&msg_buff[..slice_len], &content_buff[..]);
let parsed_back = VerboseValue::from_slice(&msg_buff, is_big_endian);
prop_assert_eq!(parsed_back, Ok((I128(i128_value),&[] as &[u8])));
}
{
let mut msg_buff: ArrayVec<u8, BUFFER_SIZE_NO_FIXED_POINT> = ArrayVec::new();
let slice_len = name.len() + unit.len() + BYTES_NEEDED_WITH_NAME;
let is_big_endian = true;
let variable_info = Some(VariableInfoUnit { name , unit });
let scaling = None;
let i128_value = I128Value {variable_info, scaling, value};
let mut content_buff = Vec::with_capacity(slice_len);
let len_name_be = (name.len() as u16 + 1).to_be_bytes();
let len_unit_be = (unit.len() as u16 + 1).to_be_bytes();
prop_assert_eq!(i128_value.add_to_msg(&mut msg_buff, is_big_endian), Ok(()));
content_buff.extend_from_slice(&[0b0010_0101, 0b0000_1000, 0b0000_0000, 0b0000_0000, len_name_be[0], len_name_be[1], len_unit_be[0], len_unit_be[1]]);
content_buff.extend_from_slice(name.as_bytes());
content_buff.push(0);
content_buff.extend_from_slice(unit.as_bytes());
content_buff.push(0);
content_buff.extend_from_slice(&value.to_be_bytes());
prop_assert_eq!(&msg_buff[..slice_len], &content_buff[..]);
let parsed_back = VerboseValue::from_slice(&msg_buff, is_big_endian);
prop_assert_eq!(parsed_back, Ok((I128(i128_value),&[] as &[u8])));
}
{
let mut msg_buff: ArrayVec<u8, BUFFER_SIZE_NO_FIXED_POINT> = ArrayVec::new();
let slice_len = name.len() + unit.len() + BYTES_NEEDED_WITH_NAME;
let is_big_endian = false;
let variable_info = Some(VariableInfoUnit { name , unit });
let scaling = None;
let i128_value = I128Value {variable_info, scaling, value};
let mut content_buff = Vec::with_capacity(slice_len);
let len_name_le = (name.len() as u16 + 1).to_le_bytes();
let len_unit_le = (unit.len() as u16 + 1).to_le_bytes();
prop_assert_eq!(i128_value.add_to_msg(&mut msg_buff, is_big_endian), Ok(()));
content_buff.extend_from_slice(&[0b0010_0101, 0b0000_1000, 0b0000_0000, 0b0000_0000, len_name_le[0], len_name_le[1], len_unit_le[0], len_unit_le[1]]);
content_buff.extend_from_slice(name.as_bytes());
content_buff.push(0);
content_buff.extend_from_slice(unit.as_bytes());
content_buff.push(0);
content_buff.extend_from_slice(&value.to_le_bytes());
prop_assert_eq!(&msg_buff[..slice_len], &content_buff[..]);
let parsed_back = VerboseValue::from_slice(&msg_buff, is_big_endian);
prop_assert_eq!(parsed_back, Ok((I128(i128_value),&[] as &[u8])));
}
{
let mut msg_buff: ArrayVec<u8, BUFFER_SIZE_NO_FIXED_POINT> = ArrayVec::new();
let slice_len = BYTES_NEEDED;
let is_big_endian = true;
let variable_info = None;
let scaling = None;
let i128_value = I128Value {variable_info, scaling, value};
let mut content_buff = Vec::with_capacity(slice_len);
prop_assert_eq!(i128_value.add_to_msg(&mut msg_buff, is_big_endian), Ok(()));
content_buff.extend_from_slice(&[0b0010_0101, 0b0000_0000, 0b0000_0000, 0b0000_0000]);
content_buff.extend_from_slice(&value.to_be_bytes());
prop_assert_eq!(&msg_buff[..slice_len], &content_buff[..]);
let parsed_back = VerboseValue::from_slice(&msg_buff, is_big_endian);
prop_assert_eq!(parsed_back, Ok((I128(i128_value),&[] as &[u8])));
}
{
let mut msg_buff: ArrayVec<u8, BUFFER_SIZE_NO_FIXED_POINT> = ArrayVec::new();
let slice_len = BYTES_NEEDED;
let is_big_endian = false;
let variable_info = None;
let scaling = None;
let i128_value = I128Value {variable_info, scaling, value};
let mut content_buff = Vec::with_capacity(slice_len);
prop_assert_eq!(i128_value.add_to_msg(&mut msg_buff, is_big_endian), Ok(()));
content_buff.extend_from_slice(&[0b0010_0101, 0b0000_0000, 0b0000_0000, 0b0000_0000]);
content_buff.extend_from_slice(&value.to_le_bytes());
prop_assert_eq!(&msg_buff[..slice_len], &content_buff[..]);
let parsed_back = VerboseValue::from_slice(&msg_buff, is_big_endian);
prop_assert_eq!(parsed_back, Ok((I128(i128_value),&[] as &[u8])));
}
{
let mut msg_buff: ArrayVec<u8, BUFFER_SIZE_FIXED_POINT> = ArrayVec::new();
let slice_len = FIXED_POINT_LENGTH + BYTES_NEEDED;
let is_big_endian = true;
let variable_info = None;
let scaling = Some(Scaling { quantization, offset });
let i128_value = I128Value {variable_info, scaling, value};
let mut content_buff = Vec::with_capacity(slice_len);
prop_assert_eq!(i128_value.add_to_msg(&mut msg_buff, is_big_endian), Ok(()));
content_buff.extend_from_slice(&[0b0010_0101, 0b0001_0000, 0b0000_0000, 0b0000_0000]);
content_buff.extend_from_slice(&quantization.to_be_bytes());
content_buff.extend_from_slice(&offset.to_be_bytes());
content_buff.extend_from_slice(&value.to_be_bytes());
prop_assert_eq!(&msg_buff[..slice_len], &content_buff[..]);
let parsed_back = VerboseValue::from_slice(&msg_buff, is_big_endian);
prop_assert_eq!(parsed_back, Ok((I128(i128_value),&[] as &[u8])));
}
{
let mut msg_buff: ArrayVec<u8, BUFFER_SIZE_FIXED_POINT> = ArrayVec::new();
let slice_len = FIXED_POINT_LENGTH + BYTES_NEEDED;
let is_big_endian = false;
let variable_info = None;
let scaling = Some(Scaling { quantization, offset });
let i128_value = I128Value {variable_info, scaling, value};
let mut content_buff = Vec::with_capacity(slice_len);
prop_assert_eq!(i128_value.add_to_msg(&mut msg_buff, is_big_endian), Ok(()));
content_buff.extend_from_slice(&[0b0010_0101, 0b0001_0000, 0b0000_0000, 0b0000_0000]);
content_buff.extend_from_slice(&quantization.to_le_bytes());
content_buff.extend_from_slice(&offset.to_le_bytes());
content_buff.extend_from_slice(&value.to_le_bytes());
prop_assert_eq!(&msg_buff[..slice_len], &content_buff[..]);
let parsed_back = VerboseValue::from_slice(&msg_buff, is_big_endian);
prop_assert_eq!(parsed_back, Ok((I128(i128_value),&[] as &[u8])));
}
{
const SLICE_LEN: usize = FIXED_POINT_LENGTH + BYTES_NEEDED_WITH_NAME - 1;
let variable_info = Some(VariableInfoUnit { name , unit });
let scaling = Some(Scaling { quantization, offset });
let i128_value = I128Value {variable_info, scaling, value};
let is_big_endian = true;
let mut msg_buff: ArrayVec<u8, SLICE_LEN> = ArrayVec::new();
prop_assert_eq!(i128_value.add_to_msg(&mut msg_buff, is_big_endian), Err(CapacityError::new(())));
let mut msg_buff: ArrayVec<u8, 0> = ArrayVec::new();
prop_assert_eq!(i128_value.add_to_msg(&mut msg_buff, is_big_endian), Err(CapacityError::new(())));
}
{
const SLICE_LEN: usize = FIXED_POINT_LENGTH + BYTES_NEEDED_WITH_NAME - 1;
let variable_info = Some(VariableInfoUnit { name , unit });
let scaling = Some(Scaling { quantization, offset });
let i128_value = I128Value {variable_info, scaling, value};
let is_big_endian = false;
let mut msg_buff: ArrayVec<u8, SLICE_LEN> = ArrayVec::new();
prop_assert_eq!(i128_value.add_to_msg(&mut msg_buff, is_big_endian), Err(CapacityError::new(())));
let mut msg_buff: ArrayVec<u8, 0> = ArrayVec::new();
prop_assert_eq!(i128_value.add_to_msg(&mut msg_buff, is_big_endian), Err(CapacityError::new(())));
}
{
const SLICE_LEN: usize = BYTES_NEEDED_WITH_NAME - 1;
let variable_info = Some(VariableInfoUnit { name , unit });
let scaling = None;
let i128_value = I128Value {variable_info, scaling, value};
let is_big_endian = true;
let mut msg_buff: ArrayVec<u8, SLICE_LEN> = ArrayVec::new();
prop_assert_eq!(i128_value.add_to_msg(&mut msg_buff, is_big_endian), Err(CapacityError::new(())));
let mut msg_buff: ArrayVec<u8, 0> = ArrayVec::new();
prop_assert_eq!(i128_value.add_to_msg(&mut msg_buff, is_big_endian), Err(CapacityError::new(())));
}
{
const SLICE_LEN: usize = BYTES_NEEDED_WITH_NAME - 1;
let variable_info = Some(VariableInfoUnit { name , unit });
let scaling = None;
let i128_value = I128Value {variable_info, scaling, value};
let is_big_endian = false;
let mut msg_buff: ArrayVec<u8, SLICE_LEN> = ArrayVec::new();
prop_assert_eq!(i128_value.add_to_msg(&mut msg_buff, is_big_endian), Err(CapacityError::new(())));
let mut msg_buff: ArrayVec<u8, 0> = ArrayVec::new();
prop_assert_eq!(i128_value.add_to_msg(&mut msg_buff, is_big_endian), Err(CapacityError::new(())));
}
{
const SLICE_LEN: usize = BYTES_NEEDED - 1;
let variable_info = None;
let scaling = None;
let i128_value = I128Value {variable_info, scaling, value};
let is_big_endian = true;
let mut msg_buff: ArrayVec<u8, SLICE_LEN> = ArrayVec::new();
prop_assert_eq!(i128_value.add_to_msg(&mut msg_buff, is_big_endian), Err(CapacityError::new(())));
let mut msg_buff: ArrayVec<u8, 0> = ArrayVec::new();
prop_assert_eq!(i128_value.add_to_msg(&mut msg_buff, is_big_endian), Err(CapacityError::new(())));
}
{
const SLICE_LEN: usize = BYTES_NEEDED - 1;
let variable_info = None;
let scaling = None;
let i128_value = I128Value {variable_info, scaling, value};
let is_big_endian = false;
let mut msg_buff: ArrayVec<u8, SLICE_LEN> = ArrayVec::new();
prop_assert_eq!(i128_value.add_to_msg(&mut msg_buff, is_big_endian), Err(CapacityError::new(())));
let mut msg_buff: ArrayVec<u8, 0> = ArrayVec::new();
prop_assert_eq!(i128_value.add_to_msg(&mut msg_buff, is_big_endian), Err(CapacityError::new(())));
}
{
const SLICE_LEN: usize = FIXED_POINT_LENGTH + BYTES_NEEDED - 1;
let variable_info = None;
let scaling = Some(Scaling { quantization, offset });
let i128_value = I128Value {variable_info, scaling, value};
let is_big_endian = true;
let mut msg_buff: ArrayVec<u8, SLICE_LEN> = ArrayVec::new();
prop_assert_eq!(i128_value.add_to_msg(&mut msg_buff, is_big_endian), Err(CapacityError::new(())));
let mut msg_buff: ArrayVec<u8, 0> = ArrayVec::new();
prop_assert_eq!(i128_value.add_to_msg(&mut msg_buff, is_big_endian), Err(CapacityError::new(())));
}
{
const SLICE_LEN: usize = FIXED_POINT_LENGTH + BYTES_NEEDED - 1;
let variable_info = None;
let scaling = Some(Scaling { quantization, offset });
let i128_value = I128Value {variable_info, scaling, value};
let is_big_endian = false;
let mut msg_buff: ArrayVec<u8, SLICE_LEN> = ArrayVec::new();
prop_assert_eq!(i128_value.add_to_msg(&mut msg_buff, is_big_endian), Err(CapacityError::new(())));
let mut msg_buff: ArrayVec<u8, 0> = ArrayVec::new();
prop_assert_eq!(i128_value.add_to_msg(&mut msg_buff, is_big_endian), Err(CapacityError::new(())));
}
{
const SLICE_LEN: usize = 4; let variable_info = Some(VariableInfoUnit { name , unit });
let scaling = Some(Scaling { quantization, offset });
let i128_value = I128Value {variable_info, scaling, value};
let is_big_endian = true;
let mut msg_buff: ArrayVec<u8, SLICE_LEN> = ArrayVec::new();
prop_assert_eq!(i128_value.add_to_msg(&mut msg_buff, is_big_endian), Err(CapacityError::new(())));
let mut msg_buff: ArrayVec<u8, 0> = ArrayVec::new();
prop_assert_eq!(i128_value.add_to_msg(&mut msg_buff, is_big_endian), Err(CapacityError::new(())));
}
{
const SLICE_LEN: usize = 4; let variable_info = Some(VariableInfoUnit { name , unit });
let scaling = None;
let i128_value = I128Value {variable_info, scaling, value};
let is_big_endian = true;
let mut msg_buff: ArrayVec<u8, SLICE_LEN> = ArrayVec::new();
prop_assert_eq!(i128_value.add_to_msg(&mut msg_buff, is_big_endian), Err(CapacityError::new(())));
let mut msg_buff: ArrayVec<u8, 0> = ArrayVec::new();
prop_assert_eq!(i128_value.add_to_msg(&mut msg_buff, is_big_endian), Err(CapacityError::new(())));
}
{
const SLICE_LEN: usize = BYTES_NEEDED + FIXED_POINT_LENGTH + 5;
let variable_info = Some(VariableInfoUnit { name:"Abc" , unit:"defg" });
let scaling = Some(Scaling { quantization, offset });
let i128_value = I128Value {variable_info, scaling, value};
let is_big_endian = true;
let mut msg_buff: ArrayVec<u8, SLICE_LEN> = ArrayVec::new();
prop_assert_eq!(i128_value.add_to_msg(&mut msg_buff, is_big_endian), Err(CapacityError::new(())));
let mut msg_buff: ArrayVec<u8, 0> = ArrayVec::new();
prop_assert_eq!(i128_value.add_to_msg(&mut msg_buff, is_big_endian), Err(CapacityError::new(())));
}
{
const SLICE_LEN: usize = 9;
let variable_info = None;
let scaling = Some(Scaling { quantization, offset });
let i128_value = I128Value {variable_info, scaling, value};
let is_big_endian = true;
let mut msg_buff: ArrayVec<u8, SLICE_LEN> = ArrayVec::new();
prop_assert_eq!(i128_value.add_to_msg(&mut msg_buff, is_big_endian), Err(CapacityError::new(())));
let mut msg_buff: ArrayVec<u8, 0> = ArrayVec::new();
prop_assert_eq!(i128_value.add_to_msg(&mut msg_buff, is_big_endian), Err(CapacityError::new(())));
}
{
const SLICE_LEN: usize = 17;
let variable_info = Some(VariableInfoUnit { name:"Abc" , unit:"defg" });
let scaling = Some(Scaling { quantization, offset });
let i128_value = I128Value {variable_info, scaling, value};
let is_big_endian = true;
let mut msg_buff: ArrayVec<u8, SLICE_LEN> = ArrayVec::new();
prop_assert_eq!(i128_value.add_to_msg(&mut msg_buff, is_big_endian), Err(CapacityError::new(())));
let mut msg_buff: ArrayVec<u8, 0> = ArrayVec::new();
prop_assert_eq!(i128_value.add_to_msg(&mut msg_buff, is_big_endian), Err(CapacityError::new(())));
}
{
const SLICE_LEN: usize = 7;
let variable_info = None;
let scaling = Some(Scaling { quantization, offset });
let i128_value = I128Value {variable_info, scaling, value};
let is_big_endian = true;
let mut msg_buff: ArrayVec<u8, SLICE_LEN> = ArrayVec::new();
prop_assert_eq!(i128_value.add_to_msg(&mut msg_buff, is_big_endian), Err(CapacityError::new(())));
let mut msg_buff: ArrayVec<u8, 0> = ArrayVec::new();
prop_assert_eq!(i128_value.add_to_msg(&mut msg_buff, is_big_endian), Err(CapacityError::new(())));
}
}
}
proptest! {
#[test]
fn debug(value in any::<i128>(), ref name in "\\pc{0,20}", ref unit in "\\pc{0,20}", quantization in any::<f32>(), offset in any::<i128>()) {
{ let value_struct: I128Value = I128Value {variable_info: Some(VariableInfoUnit { name, unit }), scaling: Some(Scaling { quantization, offset }), value};
assert_eq!(
format!(
"I128Value {{ variable_info: {:?}, scaling: {:?}, value: {:?} }}",
value_struct.variable_info,
value_struct.scaling,
value_struct.value,
),
format!("{:?}", value_struct)
);
}
{ let value_struct: I128Value = I128Value {variable_info: Some(VariableInfoUnit { name, unit }), scaling: None, value};
assert_eq!(
format!(
"I128Value {{ variable_info: {:?}, scaling: {:?}, value: {:?} }}",
value_struct.variable_info,
value_struct.scaling,
value_struct.value,
),
format!("{:?}", value_struct)
);
}
{ let value_struct: I128Value = I128Value {variable_info: None, scaling: None, value};
assert_eq!(
format!(
"I128Value {{ variable_info: {:?}, scaling: {:?}, value: {:?} }}",
value_struct.variable_info,
value_struct.scaling,
value_struct.value,
),
format!("{:?}", value_struct)
);
}
{ let value_struct: I128Value = I128Value {variable_info: None, scaling: Some(Scaling { quantization, offset }), value};
assert_eq!(
format!(
"I128Value {{ variable_info: {:?}, scaling: {:?}, value: {:?} }}",
value_struct.variable_info,
value_struct.scaling,
value_struct.value,
),
format!("{:?}", value_struct)
);
}
}
}
}