diff options
Diffstat (limited to 'src/engine/moves/king.c')
| -rw-r--r-- | src/engine/moves/king.c | 82 |
1 files changed, 81 insertions, 1 deletions
diff --git a/src/engine/moves/king.c b/src/engine/moves/king.c index 9ce3eb8..29bca79 100644 --- a/src/engine/moves/king.c +++ b/src/engine/moves/king.c @@ -1,7 +1,8 @@ #include "../moves.h" +#include <stdio.h> void get_king_moves(moves_t* moves, position_t position) { - assert_valid_position(position); + // assert_valid_position(position); bitboard_t friendly_king; int king_square; @@ -34,3 +35,82 @@ void get_king_moves(moves_t* moves, position_t position) { add_move(moves, king_square, to); } } + +#ifdef TEST_MOD +#include <stdbool.h> +#include "vec.c" + +bool test_white_king_corners() { + moves_t moves = moves_init(); + position_t p = {0}; + p.bitboards[WHITE_KING] = 1; + p.turn = WHITE_TURN; + get_king_moves(&moves, p); + if (moves.length != 3) return false; + if (moves.moves[0].from != 0) return false; + if (moves.moves[0].to != 1) return false; + if (moves.moves[1].from != 0) return false; + if (moves.moves[1].to != 8) return false; + if (moves.moves[2].from != 0) return false; + if (moves.moves[2].to != 9) return false; + moves.length = 0; + p.bitboards[WHITE_KING] = 128; + get_king_moves(&moves, p); + if (moves.length != 3) return false; + if (moves.moves[0].from != 7) return false; + if (moves.moves[0].to != 6) return false; + if (moves.moves[1].from != 7) return false; + if (moves.moves[1].to != 14) return false; + if (moves.moves[2].from != 7) return false; + if (moves.moves[2].to != 15) return false; + moves.length = 0; + p.bitboards[WHITE_KING] = 72057594037927936ULL; + get_king_moves(&moves, p); + if (moves.length != 3) return false; + if (moves.moves[0].from != 56) return false; + if (moves.moves[0].to != 48) return false; + if (moves.moves[1].from != 56) return false; + if (moves.moves[1].to != 49) return false; + if (moves.moves[2].from != 56) return false; + if (moves.moves[2].to != 57) return false; + + return true; +} + +bool test_black_king_corners() { + moves_t moves = moves_init(); + position_t p = {0}; + p.bitboards[BLACK_KING] = 1; + p.turn = BLACK_TURN; + get_king_moves(&moves, p); + if (moves.length != 3) return false; + if (moves.moves[0].from != 0) return false; + if (moves.moves[0].to != 1) return false; + if (moves.moves[1].from != 0) return false; + if (moves.moves[1].to != 8) return false; + if (moves.moves[2].from != 0) return false; + if (moves.moves[2].to != 9) return false; + moves.length = 0; + p.bitboards[BLACK_KING] = 128; + get_king_moves(&moves, p); + if (moves.length != 3) return false; + if (moves.moves[0].from != 7) return false; + if (moves.moves[0].to != 6) return false; + if (moves.moves[1].from != 7) return false; + if (moves.moves[1].to != 14) return false; + if (moves.moves[2].from != 7) return false; + if (moves.moves[2].to != 15) return false; + moves.length = 0; + p.bitboards[BLACK_KING] = 72057594037927936ULL; + get_king_moves(&moves, p); + if (moves.length != 3) return false; + if (moves.moves[0].from != 56) return false; + if (moves.moves[0].to != 48) return false; + if (moves.moves[1].from != 56) return false; + if (moves.moves[1].to != 49) return false; + if (moves.moves[2].from != 56) return false; + if (moves.moves[2].to != 57) return false; + + return true; +} +#endif |
