#![cfg(miri)]
use abio::integer::U32;
use abio::{Codec, Endian};
fn gen_aligned_u32() -> U32 {
let mut buf = [0u8; 4];
getrandom::getrandom(&mut buf).expect("getrandom failed to fill the buffer.");
U32::read_aligned(&buf, Codec::default()).expect("failed to decode little endian U32")
}
#[test]
fn converting_to_byte_array() {
use std::thread;
use abio::{BytesOf, Chunk};
let codec = Codec::default();
let handle1 = thread::spawn(|| {
let mut array = [[0u8; 4]; 1024 * 8];
array.iter_mut().for_each(|item| *item = gen_aligned_u32().to_le_bytes());
array
});
let handle2 = thread::spawn(|| {
let mut array = [[0u8; 4]; 1024 * 8];
array.iter_mut().for_each(|item| *item = gen_aligned_u32().to_le_bytes());
array
});
let out1 = handle1.join().expect("failed to join handle1 with current thread");
let out2 = handle2.join().expect("failed to join handle1 with current thread");
let output = [out1, out2].concat();
for (index, value) in output.into_iter().enumerate() {
let chunk = Chunk::from(value);
let value = U32::read_aligned(chunk.as_bytes(), codec)
.expect("U32 could not run decode with given Codec");
let value2 = U32::from_le_bytes(chunk.into_array());
assert!(!value.bytes_of().is_empty(), "index {index} has an empty value.");
assert_eq!(
value.get(Endian::Little),
value2.get_le(),
"{value} != {value2}; expected both values to be equal"
);
}
}