diff --git a/Cargo.toml b/Cargo.toml index 8be0db1..841248b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -13,6 +13,6 @@ rand = { version = "0.8.5", features = ["small_rng"] } [lints.clippy] enum_glob_use = "deny" -#pedantic = "deny" -#nursery = "deny" -#unwrap_used = "deny" \ No newline at end of file +# pedantic = "deny" +nursery = "deny" +unwrap_used = "deny" \ No newline at end of file diff --git a/src/attack.rs b/src/attack.rs index b45214d..9a7d2ff 100644 --- a/src/attack.rs +++ b/src/attack.rs @@ -36,7 +36,7 @@ static mut KING_ATTACKS: [Bitboard; 64] = [0; 64]; static mut BISHOP_ATTACKS: [[Bitboard; 512]; 64] = [[0; 512]; 64]; static mut ROOK_ATTACKS: [[Bitboard; 4096]; 64] = [[0; 4096]; 64]; -fn pawn_attacks(bitboard: Bitboard, color: Color) -> Bitboard { +const fn pawn_attacks(bitboard: Bitboard, color: Color) -> Bitboard { let mut attacks = 0_u64; match color { @@ -53,7 +53,7 @@ fn pawn_attacks(bitboard: Bitboard, color: Color) -> Bitboard { attacks } -fn knight_attacks(bitboard: Bitboard) -> Bitboard { +const fn knight_attacks(bitboard: Bitboard) -> Bitboard { let mut attacks = 0_u64; attacks |= (bitboard & NOT_AB_FILE) << (6); @@ -68,7 +68,7 @@ fn knight_attacks(bitboard: Bitboard) -> Bitboard { attacks } -fn king_attacks(bitboard: Bitboard) -> Bitboard { +const fn king_attacks(bitboard: Bitboard) -> Bitboard { let mut attacks = 0_u64; attacks |= (bitboard & NOT_H_FILE) << (1); @@ -85,12 +85,16 @@ fn king_attacks(bitboard: Bitboard) -> Bitboard { pub fn mask_bishop_attacks(bitboard: Bitboard) -> Bitboard { let mut attacks = 0_u64; - let target_rank = (bitboard == 0) - .then(|| 0) - .unwrap_or_else(|| bitboard.trailing_zeros() / 8); - let target_file = (bitboard == 0) - .then(|| 0) - .unwrap_or_else(|| bitboard.trailing_zeros() % 8); + let target_rank = if bitboard == 0 { + 0 + } else { + bitboard.trailing_zeros() / 8 + }; + let target_file = if bitboard == 0 { + 0 + } else { + bitboard.trailing_zeros() % 8 + }; let (mut rank, mut file) = (target_rank + 1, target_file + 1); for (rank, file) in (rank..=6).zip(file..=6) { @@ -117,12 +121,16 @@ pub fn mask_bishop_attacks(bitboard: Bitboard) -> Bitboard { pub fn mask_rook_attacks(bitboard: Bitboard) -> Bitboard { let mut attacks = 0_u64; - let target_rank = (bitboard == 0) - .then(|| 0) - .unwrap_or_else(|| bitboard.trailing_zeros() / 8); - let target_file = (bitboard == 0) - .then(|| 0) - .unwrap_or_else(|| bitboard.trailing_zeros() % 8); + let target_rank = if bitboard == 0 { + 0 + } else { + bitboard.trailing_zeros() / 8 + }; + let target_file = if bitboard == 0 { + 0 + } else { + bitboard.trailing_zeros() % 8 + }; let (mut rank, mut file) = (target_rank + 1, target_file + 1); for rank in rank..=6 { @@ -145,12 +153,16 @@ pub fn mask_rook_attacks(bitboard: Bitboard) -> Bitboard { pub fn bishop_attacks_on_the_fly(bitboard: Bitboard, blocker: Bitboard) -> Bitboard { let mut attacks = 0_u64; - let target_rank = (bitboard == 0) - .then(|| 0) - .unwrap_or_else(|| bitboard.trailing_zeros() / 8); - let target_file = (bitboard == 0) - .then(|| 0) - .unwrap_or_else(|| bitboard.trailing_zeros() % 8); + let target_rank = if bitboard == 0 { + 0 + } else { + bitboard.trailing_zeros() / 8 + }; + let target_file = if bitboard == 0 { + 0 + } else { + bitboard.trailing_zeros() % 8 + }; let (mut rank, mut file) = (target_rank + 1, target_file + 1); for (rank, file) in (rank..=7).zip(file..=7) { @@ -193,12 +205,16 @@ pub fn bishop_attacks_on_the_fly(bitboard: Bitboard, blocker: Bitboard) -> Bitbo pub fn rook_attacks_on_the_fly(bitboard: Bitboard, blocker: Bitboard) -> Bitboard { let mut attacks = 0_u64; - let target_rank = (bitboard == 0) - .then(|| 0) - .unwrap_or_else(|| bitboard.trailing_zeros() / 8); - let target_file = (bitboard == 0) - .then(|| 0) - .unwrap_or_else(|| bitboard.trailing_zeros() % 8); + let target_rank = if bitboard == 0 { + 0 + } else { + bitboard.trailing_zeros() / 8 + }; + let target_file = if bitboard == 0 { + 0 + } else { + bitboard.trailing_zeros() % 8 + }; let (mut rank, mut file) = (target_rank + 1, target_file + 1); for rank in rank..=7 { diff --git a/src/board.rs b/src/board.rs index d3dc12d..71cfbba 100644 --- a/src/board.rs +++ b/src/board.rs @@ -1,15 +1,15 @@ use std::fmt; use u64 as Bitboard; -#[derive(Debug, PartialEq)] +#[derive(Debug, PartialEq, Eq)] pub struct Board { white_pieces: [Piece; 6], black_pieces: [Piece; 6], } impl Board { - pub fn new() -> Board { - Board { + pub const fn new() -> Self { + Self { white_pieces: [ Piece::new(0xff00, Kind::Pawn, Color::White), Piece::new(0x81, Kind::Rook, Color::White), @@ -29,8 +29,8 @@ impl Board { } } - pub fn empty_board() -> Board { - Board { + pub const fn empty_board() -> Self { + Self { white_pieces: [ Piece::new(0x0, Kind::Pawn, Color::White), Piece::new(0x0, Kind::Rook, Color::White), @@ -85,7 +85,7 @@ impl fmt::Display for Board { } } -#[derive(Debug, PartialEq)] +#[derive(Debug, PartialEq, Eq)] pub struct Piece { pub bitboard: Bitboard, pub kind: Kind, @@ -93,8 +93,8 @@ pub struct Piece { } impl Piece { - pub fn new(bitboard: Bitboard, kind: Kind, color: Color) -> Piece { - Piece { + pub const fn new(bitboard: Bitboard, kind: Kind, color: Color) -> Self { + Self { bitboard, kind, color, @@ -116,7 +116,7 @@ impl fmt::Display for Piece { } } -#[derive(Debug, PartialEq)] +#[derive(Debug, PartialEq, Eq)] pub enum Kind { Pawn, Rook, @@ -126,7 +126,7 @@ pub enum Kind { King, } -#[derive(Debug, PartialEq)] +#[derive(Debug, PartialEq, Eq)] pub enum Color { White, Black, diff --git a/src/fen.rs b/src/fen.rs index f8d345b..a742264 100644 --- a/src/fen.rs +++ b/src/fen.rs @@ -123,9 +123,9 @@ fn en_passant_target_square(square: &str) -> Result { match sqr.next() { Some(file) if files.contains_key(&file) => match sqr.next() { - Some(rank) if ranks.contains_key(&rank) => { - Ok(ranks.get(&rank).unwrap() * 8 + files.get(&file).unwrap()) - } + Some(rank) if ranks.contains_key(&rank) => Ok(ranks.get(&rank).expect("Invalid rank") + * 8 + + files.get(&file).expect("Invalid file")), Some(_) | None => Err(FenError::from( "Not a valid rank (3 or 6) for an en passant target square", )), diff --git a/src/game.rs b/src/game.rs index 9ecf425..3b1234f 100644 --- a/src/game.rs +++ b/src/game.rs @@ -4,25 +4,25 @@ use crate::{ }; use String as FenError; -#[derive(Debug, PartialEq)] +#[derive(Debug, PartialEq, Eq)] pub struct Game { pub board: Board, pub state: State, } impl Game { - pub fn new() -> Game { - Game { + pub const fn new() -> Self { + Self { board: Board::new(), state: State::new(), } } - pub fn new_from_fen(fen: &str) -> Result { + pub fn new_from_fen(fen: &str) -> Result { from_fen(fen) } - pub fn run(&self) { + pub const fn run(&self) { Board::new(); } } @@ -33,7 +33,7 @@ impl Default for Game { } } -#[derive(Debug, PartialEq)] +#[derive(Debug, PartialEq, Eq)] pub struct State { side_to_move: Color, castling_ability: u8, @@ -43,8 +43,8 @@ pub struct State { } impl State { - pub fn new() -> State { - State { + pub const fn new() -> Self { + Self { side_to_move: Color::White, castling_ability: 0b1111, en_passant_target_square: 0, @@ -53,14 +53,14 @@ impl State { } } - pub fn load_state( + pub const fn load_state( side_to_move: Color, castling_ability: u8, en_passant_target_square: u8, halfmove_clock: u8, fullmove_counter: u8, - ) -> State { - State { + ) -> Self { + Self { side_to_move, castling_ability, en_passant_target_square, diff --git a/src/main.rs b/src/main.rs index 8272d91..b1805af 100644 --- a/src/main.rs +++ b/src/main.rs @@ -3,7 +3,6 @@ pub mod board; pub mod fen; pub mod game; pub mod magic; -pub mod r#move; use game::Game;