78 lines
2.6 KiB
Rust
78 lines
2.6 KiB
Rust
|
// 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()));
|
||
|
)*
|
||
|
}
|
||
|
};
|
||
|
}
|