qubit-io 0.3.0

Small stream I/O trait utilities for Rust
Documentation
use qubit_io::{
    BigEndian,
    BinaryCodec,
    LittleEndian,
};

#[test]
fn test_binary_codec_exposes_required_min_buffer_len() {
    assert_eq!(1, BinaryCodec::<u8, BigEndian>::REQUIRED_MIN_BUFFER_LEN);
    assert_eq!(1, BinaryCodec::<i8, LittleEndian>::REQUIRED_MIN_BUFFER_LEN);
    assert_eq!(2, BinaryCodec::<u16, BigEndian>::REQUIRED_MIN_BUFFER_LEN);
    assert_eq!(4, BinaryCodec::<u32, LittleEndian>::REQUIRED_MIN_BUFFER_LEN);
    assert_eq!(8, BinaryCodec::<u64, BigEndian>::REQUIRED_MIN_BUFFER_LEN);
    assert_eq!(16, BinaryCodec::<u128, LittleEndian>::REQUIRED_MIN_BUFFER_LEN);
    assert_eq!(4, BinaryCodec::<f32, BigEndian>::REQUIRED_MIN_BUFFER_LEN);
    assert_eq!(8, BinaryCodec::<f64, LittleEndian>::REQUIRED_MIN_BUFFER_LEN);
}

#[test]
fn test_binary_codec_reads_from_explicit_index_unchecked() {
    let input = [0xaa, 0x12, 0x34, 0x56, 0x78, 0xbb];

    let value = unsafe { BinaryCodec::<u32, BigEndian>::read_unchecked(&input, 1) };
    assert_eq!(0x1234_5678, value);

    let value = unsafe { BinaryCodec::<u32, LittleEndian>::read_unchecked(&input, 1) };
    assert_eq!(0x7856_3412, value);
}

#[test]
fn test_binary_codec_writes_to_explicit_index_unchecked() {
    let mut output = [0xaa, 0, 0, 0, 0, 0xbb];

    unsafe {
        BinaryCodec::<u32, BigEndian>::write_unchecked(&mut output, 1, 0x1234_5678);
    }
    assert_eq!([0xaa, 0x12, 0x34, 0x56, 0x78, 0xbb], output);

    unsafe {
        BinaryCodec::<u32, LittleEndian>::write_unchecked(&mut output, 1, 0x1234_5678);
    }
    assert_eq!([0xaa, 0x78, 0x56, 0x34, 0x12, 0xbb], output);
}

#[test]
fn test_binary_codec_handles_byte_signed_and_float_values() {
    let mut output = [0u8; 16];

    unsafe {
        BinaryCodec::<u8, BigEndian>::write_unchecked(&mut output, 0, 0x7f);
        BinaryCodec::<i8, LittleEndian>::write_unchecked(&mut output, 1, -1);
        BinaryCodec::<f32, BigEndian>::write_unchecked(&mut output, 2, 12.5);
        BinaryCodec::<f64, LittleEndian>::write_unchecked(&mut output, 6, -25.25);
    }

    assert_eq!(0x7f, unsafe {
        BinaryCodec::<u8, LittleEndian>::read_unchecked(&output, 0)
    });
    assert_eq!(-1, unsafe { BinaryCodec::<i8, BigEndian>::read_unchecked(&output, 1) });
    assert_eq!(12.5, unsafe {
        BinaryCodec::<f32, BigEndian>::read_unchecked(&output, 2)
    });
    assert_eq!(-25.25, unsafe {
        BinaryCodec::<f64, LittleEndian>::read_unchecked(&output, 6)
    });
}