diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/engine/moves.c | 31 | ||||
| -rw-r--r-- | src/uci/response.c | 2 | ||||
| -rw-r--r-- | src/uci/state.c | 4 |
3 files changed, 27 insertions, 10 deletions
diff --git a/src/engine/moves.c b/src/engine/moves.c index 0c923a1..6f96109 100644 --- a/src/engine/moves.c +++ b/src/engine/moves.c @@ -76,7 +76,7 @@ int find_piece_on_square(position_t* p, int square) { if ((p->bitboards[BLACK_BISHOP] >> square) & 1) return BLACK_BISHOP; if ((p->bitboards[BLACK_KNIGHT] >> square) & 1) return BLACK_KNIGHT; if ((p->bitboards[BLACK_PAWN] >> square) & 1) return BLACK_PAWN; - assert(0); + assert(0 && "Failed to find the piece on the square"); } void position_make_move(position_t* position, move_t move) { @@ -140,24 +140,40 @@ void position_make_move(position_t* position, move_t move) { } if (move.flags & MOVE_PROMOTE_Q) { + if (move.flags & MOVE_CAPTURE) { + int to_remove_piece_type = find_piece_on_square(position, move.to); + position->bitboards[to_remove_piece_type] &= ~((bitboard_t)1 << move.to); + } int q_type = position->turn == WHITE_TURN ? WHITE_QUEEN : BLACK_QUEEN; position->bitboards[q_type] |= (bitboard_t)1 << move.to; position->turn = !position->turn; return; } if (move.flags & MOVE_PROMOTE_R) { + if (move.flags & MOVE_CAPTURE) { + int to_remove_piece_type = find_piece_on_square(position, move.to); + position->bitboards[to_remove_piece_type] &= ~((bitboard_t)1 << move.to); + } int q_type = position->turn == WHITE_TURN ? WHITE_ROOK : BLACK_ROOK; position->bitboards[q_type] |= (bitboard_t)1 << move.to; position->turn = !position->turn; return; } if (move.flags & MOVE_PROMOTE_B) { + if (move.flags & MOVE_CAPTURE) { + int to_remove_piece_type = find_piece_on_square(position, move.to); + position->bitboards[to_remove_piece_type] &= ~((bitboard_t)1 << move.to); + } int q_type = position->turn == WHITE_TURN ? WHITE_BISHOP : BLACK_BISHOP; position->bitboards[q_type] |= (bitboard_t)1 << move.to; position->turn = !position->turn; return; } if (move.flags & MOVE_PROMOTE_N) { + if (move.flags & MOVE_CAPTURE) { + int to_remove_piece_type = find_piece_on_square(position, move.to); + position->bitboards[to_remove_piece_type] &= ~((bitboard_t)1 << move.to); + } int q_type = position->turn == WHITE_TURN ? WHITE_KNIGHT : BLACK_KNIGHT; position->bitboards[q_type] |= (bitboard_t)1 << move.to; position->turn = !position->turn; @@ -206,6 +222,7 @@ int count_positions(position_t position, int depth) { moves_t moves; moves_init(&moves); get_legal_moves(&moves, position); + int count = 0; for (int i = 0; i < moves.length; i++) { position_t copy = position; @@ -221,6 +238,7 @@ void perft_divide(position_t position, int depth) { moves_t moves; moves_init(&moves); get_legal_moves(&moves, position); + int nodes = 0; for (int i = 0; i < moves.length; i++) { position_t copy = position; @@ -281,12 +299,11 @@ bool test_perft_position3() { d = count_positions(position, 3); if (d != 2812) return false; d = count_positions(position, 4); if (d != 43238) return false; d = count_positions(position, 5); if (d != 674624) return false; - perft_divide(position, 6); - d = count_positions(position, 6); - printf("%d\n", d); - if (d != 11030083) return false; - d = count_positions(position, 7); if (d != 178633661) return false; - d = count_positions(position, 8); if (d != 3009794393) return false; + d = count_positions(position, 6); if (d != 11030083) return false; + + // my move gen too slow to verify this + // d = count_positions(position, 7); if (d != 178633661) return false; + // d = count_positions(position, 8); if (d != 3009794393) return false; return true; } diff --git a/src/uci/response.c b/src/uci/response.c index da46cb7..ff89f8d 100644 --- a/src/uci/response.c +++ b/src/uci/response.c @@ -78,7 +78,7 @@ void handle_idle(uci_state_t *state, uci_cmd_t cmd) { return; } state->position = fen.position; - } else { assert(0); } + } else { assert(0 && "Invalid argument for position command"); } if (cmd.args_count >= k) return; assert(strcmp(uci_cmd_get_arg(cmd, k++), "moves") == 0); diff --git a/src/uci/state.c b/src/uci/state.c index ac043ed..012d951 100644 --- a/src/uci/state.c +++ b/src/uci/state.c @@ -104,7 +104,7 @@ void print_setting(option_setting_t setting) { printf("string default %s\n", setting.data.string_default); } else if (OPTION_BUTTON == setting.type) { printf("button\n"); - } else { assert(0); } + } else { assert(0 && "Failed to print the options"); } } void uci_state_init(uci_state_t *state) { @@ -207,7 +207,7 @@ void apply_option(uci_state_t *state, char *name, char *buffer) { memcpy(setting.value.string->data, buffer, setting.value.string->length); } else if (OPTION_BUTTON == setting.type) { *setting.value.button = true; - } else { assert(0); } + } else { assert(0 && "Failed to apply the option"); } memcpy(state->option_settings + i, &setting, sizeof(setting)); return; |
