Fix quiet check move generation
authorFabian Fichter <ianfab@users.noreply.github.com>
Sun, 3 Nov 2019 08:57:12 +0000 (09:57 +0100)
committerFabian Fichter <ianfab@users.noreply.github.com>
Sun, 3 Nov 2019 08:57:12 +0000 (09:57 +0100)
Do not generate quiet checks outside of board in quiescence search.

Closes #45.

src/movegen.cpp
src/position.cpp

index 756aeed..d303842 100644 (file)
@@ -435,8 +435,8 @@ ExtMove* generate<QUIET_CHECKS>(const Position& pos, ExtMove* moveList) {
          moveList = make_move_and_gating<NORMAL>(pos, moveList, us, from, pop_lsb(&b));
   }
 
-  return us == WHITE ? generate_all<WHITE, QUIET_CHECKS>(pos, moveList, ~pos.pieces())
-                     : generate_all<BLACK, QUIET_CHECKS>(pos, moveList, ~pos.pieces());
+  return us == WHITE ? generate_all<WHITE, QUIET_CHECKS>(pos, moveList, ~pos.pieces() & pos.board_bb())
+                     : generate_all<BLACK, QUIET_CHECKS>(pos, moveList, ~pos.pieces() & pos.board_bb());
 }
 
 
index 36565d8..b3ce0c4 100644 (file)
@@ -781,6 +781,7 @@ bool Position::legal(Move m) const {
 
   assert(color_of(moved_piece(m)) == us);
   assert(!count<KING>(us) || piece_on(square<KING>(us)) == make_piece(us, KING));
+  assert(board_bb() & to);
 
   // Illegal checks
   if ((!checking_permitted() || (sittuyin_promotion() && type_of(m) == PROMOTION)) && gives_check(m))