use kish::{Board, GameStatus, Square, Team};
#[test]
fn white_wins_by_capturing_all_black_pieces() {
let board = Board::from_squares(
Team::White,
&[Square::D4, Square::E4],
&[], &[],
);
assert_eq!(
board.status(),
GameStatus::Won(Team::White),
"White wins when black has no pieces"
);
}
#[test]
fn black_wins_by_capturing_all_white_pieces() {
let board = Board::from_squares(
Team::White,
&[], &[Square::D4, Square::E4],
&[],
);
assert_eq!(
board.status(),
GameStatus::Won(Team::Black),
"Black wins when white has no pieces"
);
}
#[test]
fn blocked_player_loses_white_blocked() {
let board = Board::from_squares(
Team::White,
&[Square::A2, Square::A3],
&[
Square::A4, Square::A5, Square::B2, Square::B3, Square::C2, Square::C3, ],
&[],
);
assert_eq!(
board.status(),
GameStatus::Won(Team::Black),
"Blocked white should lose"
);
}
#[test]
fn blocked_player_loses_black_blocked() {
let board = Board::from_squares(
Team::White,
&[
Square::A2,
Square::A3,
Square::B4,
Square::B5,
Square::C4,
Square::C5,
],
&[Square::A4, Square::A5],
&[],
);
assert_eq!(
board.status(),
GameStatus::Won(Team::White),
"Blocked black should lose"
);
}
#[test]
fn single_blocked_king_loses() {
let board = Board::from_squares(
Team::White,
&[Square::A1],
&[
Square::A2,
Square::B1,
Square::B2,
Square::C1,
Square::A3,
Square::C2,
],
&[Square::A1],
);
assert_eq!(
board.status(),
GameStatus::Won(Team::Black),
"Completely blocked king should lose"
);
}
#[test]
fn game_in_progress_when_both_can_move() {
let board = Board::from_squares(
Team::White,
&[Square::D4, Square::E4],
&[Square::D5, Square::E5],
&[],
);
assert_eq!(
board.status(),
GameStatus::InProgress,
"Game should be in progress"
);
}
#[test]
fn black_king_not_blocked_with_only_backward_moves() {
let board = Board::from_squares(
Team::Black,
&[Square::G1, Square::A8], &[Square::H1],
&[Square::H1], );
assert_eq!(
board.status(),
GameStatus::InProgress,
"Black king with only backward moves should not be blocked"
);
}
#[test]
fn black_pawn_not_blocked_with_only_vertical_capture() {
let board = Board::from_squares(
Team::Black,
&[Square::A2, Square::B3, Square::C3], &[Square::A3], &[],
);
assert_eq!(
board.status(),
GameStatus::InProgress,
"Black pawn with only vertical capture should not be blocked"
);
}