o3 0.1.0

shared-nothing primitives
Documentation
use o3::buffer::Rolling;

#[test]
fn push_consume_compact_zero_copy() {
    let mut r: Rolling<8> = Rolling::new();
    r.push(b"hello");
    assert_eq!(r.as_slice(), b"hello");
    assert_eq!(r.len(), 5);
    assert_eq!(r.spare_capacity(), 3);

    r.consume(3);
    assert_eq!(r.as_slice(), b"lo");
    assert_eq!(r.spare_capacity(), 6);

    r.push(b"world!");
    assert_eq!(r.as_slice(), b"loworld!");
    assert_eq!(r.len(), 8);
    assert_eq!(r.spare_capacity(), 0);

    r.consume(8);
    assert!(r.is_empty());
    assert_eq!(r.spare_capacity(), 8);

    let spare = r.spare_capacity_mut();
    assert_eq!(spare.len(), 8);
    spare[..4].copy_from_slice(b"abcd");
    unsafe { r.advance(4); }
    assert_eq!(r.as_slice(), b"abcd");
}