stm = Color(idx & 1);
bksq = Square((idx >> 1) & 63);
wksq = Square((idx >> 7) & 63);
- psq = make_square(File((idx >> 13) & 3), Rank((idx >> 15) + 1));
+ psq = File((idx >> 13) & 3) | Rank((idx >> 15) + 1);
}
Result KPKPosition::classify_leaf(int idx) {
&& rank_of(psq) < RANK_7)
return DRAW;
- // Case 4: White king in front of pawn and black has opposition
+ // Case 4: White king in front of pawn and black has opposition
if ( stm == WHITE
&& wksq == psq + DELTA_N
&& bksq == wksq + DELTA_N + DELTA_N
&& file_of(psq) == FILE_A)
return DRAW;
+ // Case 6: White king trapped on the rook file
+ if ( file_of(wksq) == FILE_A
+ && file_of(psq) == FILE_A
+ && rank_of(wksq) > rank_of(psq)
+ && bksq == wksq + 2)
+ return DRAW;
+
return UNKNOWN;
}