use type_vec::{Dyn, Vect};
use typenum::consts::*;
#[test]
fn static_vec_test() {
let vec = Vect::<usize, U0>::new();
let _vec = Vect::<usize, Dyn>::new();
let vec: Vect<usize, U1> = vec.push(3);
let vec: Vect<usize, U2> = vec.push(1);
let vec: Vect<usize, U3> = vec.push(4);
let vec: Vect<usize, U4> = vec.insert(U0::new(), 7);
let vec: Vect<usize, U5> = vec.insert(U4::new(), 5);
let vec: Vect<usize, U6> = vec.insert(5, 6);
let (vec, elem): (Vect<usize, U5>, usize) = vec.remove(U5::new());
assert_eq!(elem, 6);
let (vec, elem): (Vect<usize, U4>, usize) = vec.remove(4);
assert_eq!(elem, 5);
let elem: &usize = vec.get(U0::new());
assert_eq!(elem, &7);
let elem: &usize = vec.get(U1::new());
assert_eq!(elem, &3);
let elem: &usize = vec.get(U2::new());
assert_eq!(elem, &1);
let elem: &usize = vec.get(U3::new());
assert_eq!(elem, &4);
let elem: Option<&usize> = vec.get(0);
assert_eq!(elem, Some(&7));
let elem: Option<&usize> = vec.get(1);
assert_eq!(elem, Some(&3));
let elem: Option<&usize> = vec.get(2);
assert_eq!(elem, Some(&1));
let elem: Option<&usize> = vec.get(3);
assert_eq!(elem, Some(&4));
let elem: Option<&usize> = vec.get(4);
assert_eq!(elem, None);
let (vec, elem): (Vect<usize, U3>, usize) = vec.pop();
assert_eq!(elem, 4);
let (vec, elem): (Vect<usize, U2>, usize) = vec.pop();
assert_eq!(elem, 1);
let vec: Vect<usize, Dyn> = vec.into_dyn();
let vec: Vect<usize, Dyn> = vec.push(2);
let vec: Vect<usize, Dyn> = vec.push(5);
let elem: Option<&usize> = vec.get(U0::new());
assert_eq!(elem, Some(&7));
let elem: Option<&usize> = vec.get(U1::new());
assert_eq!(elem, Some(&3));
let elem: Option<&usize> = vec.get(U2::new());
assert_eq!(elem, Some(&2));
let elem: Option<&usize> = vec.get(U3::new());
assert_eq!(elem, Some(&5));
let elem: Option<&usize> = vec.get(U4::new());
assert_eq!(elem, None);
let elem: Option<&usize> = vec.get(0);
assert_eq!(elem, Some(&7));
let elem: Option<&usize> = vec.get(1);
assert_eq!(elem, Some(&3));
let elem: Option<&usize> = vec.get(2);
assert_eq!(elem, Some(&2));
let elem: Option<&usize> = vec.get(3);
assert_eq!(elem, Some(&5));
let elem: Option<&usize> = vec.get(4);
assert_eq!(elem, None);
let _vec: Vect<usize, U4> = vec.into_static().unwrap();
}