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);
}