Move: bit madness

This commit is contained in:
2025-03-12 17:44:32 -04:00
parent 31e88e3313
commit afa80ac597
5 changed files with 125 additions and 30 deletions

View File

@@ -46,6 +46,16 @@ pub enum Winner {
None,
}
impl Winner {
pub const fn raw(self) -> u8 {
unsafe { std::mem::transmute(self) }
}
pub const fn from_raw(value: u8) -> Self {
unsafe { std::mem::transmute(value) }
}
}
macro_rules! get_board {
// Immutable static access
($self:expr, Piece::White) => {
@@ -539,4 +549,17 @@ mod test {
assert_eq!(board.get((6, 0).into()), Some(Piece::Black), "\n{}", board);
}
#[test]
fn winner_repr() {
assert_eq!(Winner::Player(Piece::Black).raw(), 0b00);
assert_eq!(Winner::Player(Piece::White).raw(), 0b01);
assert_eq!(Winner::Tie.raw(), 0b10);
assert_eq!(Winner::None.raw(), 0b11);
assert_eq!(Winner::from_raw(0b00), Winner::Player(Piece::Black));
assert_eq!(Winner::from_raw(0b01), Winner::Player(Piece::White));
assert_eq!(Winner::from_raw(0b10), Winner::Tie);
assert_eq!(Winner::from_raw(0b11), Winner::None);
}
}