mirror of
https://github.com/danbee/chess
synced 2025-03-04 08:39:06 +00:00
110 lines
2.5 KiB
Elixir
110 lines
2.5 KiB
Elixir
defmodule Chess.BoardTest do
|
|
@moduledoc false
|
|
|
|
use Chess.DataCase
|
|
|
|
alias Chess.Board
|
|
|
|
test "returns a piece from the board" do
|
|
board = Board.default()
|
|
|
|
expected_piece = %{"type" => "pawn", "colour" => "white"}
|
|
assert Board.piece(board, {4, 1}) == expected_piece
|
|
end
|
|
|
|
test "finds pieces on the board" do
|
|
board = Board.default()
|
|
|
|
piece = %{"type" => "pawn", "colour" => "white"}
|
|
|
|
expected_result = [
|
|
{0, 1},
|
|
{1, 1},
|
|
{2, 1},
|
|
{3, 1},
|
|
{4, 1},
|
|
{5, 1},
|
|
{6, 1},
|
|
{7, 1}
|
|
]
|
|
|
|
assert Board.search(board, piece) == expected_result
|
|
end
|
|
|
|
test "finds pieces on the board with a partial search" do
|
|
board = Board.default()
|
|
|
|
piece = %{"colour" => "white"}
|
|
|
|
expected_result =
|
|
[
|
|
{0, 1},
|
|
{1, 1},
|
|
{2, 1},
|
|
{3, 1},
|
|
{4, 1},
|
|
{5, 1},
|
|
{6, 1},
|
|
{7, 1},
|
|
{0, 0},
|
|
{1, 0},
|
|
{2, 0},
|
|
{3, 0},
|
|
{4, 0},
|
|
{5, 0},
|
|
{6, 0},
|
|
{7, 0}
|
|
]
|
|
|> Enum.sort()
|
|
|
|
assert Board.search(board, piece) == expected_result
|
|
end
|
|
|
|
test "finds a single piece on the board" do
|
|
board = Board.default()
|
|
|
|
piece = %{"type" => "king", "colour" => "black"}
|
|
assert Board.search(board, piece) == [{4, 7}]
|
|
end
|
|
|
|
test "moves a piece" do
|
|
board = %{
|
|
"3,0" => %{"type" => "queen", "colour" => "white"}
|
|
}
|
|
|
|
%{board: new_board} = Board.move_piece(board, %{"from" => [3, 0], "to" => [5, 2]})
|
|
|
|
assert new_board == %{
|
|
"5,2" => %{"type" => "queen", "colour" => "white"}
|
|
}
|
|
end
|
|
|
|
test "can perform a castling move on the kings side" do
|
|
board = %{
|
|
"4,0" => %{"type" => "king", "colour" => "white"},
|
|
"7,0" => %{"type" => "rook", "colour" => "white"}
|
|
}
|
|
|
|
%{board: new_board} = Board.move_piece(board, %{"from" => [4, 0], "to" => [6, 0]})
|
|
|
|
assert new_board == %{
|
|
"6,0" => %{"type" => "king", "colour" => "white"},
|
|
"5,0" => %{"type" => "rook", "colour" => "white"}
|
|
}
|
|
end
|
|
|
|
test "can perform a castling move on the queens side" do
|
|
board = %{
|
|
"4,0" => %{"type" => "king", "colour" => "white"},
|
|
"0,0" => %{"type" => "rook", "colour" => "white"}
|
|
}
|
|
|
|
%{board: new_board} = Board.move_piece(board, %{"from" => [4, 0], "to" => [2, 0]})
|
|
|
|
assert new_board == %{
|
|
"2,0" => %{"type" => "king", "colour" => "white"},
|
|
"3,0" => %{"type" => "rook", "colour" => "white"}
|
|
}
|
|
end
|
|
end
|