]> git.sesse.net Git - stockfish/blobdiff - src/position.h
Fix duplicated moves generation in movepicker
[stockfish] / src / position.h
index c82c7a8bf87acbfc6c4c683599ce8c57a4dace99..485540ef866f9610ae9c1978701764816d90cbbc 100644 (file)
@@ -125,7 +125,7 @@ public:
   // Properties of moves
   bool legal(Move m) const;
   bool pseudo_legal(const Move m) const;
-  bool capture(Move m) const;
+  bool capture_stage(Move m) const;
   bool gives_check(Move m) const;
   Piece moved_piece(Move m) const;
   Piece captured_piece() const;
@@ -381,10 +381,14 @@ inline bool Position::is_chess960() const {
   return chess960;
 }
 
-inline bool Position::capture(Move m) const {
+// returns true if a move is generated from the capture stage
+// having also queen promotions covered, i.e. consistency with the capture stage move generation
+// is needed to avoid the generation of duplicate moves.
+inline bool Position::capture_stage(Move m) const {
   assert(is_ok(m));
-  // Castling is encoded as "king captures rook"
-  return (!empty(to_sq(m)) && type_of(m) != CASTLING) || type_of(m) == EN_PASSANT;
+  return     (!empty(to_sq(m)) && type_of(m) != CASTLING)
+          || (type_of(m) == PROMOTION && promotion_type(m) == QUEEN)
+          ||  type_of(m) == EN_PASSANT;
 }
 
 inline Piece Position::captured_piece() const {