[board] Implement a PositionBuilder; refactor piece bitboards into a PieceBitBoards struct
This makes Position immutable, even if declared mut. I think this will also make it easier to build positions going forward. Moving to a PieceBitBoards struct also required a lot of places that return owned BitBoards to return refs. This is basically fine except for adding a few more & here and there. This was a huge refactoring project. All the move generators and a bunch of BitBoard stuff needed to be updated.
This commit is contained in:
parent
939fac80d7
commit
24cce95a88
17 changed files with 472 additions and 381 deletions
|
@ -76,23 +76,18 @@ impl<'pos> MoveGeneratorInternal for KingMoveGenerator<'pos> {
|
|||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
use crate::{piece, piece::Piece, Position, Square};
|
||||
use crate::Square;
|
||||
use std::collections::HashSet;
|
||||
|
||||
#[test]
|
||||
fn one_king() {
|
||||
let mut pos = Position::empty();
|
||||
pos.place_piece(Piece::king(Color::White), Square::E4)
|
||||
.expect("Failed to place king on e4");
|
||||
let pos = position![White King on E4];
|
||||
|
||||
let generator = KingMoveGenerator::new(&pos, Color::White);
|
||||
|
||||
let bb = generator.bitboard();
|
||||
assert_eq!(
|
||||
bb,
|
||||
BitBoard::new(
|
||||
0b00000000_00000000_00000000_00111000_00101000_00111000_00000000_00000000
|
||||
)
|
||||
generator.bitboard(),
|
||||
bitboard![E5, F5, F4, F3, E3, D3, D4, D5]
|
||||
);
|
||||
|
||||
let expected_moves = [
|
||||
|
@ -125,18 +120,16 @@ mod tests {
|
|||
|
||||
#[test]
|
||||
fn one_king_corner() {
|
||||
let mut pos = Position::empty();
|
||||
pos.place_piece(Piece::king(Color::White), Square::A1)
|
||||
.expect("Failed to place king on a1");
|
||||
let pos = position![White King on A1];
|
||||
|
||||
let generator = KingMoveGenerator::new(&pos, Color::White);
|
||||
|
||||
let bb = generator.bitboard();
|
||||
let generated_bitboard = generator.bitboard();
|
||||
let expected_bitboard = bitboard![A2, B2, B1];
|
||||
assert_eq!(
|
||||
bb,
|
||||
BitBoard::new(
|
||||
0b00000000_00000000_00000000_00000000_00000000_00000000_00000011_00000010
|
||||
)
|
||||
generator.bitboard(),
|
||||
bitboard![A2, B2, B1],
|
||||
"Generated:\n{generated_bitboard}\nExpected:\n{expected_bitboard}"
|
||||
);
|
||||
|
||||
let expected_moves = [
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue