null-vec 0.1.0

A specialized vector that stores nullable values.
use super::{Nullable, NullVec};

#[derive(Copy, Clone, Debug, Eq, PartialEq)]
struct NonZero(i32);

impl Nullable for NonZero {
    const NULL: Self = NonZero(0);

    fn is_null(&self) -> bool {
        self.0 == 0
    }
}

impl From<i32> for NonZero {
    fn from(val: i32) -> Self {
        NonZero(val)
    }
}

#[test]
fn test() {
    let mut vec = NullVec::<NonZero>::new();

    assert_eq!(vec.get(0), NonZero::NULL);
    assert_eq!(vec.get(1), NonZero::NULL);
    assert_eq!(vec.get(2), NonZero::NULL);
    assert_eq!(vec.get(3), NonZero::NULL);

    assert_eq!(vec.insert(0, 5), NonZero::NULL);
    assert_eq!(vec.insert(1, 2), NonZero::NULL);
    assert_eq!(vec.insert(2, -6), NonZero::NULL);
    assert_eq!(vec.insert(3, 12), NonZero::NULL);

    assert_eq!(vec.get(0), NonZero(5));
    assert_eq!(vec.get(1), NonZero(2));
    assert_eq!(vec.get(2), NonZero(-6));
    assert_eq!(vec.get(3), NonZero(12));

    assert_eq!(vec.insert(0, 5), NonZero(5));
    assert_eq!(vec.insert(1, 2), NonZero(2));
    assert_eq!(vec.insert(2, -6), NonZero(-6));
    assert_eq!(vec.insert(3, 12), NonZero(12));

    assert_eq!(vec.space(2), 4);
}