use crate::{soa::UsizeIdStruct, tests::util::MTest, usize_id};
#[test]
fn new_test() {
let id_struct = UsizeIdStruct::<MTest>::new();
let actual = id_struct.count();
let expected = 0;
assert_eq!(actual, expected);
}
#[test]
fn count_test() {
let mut id_struct = UsizeIdStruct::<MTest>::new();
let actual = id_struct.count();
let expected = 0;
assert_eq!(actual, expected);
let id_0 = id_struct.retain();
let id_1 = id_struct.retain();
let actual = id_struct.count();
let expected = 2;
assert_eq!(actual, expected);
id_struct.release(id_0);
let actual = id_struct.count();
let expected = 1;
assert_eq!(actual, expected);
id_struct.release(id_1);
let actual = id_struct.count();
let expected = 0;
assert_eq!(actual, expected);
}
#[test]
fn retain_release_test() {
let mut id_struct = UsizeIdStruct::<MTest>::new();
let id_0 = id_struct.retain();
let actual = id_0;
let expected = usize_id!(MTest; 0);
assert_eq!(actual, expected);
let id_1 = id_struct.retain();
let actual = id_1;
let expected = usize_id!(MTest; 1);
assert_eq!(actual, expected);
id_struct.release(id_0);
let actual = id_struct.retain();
let expected = usize_id!(MTest; 0);
assert_eq!(actual, expected);
id_struct.release(id_0);
id_struct.release(id_1);
let actual = id_struct.retain();
let expected = usize_id!(MTest; 1);
assert_eq!(actual, expected);
let actual = id_struct.retain();
let expected = usize_id!(MTest; 0);
assert_eq!(actual, expected);
}
#[test]
fn into_iter_test() {
let mut id_struct = UsizeIdStruct::<MTest>::new();
let actual: Vec<_> = id_struct.into_iter().collect();
let expected = vec![];
assert_eq!(actual, expected);
let id_0 = id_struct.retain();
let actual: Vec<_> = id_struct.into_iter().collect();
let expected = vec![id_0];
assert_eq!(actual, expected);
let id_1 = id_struct.retain();
let actual: Vec<_> = id_struct.into_iter().collect();
let expected = vec![id_0, id_1];
assert_eq!(actual, expected);
let id_2 = id_struct.retain();
let actual: Vec<_> = id_struct.into_iter().collect();
let expected = vec![id_0, id_1, id_2];
assert_eq!(actual, expected);
id_struct.release(id_0);
let actual: Vec<_> = id_struct.into_iter().collect();
let expected = vec![id_1, id_2];
assert_eq!(actual, expected);
id_struct.retain();
id_struct.release(id_1);
let actual: Vec<_> = id_struct.into_iter().collect();
let expected = vec![id_0, id_2];
assert_eq!(actual, expected);
id_struct.retain();
id_struct.release(id_2);
let actual: Vec<_> = id_struct.into_iter().collect();
let expected = vec![id_0, id_1];
assert_eq!(actual, expected);
id_struct.retain();
id_struct.release(id_0);
id_struct.release(id_1);
let actual: Vec<_> = id_struct.into_iter().collect();
let expected = vec![id_2];
assert_eq!(actual, expected);
id_struct.retain();
id_struct.retain();
id_struct.release(id_1);
id_struct.release(id_2);
let actual: Vec<_> = id_struct.into_iter().collect();
let expected = vec![id_0];
assert_eq!(actual, expected);
id_struct.retain();
id_struct.retain();
id_struct.release(id_0);
id_struct.release(id_2);
let actual: Vec<_> = id_struct.into_iter().collect();
let expected = vec![id_1];
assert_eq!(actual, expected);
}