From ea3ec78de3535015c342b8ca34501a796ade1b64 Mon Sep 17 00:00:00 2001 From: Micha White Date: Tue, 3 Oct 2023 22:21:39 -0400 Subject: Fix `has_jump_at` functions --- model/src/possible_moves.rs | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) (limited to 'model/src/possible_moves.rs') diff --git a/model/src/possible_moves.rs b/model/src/possible_moves.rs index 9f9f5af..3dbc45b 100644 --- a/model/src/possible_moves.rs +++ b/model/src/possible_moves.rs @@ -647,9 +647,9 @@ impl PossibleMoves { let backward_spaces = backward_left_spaces | backward_right_spaces; let backward_spaces = board.king_bits() & backward_spaces; - (friendly_pieces & (forward_spaces | backward_spaces)) >> value != 0 + ((friendly_pieces & (forward_spaces | backward_spaces)) >> value) & 1 != 0 } else { - (friendly_pieces & forward_spaces) >> value != 0 + ((friendly_pieces & forward_spaces) >> value) & 1 != 0 } } @@ -678,9 +678,9 @@ impl PossibleMoves { let forward_spaces = forward_left_spaces | forward_right_spaces; let forward_spaces = board.king_bits() & forward_spaces; - (friendly_pieces & (forward_spaces | backward_spaces)) >> value != 0 + ((friendly_pieces & (forward_spaces | backward_spaces)) >> value) & 1 != 0 } else { - (friendly_pieces & backward_spaces) >> value != 0 + ((friendly_pieces & backward_spaces) >> value) & 1 != 0 } } @@ -1040,6 +1040,21 @@ mod tests { assert!(!possible_moves.can_jump()) } + #[test] + fn not_has_jump_at_14_when_has_jump_at_20() { + // This bug was caused by me forgetting to `& 1` to the end of the + // `has_jump_at` functions. After playing a jump with one piece, I was + // able to continue jumping with completely different pieces + let board = CheckersBitBoard::new( + 0b11100111001111001111110111111011, + 0b00001100001111001111001111000011, + 0, + PieceColor::Dark, + ); + let possible_moves = PossibleMoves::moves(board); + assert!(!possible_moves.can_jump()) + } + #[test] fn test_send() { fn assert_send() {} -- cgit v1.2.3