|
|
|
@ -37,7 +37,7 @@ final class FourInARowRulesTests: XCTestCase {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func testMovesOfPlayerAreValid() throws {
|
|
|
|
|
for player in Player.allCases {
|
|
|
|
|
for player in PieceType.allCases {
|
|
|
|
|
try self.setUpWithError()
|
|
|
|
|
|
|
|
|
|
try self._testMovesOfPlayerAreValid(player: player)
|
|
|
|
@ -46,7 +46,7 @@ final class FourInARowRulesTests: XCTestCase {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private func _testMovesOfPlayerAreValid(player: Player) throws {
|
|
|
|
|
private func _testMovesOfPlayerAreValid(player: PieceType) throws {
|
|
|
|
|
for action in self.rules.validMoves(board: self.board, for_player: player) {
|
|
|
|
|
rules.state = .Playing(turn: player)
|
|
|
|
|
XCTAssertTrue(self.rules.isValid(board: board, move: Move(player: player, action: action)), "\(action)")
|
|
|
|
@ -55,7 +55,7 @@ final class FourInARowRulesTests: XCTestCase {
|
|
|
|
|
|
|
|
|
|
func testOnMoveDone() {
|
|
|
|
|
let coord = Coords(1, board.rows - 1)
|
|
|
|
|
board[coord] = Piece(owner: .A)
|
|
|
|
|
board[coord] = Piece(type: .A)
|
|
|
|
|
let move = Move(player: .A, action: .InsertOnSide(side: .Top, offset: 1))
|
|
|
|
|
self.rules.onMoveDone(move: move, board: self.board)
|
|
|
|
|
|
|
|
|
@ -64,16 +64,16 @@ final class FourInARowRulesTests: XCTestCase {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func testOnMoveDoneDraw() {
|
|
|
|
|
board[0, 0] = Piece(owner: .A)
|
|
|
|
|
board[1, 0] = Piece(owner: .A)
|
|
|
|
|
board[2, 0] = Piece(owner: .B)
|
|
|
|
|
board[0, 1] = Piece(owner: .B)
|
|
|
|
|
board[1, 1] = Piece(owner: .B)
|
|
|
|
|
board[2, 1] = Piece(owner: .A)
|
|
|
|
|
board[0, 2] = Piece(owner: .A)
|
|
|
|
|
board[1, 2] = Piece(owner: .A)
|
|
|
|
|
board[0, 0] = Piece(type: .A)
|
|
|
|
|
board[1, 0] = Piece(type: .A)
|
|
|
|
|
board[2, 0] = Piece(type: .B)
|
|
|
|
|
board[0, 1] = Piece(type: .B)
|
|
|
|
|
board[1, 1] = Piece(type: .B)
|
|
|
|
|
board[2, 1] = Piece(type: .A)
|
|
|
|
|
board[0, 2] = Piece(type: .A)
|
|
|
|
|
board[1, 2] = Piece(type: .A)
|
|
|
|
|
|
|
|
|
|
board[2, 2] = Piece(owner: .B)
|
|
|
|
|
board[2, 2] = Piece(type: .B)
|
|
|
|
|
|
|
|
|
|
XCTAssertTrue(rules.isValid(board: board))
|
|
|
|
|
|
|
|
|
@ -85,15 +85,15 @@ final class FourInARowRulesTests: XCTestCase {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func testOnMoveDoneWin() {
|
|
|
|
|
board[0, 0] = Piece(owner: .A)
|
|
|
|
|
board[1, 0] = Piece(owner: .A)
|
|
|
|
|
board[2, 0] = Piece(owner: .A) //
|
|
|
|
|
board[0, 1] = Piece(owner: .B)
|
|
|
|
|
board[1, 1] = Piece(owner: .B)
|
|
|
|
|
board[2, 1] = Piece(owner: .A)
|
|
|
|
|
board[0, 2] = Piece(owner: .A)
|
|
|
|
|
board[1, 2] = Piece(owner: .A)
|
|
|
|
|
board[2, 2] = Piece(owner: .B)
|
|
|
|
|
board[0, 0] = Piece(type: .A)
|
|
|
|
|
board[1, 0] = Piece(type: .A)
|
|
|
|
|
board[2, 0] = Piece(type: .A) //
|
|
|
|
|
board[0, 1] = Piece(type: .B)
|
|
|
|
|
board[1, 1] = Piece(type: .B)
|
|
|
|
|
board[2, 1] = Piece(type: .A)
|
|
|
|
|
board[0, 2] = Piece(type: .A)
|
|
|
|
|
board[1, 2] = Piece(type: .A)
|
|
|
|
|
board[2, 2] = Piece(type: .B)
|
|
|
|
|
|
|
|
|
|
XCTAssertTrue(rules.isValid(board: board))
|
|
|
|
|
|
|
|
|
@ -118,15 +118,15 @@ final class FourInARowRulesTests: XCTestCase {
|
|
|
|
|
// AAA
|
|
|
|
|
// BAB
|
|
|
|
|
// BBA
|
|
|
|
|
board[0, 0] = Piece(owner: .A)
|
|
|
|
|
board[1, 0] = Piece(owner: .A)
|
|
|
|
|
board[2, 0] = Piece(owner: .A)
|
|
|
|
|
board[0, 1] = Piece(owner: .B)
|
|
|
|
|
board[1, 1] = Piece(owner: .A)
|
|
|
|
|
board[2, 1] = Piece(owner: .B)
|
|
|
|
|
board[0, 2] = Piece(owner: .B)
|
|
|
|
|
board[1, 2] = Piece(owner: .B)
|
|
|
|
|
board[2, 2] = Piece(owner: .A)
|
|
|
|
|
board[0, 0] = Piece(type: .A)
|
|
|
|
|
board[1, 0] = Piece(type: .A)
|
|
|
|
|
board[2, 0] = Piece(type: .A)
|
|
|
|
|
board[0, 1] = Piece(type: .B)
|
|
|
|
|
board[1, 1] = Piece(type: .A)
|
|
|
|
|
board[2, 1] = Piece(type: .B)
|
|
|
|
|
board[0, 2] = Piece(type: .B)
|
|
|
|
|
board[1, 2] = Piece(type: .B)
|
|
|
|
|
board[2, 2] = Piece(type: .A)
|
|
|
|
|
|
|
|
|
|
self._testCountMaxRow(coords: coords, expected: expected)
|
|
|
|
|
|
|
|
|
|