pub mod iter;
pub mod random;
cfg_base64! {
pub mod base64;
}
#[macro_export]
#[cfg(feature = "algorithm")]
macro_rules! algorithm {
() => {
$crate::algorithm::random::Rand::Safe.random_bool()
};
(#$t:ty) => {
$crate::algorithm::random::Rand::Safe.random_type::<$t>()
};
([$t:ty; $size:expr]) => {
$crate::algorithm::random::Rand::Safe.random_type::<[$t; $size]>()
};
(rgb $min:tt, $max:tt) => {
$crate::algorithm::random::Rand::Safe.rgb_range($min, $max)
};
(nanoid) => {
$crate::algorithm::random::Rand::Safe.nanoid_format(&$crate::algorithm::random::NID_SAFE, 21)
};
(nanoid $size:tt) => {
$crate::algorithm::random::Rand::Safe.nanoid_format(&$crate::algorithm::random::NID_SAFE, $size)
};
(nanoid $size:tt, $alphabet:expr) => {
$crate::algorithm::random::Rand::Safe.nanoid_format($alphabet, $size)
};
(nanoid unsafe $size:tt) => {
$crate::algorithm::random::Rand::UnSafe
.nanoid_format(&$crate::algorithm::random::NID_SAFE, $size)
};
(nanoid unsafe $size:tt, $alphabet:expr) => {
$crate::algorithm::random::Rand::UnSafe.nanoid_format($alphabet, $size)
};
($size:tt) => {
$crate::algorithm::random::Rand::Safe.random_range(0..$size)
};
($min:tt..$max:tt) => {
$crate::algorithm::random::Rand::Safe.random_range($min..$max)
};
}
#[cfg(test)]
#[cfg(feature = "algorithm")]
mod tests {
use crate::algorithm;
#[test]
fn test_random_bool() {
let _ = algorithm!(); }
#[test]
fn test_random_type() {
let _: u32 = algorithm!(#u32);
}
#[test]
fn test_random_array() {
let _: [u8; 5] = algorithm!([u8; 5]);
}
#[test]
fn test_rgb_range() {
let _ = algorithm!(rgb 0, 255);
}
#[test]
fn test_nanoid() {
let id = algorithm!(nanoid);
assert_eq!(id.len(), 21);
}
#[test]
fn test_nanoid_custom_size() {
let id = algorithm!(nanoid 10);
assert_eq!(id.len(), 10);
}
#[test]
fn test_random_range() {
let num = algorithm!(0..100);
assert!(num >= 0 && num < 100);
}
}