chessfriend/position/src/testing.rs

58 lines
1.5 KiB
Rust

// Eryn Wells <eryn@erynwells.me>
use crate::MakeMoveError;
use chessfriend_moves::BuildMoveError;
#[macro_export]
macro_rules! assert_move_list {
($generated:expr, $expected:expr, $position:expr) => {
assert_eq!(
$generated,
$expected,
"\n\tMatching: {:?}\n\tGenerated, not expected: {:?}\n\tExpected, not generated: {:?}",
$generated
.intersection(&$expected)
.map(|mv| format!("{}", mv))
.collect::<Vec<String>>(),
$generated
.difference(&$expected)
.map(|mv| format!("{}", mv))
.collect::<Vec<String>>(),
$expected
.difference(&$generated)
.map(|mv| format!("{}", mv))
.collect::<Vec<String>>(),
)
};
}
#[macro_export]
macro_rules! formatted_move_list {
($move_list:expr, $position:expr) => {
$move_list
.iter()
.map(|mv| format!("{}", mv))
.collect::<Vec<String>>()
};
}
pub type TestResult = Result<(), TestError>;
#[derive(Debug, Eq, PartialEq)]
pub enum TestError {
BuildMove(BuildMoveError),
MakeMove(MakeMoveError),
NoLegalMoves,
}
impl From<BuildMoveError> for TestError {
fn from(value: BuildMoveError) -> Self {
TestError::BuildMove(value)
}
}
impl From<MakeMoveError> for TestError {
fn from(value: MakeMoveError) -> Self {
TestError::MakeMove(value)
}
}