futures-byteorder 1.0.1

A modern async byteorder library for the smol/futures-lite ecosystem
Documentation
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>](..);

                        // BE roundtrip
                        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);

                        // LE roundtrip
                        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);

                        // Verify matches std
                        assert_eq!(buf, value.to_le_bytes());
                    }

                    Ok(())
                }
            )*
        }
    };
}

random_roundtrip_tests!(u16, u32, u64, u128, i16, i32, i64, i128);