Board: make starting_pos a const variable instead

This commit is contained in:
Simon Gardling 2025-04-01 15:49:18 -04:00
parent 672a523fd1
commit 30476757da
Signed by: titaniumtown
GPG Key ID: 9AB28AC10ECE533D
5 changed files with 18 additions and 17 deletions

View File

@ -16,7 +16,7 @@ fn extend_layers_no_pruning(depth: usize) -> usize {
children_eval_method: ChildrenEvalMethod::AverageDivDepth, children_eval_method: ChildrenEvalMethod::AverageDivDepth,
}; };
let mut fut = FutureMoves::new(Piece::Black, config); let mut fut = FutureMoves::new(Piece::Black, config);
fut.update_from_board(&Board::new().starting_pos()); fut.update_from_board(&Board::STARTING_POSITION);
fut.extend_layers(); fut.extend_layers();
fut.arena_len() fut.arena_len()
} }

View File

@ -22,7 +22,7 @@ pub fn run() {
}, },
); );
let mut board = Board::new().starting_pos(); let mut board = Board::STARTING_POSITION;
let mut rng = rand::rng(); let mut rng = rand::rng();
let mut i = 0; let mut i = 0;
while board.game_winner() == Winner::None && i < 2 { while board.game_winner() == Winner::None && i < 2 {

View File

@ -8,7 +8,7 @@ pub struct Game {
impl Game { impl Game {
pub fn new(player1: Box<dyn Agent>, player2: Box<dyn Agent>) -> Self { pub fn new(player1: Box<dyn Agent>, player2: Box<dyn Agent>) -> Self {
Self { Self {
inner: GameInner::new(player1, player2, true, Board::new().starting_pos()), inner: GameInner::new(player1, player2, true, Board::STARTING_POSITION),
} }
} }

View File

@ -629,7 +629,7 @@ mod tests {
let mut futm = FutureMoves::new(Piece::Black, FUTURE_MOVES_CONFIG); let mut futm = FutureMoves::new(Piece::Black, FUTURE_MOVES_CONFIG);
futm.config.max_depth = 1; futm.config.max_depth = 1;
futm.update_from_board(&Board::new().starting_pos()); futm.update_from_board(&Board::STARTING_POSITION);
futm.extend_layers(); futm.extend_layers();
assert_eq!(futm.arena_len(), 5); assert_eq!(futm.arena_len(), 5);
@ -710,7 +710,7 @@ mod tests {
#[test] #[test]
fn skip_move_recovery() { fn skip_move_recovery() {
let mut futm = FutureMoves::new(Piece::Black, FUTURE_MOVES_CONFIG); let mut futm = FutureMoves::new(Piece::Black, FUTURE_MOVES_CONFIG);
let mut board = Board::new().starting_pos(); let mut board = Board::STARTING_POSITION;
// replay of a test I did // replay of a test I did
// TODO! make this as small of a test as possible // TODO! make this as small of a test as possible
@ -774,8 +774,8 @@ mod tests {
fn derive_board() { fn derive_board() {
let mut futm = FutureMoves::new(Piece::White, FUTURE_MOVES_CONFIG); let mut futm = FutureMoves::new(Piece::White, FUTURE_MOVES_CONFIG);
let mut b = Board::new().starting_pos(); let mut b = Board::STARTING_POSITION;
futm.update_from_board(&Board::new().starting_pos()); futm.update_from_board(&b);
b.place((4, 2).into(), Piece::White).unwrap(); b.place((4, 2).into(), Piece::White).unwrap();

View File

@ -123,7 +123,7 @@ impl Board {
} }
pub fn random(steps: usize) -> Self { pub fn random(steps: usize) -> Self {
let mut new = Self::new().starting_pos(); let mut new = Self::STARTING_POSITION;
let mut p = Piece::Black; let mut p = Piece::Black;
let mut rng = rand::rng(); let mut rng = rand::rng();
for _ in 0..steps { for _ in 0..steps {
@ -137,16 +137,17 @@ impl Board {
new new
} }
/// Starting position pub const STARTING_POSITION: Self = {
pub const fn starting_pos(mut self) -> Self { let mut new = Self::new();
let hf = Self::SIZE / 2; let hf = Self::SIZE / 2;
self.place_unchecked(CoordPair::from_axes(hf - 1, hf - 1), Piece::White);
self.place_unchecked(CoordPair::from_axes(hf, hf - 1), Piece::Black);
self.place_unchecked(CoordPair::from_axes(hf - 1, hf), Piece::Black); new.place_unchecked(CoordPair::from_axes(hf - 1, hf - 1), Piece::White);
self.place_unchecked(CoordPair::from_axes(hf, hf), Piece::White); new.place_unchecked(CoordPair::from_axes(hf, hf - 1), Piece::Black);
self
} new.place_unchecked(CoordPair::from_axes(hf - 1, hf), Piece::Black);
new.place_unchecked(CoordPair::from_axes(hf, hf), Piece::White);
new
};
/// Provides an iterator of all possible positions on the board /// Provides an iterator of all possible positions on the board
pub fn all_positions() -> impl Iterator<Item = CoordPair> { pub fn all_positions() -> impl Iterator<Item = CoordPair> {
@ -499,7 +500,7 @@ mod test {
#[test] #[test]
fn format_test() { fn format_test() {
assert_eq!( assert_eq!(
Board::new().starting_pos().to_string().as_str(), Board::STARTING_POSITION.to_string().as_str(),
" 7 6 5 4 3 2 1 0 " 7 6 5 4 3 2 1 0
----------------- -----------------
7| | | | | | | | | 7| | | | | | | | |