128 lines
3.7 KiB
Swift
128 lines
3.7 KiB
Swift
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()
|
|
}
|
|
}
|