ads2_2022/code/rust/src/rules/assert.rs

186 lines
4.7 KiB
Rust

// ----------------------------------------------------------------
// IMPORTS
// ----------------------------------------------------------------
//
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Assert macros - length
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#[macro_export]
macro_rules! assert_length{
($a:expr, $b:expr $(, $message:expr)?)=>{
assert_eq!($a.len(), $b $(, $message)?);
};
}
#[macro_export]
macro_rules! assert_length_ne{
($a:expr, $b:expr $(, $message:expr)?)=>{
assert_ne!($a.len(), $b $(, $message)?);
};
}
#[macro_export]
macro_rules! assert_length_lt{
($a:expr, $b:expr $(, $message:expr)?)=>{
assert!($a.len() < $b $(, $message)?);
};
}
#[macro_export]
macro_rules! assert_length_le{
($a:expr, $b:expr $(, $message:expr)?)=>{
assert!($a.len() <= $b $(, $message)?);
};
}
#[macro_export]
macro_rules! assert_length_gt{
($a:expr, $b:expr $(, $message:expr)?)=>{
assert!($a.len() > $b $(, $message)?);
};
}
#[macro_export]
macro_rules! assert_length_ge{
($a:expr, $b:expr $(, $message:expr)?)=>{
assert!($a.len() >= $b $(, $message)?);
};
}
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Assert macros - length of sets
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#[macro_export]
macro_rules! assert_length_unique{
($a:expr, $b:expr $(, $message:expr)?)=>{
{
use ads2::core::utils::vec_to_set;
assert_eq!(vec_to_set(&$a).len(), $b $(, $message)?);
}
};
}
#[macro_export]
macro_rules! assert_length_unique_ne{
($a:expr, $b:expr $(, $message:expr)?)=>{
{
use ads2::core::utils::vec_to_set;
assert_ne!(vec_to_set(&$a).len(), $b $(, $message)?);
}
};
}
#[macro_export]
macro_rules! assert_length_unique_lt{
($a:expr, $b:expr $(, $message:expr)?)=>{
{
use ads2::core::utils::vec_to_set;
assert!(vec_to_set(&$a).len() < $b $(, $message)?);
}
};
}
#[macro_export]
macro_rules! assert_length_unique_le{
($a:expr, $b:expr $(, $message:expr)?)=>{
{
use ads2::core::utils::vec_to_set;
assert!(vec_to_set(&$a).len() <= $b $(, $message)?);
}
};
}
#[macro_export]
macro_rules! assert_length_unique_gt{
($a:expr, $b:expr $(, $message:expr)?)=>{
{
use ads2::core::utils::vec_to_set;
assert!(vec_to_set(&$a).len() > $b $(, $message)?);
}
};
}
#[macro_export]
macro_rules! assert_length_unique_ge{
($a:expr, $b:expr $(, $message:expr)?)=>{
{
use ads2::core::utils::vec_to_set;
assert!(vec_to_set(&$a).len() >= $b $(, $message)?);
}
};
}
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Assert macros - contains
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#[macro_export]
macro_rules! assert_contains{
($a:expr, $b:expr $(, $message:expr)?)=>{
assert!($a.contains(&$b) $(, $message)?);
};
}
#[macro_export]
macro_rules! assert_not_contains{
($a:expr, $b:expr $(, $message:expr)?)=>{
assert!(!$a.contains(&$b) $(, $message)?);
};
}
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Assert macros - equality of sets
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#[macro_export]
macro_rules! assert_eq_contents{
($a:expr, $b:expr $(, $message:expr)?)=>{
{
use ads2::core::utils::vec_to_set;
assert_eq!(vec_to_set(&$a), vec_to_set(&$b) $(, $message)?);
}
};
}
#[macro_export]
macro_rules! assert_ne_contents{
($a:expr, $b:expr $(, $message:expr)?)=>{
{
use ads2::core::utils::vec_to_set;
assert_ne!(vec_to_set(&$a), vec_to_set(&$b));
}
};
}
#[macro_export]
macro_rules! assert_subset{
($a:expr, $b:expr $(, $message:expr)?)=>{
{
for element in $a.clone() {
assert!($b.contains(&element) $(, $message)?);
}
}
};
}
#[macro_export]
macro_rules! assert_not_subset{
($a:expr, $b:expr $(, $message:expr)?)=>{
{
let mut found = false;
for element in $a.clone() {
if !($b.contains(&element)) {
found = true;
break;
}
}
assert!(found $(, $message)?);
}
};
}