use async_io::block_on;
use futures_lite::io::Cursor;
use pastey::paste;
use super::*;
macro_rules! random_roundtrip_tests {
($($ty:ty),* $(,)?) => {
paste! {
$(
#[test]
fn [<test_random_roundtrip_ $ty>]() -> io::Result<()> {
let mut rng = fastrand::Rng::new();
for _ in 0..1000 {
let value = rng.[<$ty>](..);
let mut buf = Vec::new();
let mut writer = AsyncWriteBytes::new(&mut buf);
block_on(writer.[<write_ $ty>]::<BE>(value))?;
let mut reader = Cursor::new(&buf);
let mut reader = AsyncReadBytes::new(&mut reader);
assert_eq!(block_on(reader.[<read_ $ty>]::<BE>())?, value);
buf.clear();
let mut writer = AsyncWriteBytes::new(&mut buf);
block_on(writer.[<write_ $ty>]::<LE>(value))?;
let mut reader = Cursor::new(&buf);
let mut reader = AsyncReadBytes::new(&mut reader);
assert_eq!(block_on(reader.[<read_ $ty>]::<LE>())?, value);
assert_eq!(buf, value.to_le_bytes());
}
Ok(())
}
)*
}
};
}
random_roundtrip_tests!(u16, u32, u64, u128, i16, i32, i64, i128);