pub fn seq_bytes(count: usize) -> Vec<u8> {
(0..count)
.map(|n| {
TryInto::<u8>::try_into(if n > u8::MAX.into() {
n % <u8 as Into<usize>>::into(u8::MAX)
} else {
n
})
.unwrap()
})
.collect()
}
#[macro_export]
macro_rules! current_source_file {
() => {{
let mut parts = std::collections::VecDeque::<String>::new();
for part in file!().split(std::path::MAIN_SEPARATOR_STR) {
parts.push_back(part.to_string());
}
let mut path = std::path::absolute(std::path::Path::new(".")).unwrap();
while parts.len() > 0 {
let mut test_path = path.clone();
for part in &parts {
test_path.push(part.to_string().as_str());
}
if test_path.exists() {
path = test_path.clone();
break;
} else {
parts.pop_front();
}
}
format!("{}", path.display())
}}; }
#[macro_export]
macro_rules! path_to_test_file {
($name:expr $(,)?) => {{
let path = $crate::folder_path!("__test_files__").join($crate::test_name!()).join($name);
path.parent().unwrap().mkdir().map(|_| ()).unwrap_or_default();
path.delete().map(|_| ()).unwrap_or_default();
path
}};
}
#[macro_export]
macro_rules! folder_path {
() => {{
let path = iocore::Path::raw($crate::current_source_file!())
.relative_to_cwd()
.parent()
.expect(&format!("{:#?} has no parent folder!!", $crate::current_source_file!()));
path
}};
($name:expr $(,)?) => {{
let path = $crate::folder_path!();
let path = path.join($name);
path.mkdir_unchecked();
path
}};
}
#[macro_export]
macro_rules! directory_path {
() => {{ $crate::folder_path!() }};
($name:expr $(,)?) => {
$crate::folder_path!($name)
};
}
#[macro_export]
macro_rules! test_folder_parent_path {
($name:expr $(,)?) => {{
let path = iocore::Path::raw($crate::current_source_file!())
.relative_to_cwd()
.parent()
.expect(&format!("parent directory of {:#?}", $crate::current_source_file!()));
let path = path.join($name);
path.mkdir_unchecked();
path
}};
}
#[macro_export]
macro_rules! test_directory_parent_path {
($name:expr $(,)?) => {{ $crate::test_folder_parent_path($name) }};
}
#[macro_export]
macro_rules! test_name {
() => {{
fn f() {}
fn type_name_of<T>(_: T) -> &'static str {
std::any::type_name::<T>()
}
let name = type_name_of(f);
let name = name.strip_suffix("::f").unwrap().replace("::", std::path::MAIN_SEPARATOR_STR);
name
}};
}
#[macro_export]
macro_rules! path_to_test_folder {
() => {{
let path = $crate::folder_path!("__test_files__").join($crate::test_name!());
path.mkdir_unchecked();
path
}};
($name:expr $(,)?) => {{
let path = $crate::path_to_test_folder!().join($name);
path.mkdir_unchecked();
path
}};
}
#[macro_export]
macro_rules! path_to_test_directory {
() => {{ $crate::path_to_test_folder!() }};
($name:expr $(,)?) => {{ $crate::path_to_test_folder!($name) }};
}