cev 0.1.0

An expandable data array used to add data to the beginning of the array.
Documentation
use crate::raw_cev::*;

struct ZST;

fn zst_sanity<T>(v: &RawCev<T>) {
    assert_eq!(v.capacity(), usize::MAX);
    assert_eq!(v.ptr(), core::ptr::NonNull::<T>::dangling().as_ptr());
    assert_eq!(v.allocated_memory(), None);
}

#[test]
fn zst() {
    let cap_err = Err(TryReserveErrorKind::CapacityOverflow.into());

    assert_eq!(std::mem::size_of::<ZST>(), 0);

    let v: RawCev<ZST> = RawCev::new();
    zst_sanity(&v);

    let v: RawCev<ZST> = RawCev::with_capacity(100);
    zst_sanity(&v);

    let v: RawCev<ZST> = RawCev::with_capacity(100);
    zst_sanity(&v);

    let v: RawCev<ZST> = RawCev::allocate(0);
    zst_sanity(&v);

    let v: RawCev<ZST> = RawCev::allocate(100);
    zst_sanity(&v);

    let mut v: RawCev<ZST> = RawCev::allocate(usize::MAX);
    zst_sanity(&v);

    assert_eq!(v.grow_amortized(100, usize::MAX - 100), cap_err);
    assert_eq!(v.grow_amortized(101, usize::MAX - 100), cap_err);
    zst_sanity(&v);
}