StefanSalewski / rust-chess

Port of salewski-chess from Nim to Rust

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Wrong test for repeating positions in abeta()

StefanSalewski opened this issue · comments

The following code for testing repeating positions makes not much sense.

            if cup > 5 || hash_res.pop_cnt > 20 || is_a_pawnelsf || el.df != VOID_ID as i8 {
                // test dense populated board or deeper plys.
                m = abeta(
                    g,
                    opp_color(color),
                    v_depth + v_depth_inc + sdi[el.sf.abs() as usize] + ddi[el.df.abs() as usize],
                    cup + 1,
                    -beta,
                    -alpha,
                    hash_res_kks_len,
                    nep_pos,
                );
            } else {
                // deal with repetive positions
                let new_state = encode_board(&g, color); // this is the new board state after a piece is moved
                if g.history.contains_key(&new_state) && g.history[&new_state] >= 2 {
                    // this will be the third repetition, so draw can be requested
                    m.score = 0; // draw
                } else {
                    g.history.insert(new_state, 1);
                    m = abeta(
                        g,
                        opp_color(color),
                        v_depth
                            + v_depth_inc
                            + sdi[el.sf.abs() as usize]
                            + ddi[el.df.abs() as usize],
                        cup + 1,
                        -beta,
                        -alpha,
                        hash_res_kks_len,
                        nep_pos,
                    );
                    *g.history.get_mut(&new_state).unwrap() -= 1;
                }
            }

Should be fixed now.