header-vec 0.1.3

Vector with user-specified header, length, capacity, and array elements all stored on the heap together
Documentation
#[macro_use]
extern crate std;

use header_vec::*;

#[derive(Clone, Debug, PartialEq)]
#[repr(align(128))]
struct TestA {
    a: u32,
    b: usize,
    c: usize,
}

#[test]
fn test_head_array() {
    let mut v_orig = HeaderVec::new(TestA { a: 4, b: !0, c: 66 });

    let quote = "the quick brown fox jumps over the lazy dog";

    for a in quote.chars() {
        v_orig.push(a);
    }

    assert_eq!(TestA { a: 4, b: !0, c: 66 }, *v_orig);
    assert_eq!(4, v_orig.a);
    assert_eq!(quote, v_orig[..].iter().copied().collect::<String>());

    let mut v_no_vowels = v_orig.clone();
    v_no_vowels.retain(|&c| !"aeiou".contains(c));
    assert_eq!(
        "th qck brwn fx jmps vr th lzy dg",
        v_no_vowels[..].iter().copied().collect::<String>()
    );

    v_orig.retain(|&c| !"aeiou".contains(c));

    assert_eq!(v_orig, v_no_vowels);
    assert_eq!(*unsafe { v_orig.weak() }, v_no_vowels);

    v_orig.retain(|&c| !"th".contains(c));

    assert_eq!(
        " qck brwn fx jmps vr  lzy dg",
        v_orig.as_slice().iter().copied().collect::<String>()
    );
}