import XCTest @testable import Engine final class EngineTests: XCTestCase { override func setUp() { super.setUp() } func testPositionIndex() throws { var rank: Int8 = 9 for i: Int8 in 0..<64 { let file = (i % 8) + 1 if file - 1 == 0 { rank -= 1 } let pos: Square.Position = .init(rank: rank, file: file) XCTAssertTrue( pos.index == Int(i), "Expected \(i) got \(pos.index!)") } } func testDiagonalMoves() throws { let b: Bishop = .init(with: .White, on: .init(rank: 4, file: 4)) let result = [ Square.Position(rank: 5, file: 3), Square.Position(rank: 6, file: 2), Square.Position(rank: 7, file: 1), Square.Position(rank: 5, file: 5), Square.Position(rank: 6, file: 6), Square.Position(rank: 7, file: 7), Square.Position(rank: 8, file: 8), Square.Position(rank: 3, file: 5), Square.Position(rank: 2, file: 6), Square.Position(rank: 1, file: 7), Square.Position(rank: 3, file: 3), Square.Position(rank: 2, file: 2), Square.Position(rank: 1, file: 1), ] XCTAssertEqual(result, b.pseudoLegalPositions) } func testLinearMoves() throws { let r: Rook = .init(with: .White, on: .init(rank: 4, file: 4)) let result = [ Square.Position(rank: 5, file: 4), Square.Position(rank: 6, file: 4), Square.Position(rank: 7, file: 4), Square.Position(rank: 8, file: 4), Square.Position(rank: 4, file: 5), Square.Position(rank: 4, file: 6), Square.Position(rank: 4, file: 7), Square.Position(rank: 4, file: 8), Square.Position(rank: 3, file: 4), Square.Position(rank: 2, file: 4), Square.Position(rank: 1, file: 4), Square.Position(rank: 4, file: 3), Square.Position(rank: 4, file: 2), Square.Position(rank: 4, file: 1), ] XCTAssertEqual(result, r.pseudoLegalPositions) } func testKingMoves() throws { let k: King = .init(with: .White, on: .init(rank: 2, file: 8)) let result = [ Square.Position(rank: 3, file: 8), Square.Position(rank: 1, file: 8), Square.Position(rank: 1, file: 7), Square.Position(rank: 2, file: 7), Square.Position(rank: 3, file: 7), ] XCTAssertEqual(result, k.pseudoLegalPositions) } func testKnightMoves() throws { let n: Knight = .init(with: .White, on: .init(rank: 4, file: 4)) let result = [ Square.Position(rank: 6, file: 5), Square.Position(rank: 6, file: 3), Square.Position(rank: 2, file: 5), Square.Position(rank: 2, file: 3), Square.Position(rank: 5, file: 6), Square.Position(rank: 5, file: 2), Square.Position(rank: 3, file: 6), Square.Position(rank: 3, file: 2), ] XCTAssertEqual(result, n.pseudoLegalPositions) } func testPawnMoves() throws { let pw: Pawn = .init(with: .White, on: .init(rank: 4, file: 4)) var result = [ Square.Position(rank: 5, file: 4), Square.Position(rank: 6, file: 4), Square.Position(rank: 5, file: 5), Square.Position(rank: 5, file: 3), ] XCTAssertEqual(result, pw.pseudoLegalPositions) let pb: Pawn = .init(with: .Black, on: .init(rank: 4, file: 4)) result = [ Square.Position(rank: 3, file: 4), Square.Position(rank: 2, file: 4), Square.Position(rank: 3, file: 5), Square.Position(rank: 3, file: 3), ] XCTAssertEqual(result, pb.pseudoLegalPositions) } func testSetFenFromBoard() throws { let board: Board = .init() let fen = board.fen.value board.fen.set( from: board.board, activeColor: board.fen.activeColor, castling: board.fen.castlingAvailibility, enPassant: board.fen.enPassant, halfMoveClock: board.fen.halfMoveClock, fullMoveClock: board.fen.fullMoveClock) XCTAssertEqual( fen, board.fen.value, "Expected \(fen) got \(board.fen.value)") } // func testBoard() throws { // let board = Board() // } override func tearDown() { super.tearDown() } }