mirror of
https://github.com/SleepingInsomniac/lx_chess_cr
synced 2024-11-16 19:49:34 +01:00
Add some specs for parsing SAN
This commit is contained in:
parent
7614001e45
commit
1397a01aaf
4 changed files with 42 additions and 1 deletions
34
spec/lx_chess/game/parse_san_spec.cr
Normal file
34
spec/lx_chess/game/parse_san_spec.cr
Normal file
|
@ -0,0 +1,34 @@
|
|||
require "../../spec_helper"
|
||||
require "../../../src/lx_chess/board"
|
||||
require "../../../src/lx_chess/piece"
|
||||
require "../../../src/lx_chess/move_set"
|
||||
require "../../../src/lx_chess/game"
|
||||
|
||||
include LxChess
|
||||
|
||||
describe Game do
|
||||
describe "#parse_san" do
|
||||
context "when SAN is a pawn move" do
|
||||
it "returns a correct from and to square" do
|
||||
game = Game.new
|
||||
game.board["e2"] = Piece.from_fen('P')
|
||||
from, to = game.parse_san("e4")
|
||||
from.should eq(game.board.index("e2"))
|
||||
to.should eq(game.board.index("e4"))
|
||||
end
|
||||
|
||||
it "disambiguates the move correctly" do
|
||||
game = Game.new
|
||||
place(game.board, {
|
||||
"d4" => 'P',
|
||||
"f4" => 'P',
|
||||
"e5" => 'p',
|
||||
})
|
||||
|
||||
moves = game.parse_san("dxe5")
|
||||
debug_board(game, moves)
|
||||
moves.should eq(["d4", "e5"].map { |s| game.board.index(s) })
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -19,6 +19,6 @@ end
|
|||
|
||||
def place(board : LxChess::Board, squares : Hash(String, Char))
|
||||
squares.each do |cord, sym|
|
||||
game.board[cord] = LxChess::Piece.from_fen(sym)
|
||||
board[cord] = LxChess::Piece.from_fen(sym)
|
||||
end
|
||||
end
|
||||
|
|
|
@ -44,6 +44,7 @@ player_white = LxChess::Player.new
|
|||
player_black = LxChess::Player.new
|
||||
game = LxChess::Game.new(board: fen.board, players: [player_white, player_black])
|
||||
gb = LxChess::TermBoard.new(game.board)
|
||||
|
||||
if theme = options["theme"]?
|
||||
if LxChess::TermBoard::THEMES[theme]?
|
||||
gb.board_theme = theme
|
||||
|
|
|
@ -44,6 +44,7 @@ module LxChess
|
|||
(@move_clock / 2).to_i16
|
||||
end
|
||||
|
||||
# Return the current player's king
|
||||
def own_king
|
||||
@board.find do |piece|
|
||||
next unless piece
|
||||
|
@ -51,6 +52,11 @@ module LxChess
|
|||
end
|
||||
end
|
||||
|
||||
# Parse SAN from a string
|
||||
def parse_san(notation : String)
|
||||
parse_san(Notation.new(notation))
|
||||
end
|
||||
|
||||
# Parse standard algebraic notation
|
||||
def parse_san(notation : Notation)
|
||||
index = @board.index(notation.square)
|
||||
|
|
Loading…
Reference in a new issue