#[macro_export]
macro_rules! assert_forall {
($iter:expr, $pred:expr) => {{
match $crate::quantifiers::basic::forall($iter, $pred) {
Ok(()) => {},
Err(e) => panic!("assert_forall! failed: {}", e),
}
}};
($iter:expr, $pred:expr, $($msg:tt)+) => {{
match $crate::quantifiers::basic::forall($iter, $pred) {
Ok(()) => {},
Err(e) => panic!("assert_forall! failed: {} — {}", format_args!($($msg)+), e),
}
}};
}
#[macro_export]
macro_rules! assert_exists {
($iter:expr, $pred:expr) => {{
match $crate::quantifiers::basic::exists($iter, $pred) {
Ok(()) => {},
Err(e) => panic!("assert_exists! failed: {}", e),
}
}};
($iter:expr, $pred:expr, $($msg:tt)+) => {{
match $crate::quantifiers::basic::exists($iter, $pred) {
Ok(()) => {},
Err(e) => panic!("assert_exists! failed: {} — {}", format_args!($($msg)+), e),
}
}};
}
#[macro_export]
macro_rules! assert_exactly_n {
($iter:expr, $count:expr, $pred:expr) => {{
match $crate::quantifiers::basic::exactly_n($iter, $count, $pred) {
Ok(()) => {},
Err(e) => panic!("assert_exactly_n! failed: {}", e),
}
}};
}
#[macro_export]
macro_rules! assert_none {
($iter:expr, $pred:expr) => {{
match $crate::quantifiers::basic::none($iter, $pred) {
Ok(()) => {},
Err(e) => panic!("assert_none! failed: {}", e),
}
}};
($iter:expr, $pred:expr, $($msg:tt)+) => {{
match $crate::quantifiers::basic::none($iter, $pred) {
Ok(()) => {},
Err(e) => panic!("assert_none! failed: {} — {}", format_args!($($msg)+), e),
}
}};
}
#[macro_export]
macro_rules! assert_unique {
($iter:expr) => {{
let all_unique = $crate::select_duplicates($iter).is_empty();
assert!(all_unique, "assert_unique! failed: duplicate elements found.");
}};
($iter:expr, $($msg:tt)+) => {{
use std::collections::HashSet;
let mut set = HashSet::new();
let mut all_unique = true;
for item in $iter {
if !set.insert(item) {
all_unique = false;
break;
}
}
assert!(all_unique, $($msg)+);
}};
}
#[macro_export]
macro_rules! assert_duplicates {
($iter:expr) => {{
let has_duplicates = !$crate::select_duplicates($iter).is_empty();
assert!(has_duplicates, "assert_duplicates! failed: no duplicates found.");
}};
($iter:expr, $($msg:tt)+) => {{
let has_duplicates = !$crate::select_duplicates($iter).is_empty();
assert!(has_duplicates, $($msg)+);
}};
}
#[macro_export]
macro_rules! assert_pairwise {
($iter:expr, $pred:expr) => {{
match $crate::quantifiers::structured::pairwise($iter, $pred) {
Ok(()) => {},
Err(e) => panic!("assert_pairwise! failed: {}", e),
}
}};
($iter:expr, $pred:expr, $($msg:tt)+) => {{
match $crate::quantifiers::structured::pairwise($iter, $pred) {
Ok(()) => {},
Err(e) => panic!("assert_pairwise! failed: {} — {}", format_args!($($msg)+), e),
}
}};
}