id_sys 0.1.0

Provides data structures which can be marked such that they only work with similarly marked integer data types.
Documentation
use crate::{
    id_slice, id_vec,
    tests::util::{extends::MTestBase, MTest},
    IdVec,
};

#[test]
fn downcast_as_test() {
    let id_vec = id_vec![MTestBase; 0, 1, 2];

    let actual: &IdVec<MTest, i32> = id_vec.downcast_as();
    let expected = id_slice![0, 1, 2];
    assert_eq!(actual, expected);
}

#[test]
fn upcast_as_test() {
    let id_vec = id_vec![MTest; 0, 1, 2];

    let actual: &IdVec<MTestBase, i32> = id_vec.upcast_as();
    let expected = id_slice![0, 1, 2];
    assert_eq!(actual, expected);
}

#[test]
fn downcast_as_mut_test() {
    let mut id_vec = id_vec![MTestBase; 0, 1, 2];

    let actual: &IdVec<MTest, i32> = id_vec.downcast_as_mut();
    let expected = id_slice![0, 1, 2];
    assert_eq!(actual, expected);
}

#[test]
fn upcast_as_mut_test() {
    let mut id_vec = id_vec![MTest; 0, 1, 2];

    let actual: &IdVec<MTestBase, i32> = id_vec.upcast_as_mut();
    let expected = id_slice![0, 1, 2];
    assert_eq!(actual, expected);
}

#[test]
fn downcast_into_test() {
    let id_vec = id_vec![MTestBase; 0, 1, 2];

    let actual: IdVec<MTest, i32> = id_vec.downcast_into();
    let expected = id_slice![0, 1, 2];
    assert_eq!(actual, expected);
}

#[test]
fn upcast_into_test() {
    let id_vec = id_vec![MTest; 0, 1, 2];

    let actual: IdVec<MTestBase, i32> = id_vec.upcast_into();
    let expected = id_slice![0, 1, 2];
    assert_eq!(actual, expected);
}