extended FEN support to include who's turn it is
This commit is contained in:
parent
497da2de8e
commit
81b24d3082
@ -19,6 +19,7 @@ Board Board::setup_fen_position(std::string fen) {
|
||||
{'q', Piece::Queen},
|
||||
};
|
||||
|
||||
// -- Pieces
|
||||
std::string fen_board = fen.substr(0, fen.find(' '));
|
||||
int rank = 7, file = 0;
|
||||
for (char symbol : fen_board) {
|
||||
@ -39,6 +40,11 @@ Board Board::setup_fen_position(std::string fen) {
|
||||
file++;
|
||||
}
|
||||
}
|
||||
|
||||
// -- Active colour
|
||||
int index = fen.find(' ');
|
||||
index++;
|
||||
board.white_to_play = fen[index] == 'w';
|
||||
return board;
|
||||
}
|
||||
|
||||
@ -53,15 +59,16 @@ std::string Board::to_fen() const {
|
||||
};
|
||||
|
||||
std::string ret;
|
||||
// -- Pieces
|
||||
for (int rank = 7; rank >= 0; rank--) {
|
||||
int empty_cell_counter = 0;
|
||||
for (int file = 0; file < 8; file++) {
|
||||
if (this->squares[rank * 8 + file] == Piece::None) {
|
||||
if (squares[rank * 8 + file] == Piece::None) {
|
||||
empty_cell_counter++;
|
||||
continue;
|
||||
}
|
||||
|
||||
int full_piece = this->squares[rank * 8 + file];
|
||||
int full_piece = squares[rank * 8 + file];
|
||||
char piece = p2c[full_piece & 0b111];
|
||||
int8_t colour = colour_at({file, rank});
|
||||
|
||||
@ -76,6 +83,10 @@ std::string Board::to_fen() const {
|
||||
if (rank > 0)
|
||||
ret += "/";
|
||||
}
|
||||
ret += " ";
|
||||
|
||||
// -- Active colour
|
||||
ret += white_to_play ? 'w' : 'b';
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -2,21 +2,21 @@
|
||||
#include "lib.hpp"
|
||||
|
||||
int main() {
|
||||
std::string pos = "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR";
|
||||
ASSERT_EQUALS(pos, Board::setup_fen_position(pos)->to_fen());
|
||||
std::string pos = "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w";
|
||||
ASSERT_EQUALS(pos, Board::setup_fen_position(pos).to_fen());
|
||||
|
||||
pos = "r1bk3r/p2pBpNp/n4n2/1p1NP2P/6P1/3P4/P1P1K3/q5b1";
|
||||
ASSERT_EQUALS(pos, Board::setup_fen_position(pos)->to_fen());
|
||||
pos = "r1bk3r/p2pBpNp/n4n2/1p1NP2P/6P1/3P4/P1P1K3/q5b1 b";
|
||||
ASSERT_EQUALS(pos, Board::setup_fen_position(pos).to_fen());
|
||||
|
||||
pos = "rnbqkbnr/pppppppp/8/8/4P3/8/PPPP1PPP/RNBQKBNR";
|
||||
ASSERT_EQUALS(pos, Board::setup_fen_position(pos)->to_fen());
|
||||
pos = "rnbqkbnr/pppppppp/8/8/4P3/8/PPPP1PPP/RNBQKBNR b";
|
||||
ASSERT_EQUALS(pos, Board::setup_fen_position(pos).to_fen());
|
||||
|
||||
pos = "4k2r/6r1/8/8/8/8/3R4/R3K3";
|
||||
ASSERT_EQUALS(pos, Board::setup_fen_position(pos)->to_fen());
|
||||
pos = "4k2r/6r1/8/8/8/8/3R4/R3K3 w";
|
||||
ASSERT_EQUALS(pos, Board::setup_fen_position(pos).to_fen());
|
||||
|
||||
pos = "8/8/8/4p1K1/2k1P3/8/8/8";
|
||||
ASSERT_EQUALS(pos, Board::setup_fen_position(pos)->to_fen());
|
||||
pos = "8/8/8/4p1K1/2k1P3/8/8/8 b";
|
||||
ASSERT_EQUALS(pos, Board::setup_fen_position(pos).to_fen());
|
||||
|
||||
pos = "8/5k2/3p4/1p1Pp2p/pP2Pp1P/P4P1K/8/8";
|
||||
ASSERT_EQUALS(pos, Board::setup_fen_position(pos)->to_fen());
|
||||
pos = "8/5k2/3p4/1p1Pp2p/pP2Pp1P/P4P1K/8/8 b";
|
||||
ASSERT_EQUALS(pos, Board::setup_fen_position(pos).to_fen());
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user