use std::fmt; pub struct Bitboard(pub u64); impl fmt::Display for Bitboard { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { for index in 0..64 { f.write_str(if &self.0 >> index & 1 == 1 { "1" } else { "." }); if (index + 1) % 8 == 0 { f.write_str("\n"); } } return write!(f, "\n") } } impl Bitboard { pub fn pop_count(&self) -> i32 { if self.0 == 0 { return 0; } return Bitboard::pop_count(&Bitboard(self.0 >> 1)) + (self.0 & 1) as i32; } } #[cfg(test)] mod tests { use super::*; #[test] fn test_print() { const bb: Bitboard = Bitboard(127); println!("{}", bb); } #[test] fn test_pop_count() { const bb: Bitboard = Bitboard(127); assert_eq!(bb.pop_count(), 7); } }