Reinitialize repository and add working move generation for all pieces

This commit is contained in:
Moritz Eigenauer 2025-11-12 17:01:12 +01:00
commit 951a8bbec6
28 changed files with 3373 additions and 0 deletions

View file

@ -0,0 +1,76 @@
use chess_engine::board::*;
#[test]
fn test_fen_roundtrip_standard() {
let fen_standard = "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1";
assert_eq!(Board::from_fen(fen_standard).to_fen(), fen_standard);
}
#[test]
fn test_fen_roundtrip_kiwipete() {
let fen_kiwipete = "r3k2r/p1ppqpb1/bn2pnp1/3PN3/1p2P3/2N2Q1p/PPPBBPPP/R3K2R w KQkq - 0 1";
assert_eq!(Board::from_fen(fen_kiwipete).to_fen(), fen_kiwipete);
}
#[test]
fn test_fen_roundtrip_en_passant() {
let fen_en_passant = "rnbqkbnr/pppppp1p/8/8/p7/4P3/PPPP1PPP/RNBQKBNR w KQkq e3 0 1";
assert_eq!(Board::from_fen(fen_en_passant).to_fen(), fen_en_passant);
}
#[test]
fn test_fen_roundtrip_castle() {
let fen_castle = "r3k2r/Pppp1ppp/1b3nbN/nP6/BBP1P3/q4N2/Pp1P2PP/R2QK2R b - - 0 1";
assert_eq!(Board::from_fen(fen_castle).to_fen(), fen_castle);
}
#[test]
fn test_fen_roundtrip_just_kings() {
let fen_just_kings = "8/k7/8/8/8/8/7K/8 w - - 0 1";
assert_eq!(Board::from_fen(fen_just_kings).to_fen(), fen_just_kings);
}
#[test]
fn test_fen_roundtrip_high_move_values() {
let fen_high_move_values = "8/P1k5/K7/8/8/8/8/8 w - - 0 78";
assert_eq!(Board::from_fen(fen_high_move_values).to_fen(), fen_high_move_values);
}
#[test]
fn test_fen_roundtrip_empty_count1() {
let fen_empty_count1 = "1n6/8/8/8/8/8/8/8 w - - 0 1";
assert_eq!(Board::from_fen(fen_empty_count1).to_fen(), fen_empty_count1);
}
#[test]
fn test_fen_roundtrip_empty_count2() {
let fen_empty_count2 = "6n1/8/8/8/8/8/8/8 w - - 0 1";
assert_eq!(Board::from_fen(fen_empty_count2).to_fen(), fen_empty_count2);
}
#[test]
fn test_board_fen_state() {
let fen_standard = "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1";
let board = Board::from_fen(fen_standard);
assert_eq!(board.pieces[PieceType::Pawn as usize][Color::White as usize], 65280);
assert_eq!(board.pieces[PieceType::Pawn as usize][Color::Black as usize], 71776119061217280);
assert_eq!(board.pieces[PieceType::Knight as usize][Color::White as usize], 66);
assert_eq!(board.pieces[PieceType::Knight as usize][Color::Black as usize], 4755801206503243776);
assert_eq!(board.pieces[PieceType::Bishop as usize][Color::White as usize], 36);
assert_eq!(board.pieces[PieceType::Bishop as usize][Color::Black as usize], 2594073385365405696);
assert_eq!(board.pieces[PieceType::Rook as usize][Color::White as usize], 129);
assert_eq!(board.pieces[PieceType::Rook as usize][Color::Black as usize], 9295429630892703744);
assert_eq!(board.pieces[PieceType::Queen as usize][Color::White as usize], 8);
assert_eq!(board.pieces[PieceType::Queen as usize][Color::Black as usize], 576460752303423488);
assert_eq!(board.pieces[PieceType::King as usize][Color::White as usize], 16);
assert_eq!(board.pieces[PieceType::King as usize][Color::Black as usize], 1152921504606846976);
assert_eq!(board.occupied[0], 65535);
assert_eq!(board.occupied[1], 18446462598732840960);
assert_eq!(board.all_occupied, 18446462598732906495);
assert_eq!(board.castling_rights, 15);
assert_eq!(board.en_passant_target, None);
assert_eq!(board.halfmove_clock, 0);
assert_eq!(board.fullmove_number, 1);
}