diff --git a/bitboard/src/bitboard.rs b/bitboard/src/bitboard.rs index bb6738c..b9e4c1c 100644 --- a/bitboard/src/bitboard.rs +++ b/bitboard/src/bitboard.rs @@ -58,16 +58,12 @@ impl BitBoard { BitBoard(bits) } - // TODO: Is &u8 really necessary here? - pub fn rank(rank: &u8) -> BitBoard { - debug_assert!(*rank < 8); - library::RANKS[*rank as usize] + pub const fn rank(rank: Rank) -> BitBoard { + library::RANKS[rank.as_index()] } - // TODO: Is &u8 really necessary here? - pub fn file(file: &u8) -> BitBoard { - debug_assert!(*file < 8); - library::FILES[*file as usize] + pub const fn file(file: File) -> BitBoard { + library::FILES[file.as_index()] } pub fn ray(sq: Square, dir: Direction) -> BitBoard { @@ -313,7 +309,7 @@ impl From for u64 { impl From for BitBoard { fn from(value: File) -> Self { - library::FILES[*value.as_index() as usize] + library::FILES[value.as_index()] } } @@ -325,7 +321,7 @@ impl From> for BitBoard { impl From for BitBoard { fn from(value: Rank) -> Self { - library::FILES[*value.as_index() as usize] + library::FILES[value.as_index()] } } @@ -466,21 +462,24 @@ mod tests { #[test] #[ignore] fn display_and_debug() { - let bb = BitBoard::file(&0) | BitBoard::file(&3) | BitBoard::rank(&7) | BitBoard::rank(&4); + let bb = BitBoard::file(File::A) + | BitBoard::file(File::D) + | BitBoard::rank(Rank::FIVE) + | BitBoard::rank(Rank::EIGHT); println!("{}", &bb); } #[test] #[allow(clippy::unreadable_literal)] fn rank() { - assert_eq!(BitBoard::rank(&0).0, 0xFF, "Rank 1"); - assert_eq!(BitBoard::rank(&1).0, 0xFF00, "Rank 2"); - assert_eq!(BitBoard::rank(&2).0, 0xFF0000, "Rank 3"); - assert_eq!(BitBoard::rank(&3).0, 0xFF000000, "Rank 4"); - assert_eq!(BitBoard::rank(&4).0, 0xFF00000000, "Rank 5"); - assert_eq!(BitBoard::rank(&5).0, 0xFF0000000000, "Rank 6"); - assert_eq!(BitBoard::rank(&6).0, 0xFF000000000000, "Rank 7"); - assert_eq!(BitBoard::rank(&7).0, 0xFF00000000000000, "Rank 8"); + assert_eq!(BitBoard::rank(Rank::ONE).0, 0xFF, "Rank 1"); + assert_eq!(BitBoard::rank(Rank::TWO).0, 0xFF00, "Rank 2"); + assert_eq!(BitBoard::rank(Rank::THREE).0, 0xFF0000, "Rank 3"); + assert_eq!(BitBoard::rank(Rank::FOUR).0, 0xFF000000, "Rank 4"); + assert_eq!(BitBoard::rank(Rank::FIVE).0, 0xFF00000000, "Rank 5"); + assert_eq!(BitBoard::rank(Rank::SIX).0, 0xFF0000000000, "Rank 6"); + assert_eq!(BitBoard::rank(Rank::SEVEN).0, 0xFF000000000000, "Rank 7"); + assert_eq!(BitBoard::rank(Rank::EIGHT).0, 0xFF00000000000000, "Rank 8"); } #[test] diff --git a/board/src/movement.rs b/board/src/movement.rs index 33a3046..a1387db 100644 --- a/board/src/movement.rs +++ b/board/src/movement.rs @@ -63,10 +63,10 @@ fn pawn_pushes(pawn: BitBoard, color: Color, occupancy: BitBoard) -> BitBoard { match color { Color::White => { - let second_rank = BitBoard::rank(&Rank::TWO.into()); + const SECOND_RANK: BitBoard = BitBoard::rank(Rank::TWO); let mut pushes = pawn.shift_north_one() & vacancy; - if !(pawn & second_rank).is_empty() { + if !(pawn & SECOND_RANK).is_empty() { // Double push pushes = pushes | (pushes.shift_north_one() & vacancy); } @@ -74,10 +74,10 @@ fn pawn_pushes(pawn: BitBoard, color: Color, occupancy: BitBoard) -> BitBoard { pushes } Color::Black => { - let seventh_rank = BitBoard::rank(&Rank::SEVEN.into()); + const SEVENTH_RANK: BitBoard = BitBoard::rank(Rank::SEVEN); let mut pushes = pawn.shift_south_one() & vacancy; - if !(pawn & seventh_rank).is_empty() { + if !(pawn & SEVENTH_RANK).is_empty() { // Double push pushes = pushes | (pushes.shift_south_one() & vacancy); } diff --git a/core/src/coordinates.rs b/core/src/coordinates.rs index 919e262..b5862fb 100644 --- a/core/src/coordinates.rs +++ b/core/src/coordinates.rs @@ -88,8 +88,8 @@ macro_rules! range_bound_struct { } #[must_use] - $vis fn as_index(&self) -> &$repr { - &self.0 + $vis const fn as_index(&self) -> usize { + self.0 as usize } $vis fn iter(&self) -> impl Iterator {