Sorry.mcostalba wrote: No, a double rear pawn is not passed, see pawns.cpp:
Code: Select all
// In order to prevent doubled passed pawns from receiving a too big // bonus, only the frontmost passed pawn on each file is considered as // a true passed pawn. if (passed && (ourPawns & squares_in_front_of(Us, s))) passed = false;

Next doubts:
Code: Select all
Bitboard b = ei.pi->passed_pawns() & pos.pieces(PAWN, Us);
while (b)
{
Square s = pop_1st_bit(&b);
assert(pos.piece_on(s) == piece_of_color_and_type(Us, PAWN));
assert(pos.pawn_is_passed(Us, s));
Code: Select all
assert(pos.piece_on(s) == piece_of_color_and_type(Us, PAWN));
because “Bitboard b” contains only “Us” pawns.
One important question: Does “assert” abort all function (no step of loop)?
If yes:
Code: Select all
assert(pos.pawn_is_passed(Us, s));
is probably a big bug, because all “Us” pawns from “b” should be tested.
ELO >>

It is unimportant trifleRalph Stoesser wrote:Yes, one pawn is on rank 2, the other is on rank 3.lech wrote: Is there any difference between passed pawns on relative RANK_2 or RANK_3 ?![]()
For instance
A pawn on rank 2 could possibly become blocked by enemy piece on rank 3, 4, 5, 6, 7 and 8.
A pawn on rank 3 can become blocked on rank 4, 5, 6, 7 and 8 only.
So it's not exactly the same.
(
