entropic 0.1.1

Traits for converting Rust data structures to/from unstructured bytes
Documentation
use entropic::prelude::*;

#[test]
fn uniform_range_bijective() {
    let mut buf = [0u8; 1];
    let mut sink: Sink<'_, _, DefaultEntropyScheme> = Sink::new(buf.iter_mut());

    let len = sink.put_uniform_range(0usize..=65, 33).unwrap();
    assert!(!sink.put_byte(0x00).is_ok());
    assert!(buf[0] ==  33);

    let mut s: Source<'_, _, DefaultEntropyScheme> = Source::new(buf.iter().take(len));
    let u = s.get_uniform_range(0usize..=65).unwrap();
    assert!(u == 33);
    assert!(!s.get_byte().is_ok());

    let mut buf = [0u8; 16];
    let mut sink: Sink<'_, _, DefaultEntropyScheme> = Sink::new(buf.iter_mut());

    let len = sink.put_uniform_range(0usize..=1, 1).unwrap();
    println!("{}", len);

    let mut s: Source<'_, _, DefaultEntropyScheme> = Source::new(buf.iter().take(len));
    let u = s.get_uniform_range(0usize..=1).unwrap();
    assert!(u == 1);

    let mut buf = [0u8; 16];
    let mut sink: Sink<'_, _, DefaultEntropyScheme> = Sink::new(buf.iter_mut());

    let len = sink.put_uniform_range(0u8..=2, 1).unwrap();
    println!("{}", len);

    let mut s: Source<'_, _, DefaultEntropyScheme> = Source::new(buf.iter().take(len));
    let u = s.get_uniform_range(0u8..=2).unwrap();
    assert!(u == 1);

    let mut buf = [0u8; 0];
    let mut sink: Sink<'_, _, DefaultEntropyScheme> = Sink::new(buf.iter_mut());

    let len = sink.put_uniform_range(16..=16, 16).unwrap();
    assert!(len == 0);

    let mut s: Source<'_, _, DefaultEntropyScheme> = Source::new(buf.iter().take(len));
    let u = s.get_uniform_range(16..=16).unwrap();
    assert!(u == 16);
}