o3 0.2.0

shared-nothing primitives
Documentation
use o3::buffer::{Owned, Shared};

#[test]
fn build_and_freeze() {
    let mut o = Owned::new();
    assert!(o.is_empty());
    assert_eq!(o.capacity(), 0);

    o.extend_from_slice(b"hello");
    assert_eq!(o.len(), 5);
    assert_eq!(o.as_slice(), b"hello");
    assert!(o.capacity() >= 5);

    o.extend_from_slice(b" world");
    assert_eq!(o.as_slice(), b"hello world");

    let s: Shared = o.freeze();
    assert_eq!(s.as_slice(), b"hello world");
    assert_eq!(s.clone().as_slice(), b"hello world");
}

#[test]
fn split_to_and_off() {
    let mut o = Owned::from(&b"abcdefgh"[..]);

    let head = o.split_to(3);
    assert_eq!(head.as_slice(), b"abc");
    assert_eq!(o.as_slice(), b"defgh");

    let tail = o.split_off(2);
    assert_eq!(o.as_slice(), b"de");
    assert_eq!(tail.as_slice(), b"fgh");
}

#[test]
fn split_leaves_owned_empty_and_reusable() {
    let mut o = Owned::with_capacity(16);
    o.extend_from_slice(b"first");
    let first: Shared = o.split();
    assert_eq!(first.as_slice(), b"first");
    assert!(o.is_empty());

    o.extend_from_slice(b"second");
    let second: Shared = o.freeze();
    assert_eq!(second.as_slice(), b"second");
}

#[test]
fn spare_capacity_write_then_set_len() {
    let mut o = Owned::with_capacity(8);
    let spare = o.spare_capacity_mut();
    assert_eq!(spare.len(), 8);
    spare[0].write(b'x');
    spare[1].write(b'y');
    spare[2].write(b'z');
    unsafe {
        o.set_len(3);
    }
    assert_eq!(o.as_slice(), b"xyz");
}