chessfriend/moves/src/macros.rs

78 lines
2.6 KiB
Rust
Raw Normal View History

// Eryn Wells <eryn@erynwells.me>
#[macro_export]
macro_rules! assert_move_list {
($generator:expr, [ $($expected:expr),* $(,)? ]) => {
{
let generated_moves: std::collections::HashSet<$crate::GeneratedMove> = $generator.collect();
let expected_moves: std::collections::HashSet<$crate::GeneratedMove> = [
$($expected.into(),)*
].into();
assert_eq!(
generated_moves,
expected_moves,
"\n\tMatching: {:?}\n\tGenerated, not expected: {:?}\n\tExpected, not generated: {:?}",
generated_moves
.intersection(&expected_moves)
.map(|mv| format!("{}", mv))
.collect::<Vec<String>>(),
generated_moves
.difference(&expected_moves)
.map(|mv| format!("{}", mv))
.collect::<Vec<String>>(),
expected_moves
.difference(&generated_moves)
.map(|mv| format!("{}", mv))
.collect::<Vec<String>>(),
);
}
};
($generator:expr, $expected:expr) => {
{
use std::collections::HashSet;
let generated_moves: HashSet<$crate::GeneratedMove> = $generator.collect();
let expected_moves: HashSet<$crate::GeneratedMove> = $expected.collect();
assert_eq!(
generated_moves,
expected_moves,
"\n\tMatching: {:?}\n\tGenerated, not expected: {:?}\n\tExpected, not generated: {:?}",
generated_moves
.intersection(&expected_moves)
.map(|mv| format!("{}", mv))
.collect::<Vec<String>>(),
generated_moves
.difference(&expected_moves)
.map(|mv| format!("{}", mv))
.collect::<Vec<String>>(),
expected_moves
.difference(&generated_moves)
.map(|mv| format!("{}", mv))
.collect::<Vec<String>>(),
);
}
};
}
#[macro_export]
macro_rules! assert_move_list_contains {
($generated_moves:expr, [ $($expected:expr),* $(,)? ]) => {
$(
assert!($generated_moves.contains(&$expected.into()));
)*
};
}
#[macro_export]
macro_rules! assert_move_list_does_not_contain {
($generated_moves:expr, [ $($expected:expr),* $(,)? ]) => {
{
$(
assert!(!$generated_moves.contains(&$expected.into()));
)*
}
};
}