use crate::prelude::*;
use crate::structural_id_impl;
use crate::tests::log::init as test_log_init;
structural_id_impl!(u8, Test1Id, 1);
#[test]
fn test_next_test1_id() {
test_log_init();
let mut miss_count = 0;
let mut last_id: Option<Test1Id> = None;
for i in 0..1000 {
let id = Test1Id::next();
info!(
"i:{:?},id:{:?},last_id:{:?},miss_count:{:?}",
i, id, last_id, miss_count
);
if let Some(last_id) = last_id {
assert!(Into::<u8>::into(last_id) >= 1);
if Into::<u8>::into(last_id) == u8::MAX {
assert_eq!(Into::<u8>::into(id), 1);
} else {
assert_eq!(Into::<u8>::into(last_id) + 1, Into::<u8>::into(id));
}
} else {
miss_count += 1;
assert!(miss_count <= 1);
}
last_id = Some(id);
}
}
structural_id_impl!(i8, Test2Id, 100);
#[test]
fn test_next_test2_id() {
test_log_init();
let mut miss_count = 0;
let mut last_id: Option<Test2Id> = None;
for i in 0..1000 {
let id = Test2Id::next();
info!(
"i:{:?},id:{:?},last_id:{:?},miss_count:{:?}",
i, id, last_id, miss_count
);
if let Some(last_id) = last_id {
assert!(Into::<i8>::into(last_id) >= 100);
if Into::<i8>::into(last_id) == i8::MAX {
assert_eq!(Into::<i8>::into(id), 100);
} else {
assert_eq!(Into::<i8>::into(last_id) + 1, Into::<i8>::into(id));
}
} else {
miss_count += 1;
assert!(miss_count <= 1);
}
last_id = Some(id);
}
}