From ad2f6537bff7076b52415a9ec3a69a5dea581dff Mon Sep 17 00:00:00 2001 From: Alexis Drai Date: Thu, 26 Jan 2023 17:11:53 +0100 Subject: [PATCH] :construction::white_check_mark: BasicDefaultNoDiag rules --- .../rules/BasicDefaultsNoDiag.swift | 53 ++++++++++--------- .../BasicDefaultNoDiagTest.swift | 42 +++++++++++++-- 2 files changed, 66 insertions(+), 29 deletions(-) diff --git a/Connect4/connect4_lib/Sources/connect4_lib/rules/BasicDefaultsNoDiag.swift b/Connect4/connect4_lib/Sources/connect4_lib/rules/BasicDefaultsNoDiag.swift index 0cb8b5b..ccf2a84 100644 --- a/Connect4/connect4_lib/Sources/connect4_lib/rules/BasicDefaultsNoDiag.swift +++ b/Connect4/connect4_lib/Sources/connect4_lib/rules/BasicDefaultsNoDiag.swift @@ -1,11 +1,34 @@ import Foundation public struct BasicDefaultsNoDiag : IRules { - var minNbRows: Int - var maxNbRows: Int - var minNbCols: Int - var maxNbCols: Int - var nbChipsToAlign: Int + public let minNbRows: Int + public let maxNbRows: Int + public let minNbCols: Int + public let maxNbCols: Int + public let nbChipsToAlign: Int + + public init?(withMinNbRows minNbRows: Int = 5, + withMaxNbRows maxNbRows: Int = 15, + withMinNbCols minNbCols: Int = 5, + withMaxNbCols maxNbCols: Int = 15, + withNbChipsToAlign nbChipsToAlign: Int = 4) { + + guard ( + minNbRows >= 3 + && minNbCols >= 3 + && maxNbRows >= minNbRows + && maxNbCols >= minNbCols + && nbChipsToAlign >= 2 + && nbChipsToAlign < minNbCols + && nbChipsToAlign < minNbRows + ) else { return nil } + + self.minNbRows = minNbRows + self.maxNbRows = maxNbRows + self.minNbCols = minNbCols + self.maxNbCols = maxNbCols + self.nbChipsToAlign = nbChipsToAlign + } func isGameOver(byPlayer playerId: Int, onGrid grid: [[Int?]]) -> (isOver: Bool, hasWinner: Bool, victoryTiles: [(Int, Int)]?) { @@ -85,24 +108,4 @@ public struct BasicDefaultsNoDiag : IRules { case right case down } - - init?(withMinNbRows minNbRows: Int = 0, - withMaxNbRows maxNbRows: Int = 15, - withMaxNbCols minNbCols: Int = 0, - withMaxNbCols maxNbCols: Int = 15, - withNbChipsToAlign nbChipsToAlign: Int = 4) { - - guard (nbChipsToAlign >= 2 - && ( - nbChipsToAlign < maxNbCols || nbChipsToAlign < maxNbRows - )) else { return nil } - - self.minNbRows = minNbRows - self.maxNbRows = maxNbRows - self.minNbCols = minNbCols - self.maxNbCols = maxNbCols - self.nbChipsToAlign = nbChipsToAlign - } - - } diff --git a/Connect4/connect4_lib/Tests/connect4_libTests/BasicDefaultNoDiagTest.swift b/Connect4/connect4_lib/Tests/connect4_libTests/BasicDefaultNoDiagTest.swift index a14fc8c..b958916 100644 --- a/Connect4/connect4_lib/Tests/connect4_libTests/BasicDefaultNoDiagTest.swift +++ b/Connect4/connect4_lib/Tests/connect4_libTests/BasicDefaultNoDiagTest.swift @@ -2,11 +2,45 @@ import XCTest import connect4_lib final class BasicDefaultNoDiagTest: XCTestCase { - func testInit() { - // TODO + func testInit() throws { + func expect(withMinNbRows minNbRows: Int, + withMaxNbRows maxNbRows: Int, + withMinNbCols minNbCols: Int, + withMaxNbCols maxNbCols: Int, + withNbChipsToAlign nbChipsToAlign: Int, + shouldNotBeNil: Bool) { + + let rules = BasicDefaultsNoDiag(withMinNbRows: minNbRows, + withMaxNbRows: maxNbRows, + withMinNbCols: minNbCols, + withMaxNbCols: maxNbCols, + withNbChipsToAlign: nbChipsToAlign) + + if !shouldNotBeNil { + XCTAssertNil(rules) + return + } + XCTAssertNotNil(rules) + XCTAssertEqual(minNbRows, rules?.minNbRows) + XCTAssertEqual(maxNbRows, rules?.maxNbRows) + XCTAssertEqual(minNbCols, rules?.minNbCols) + XCTAssertEqual(maxNbCols, rules?.maxNbCols) + XCTAssertEqual(nbChipsToAlign, rules?.nbChipsToAlign) + } + + expect(withMinNbRows: 5, withMaxNbRows: 10, withMinNbCols: 5, withMaxNbCols: 10, withNbChipsToAlign: 3, shouldNotBeNil: true) + expect(withMinNbRows: 1, withMaxNbRows: 10, withMinNbCols: 5, withMaxNbCols: 10, withNbChipsToAlign: 3, shouldNotBeNil: false) + expect(withMinNbRows: 5, withMaxNbRows: 10, withMinNbCols: 1, withMaxNbCols: 10, withNbChipsToAlign: 3, shouldNotBeNil: false) + expect(withMinNbRows: 5, withMaxNbRows: 4, withMinNbCols: 5, withMaxNbCols: 10, withNbChipsToAlign: 3, shouldNotBeNil: false) + expect(withMinNbRows: 5, withMaxNbRows: 10, withMinNbCols: 5, withMaxNbCols: 4, withNbChipsToAlign: 3, shouldNotBeNil: false) + expect(withMinNbRows: 5, withMaxNbRows: 10, withMinNbCols: 5, withMaxNbCols: 10, withNbChipsToAlign: 1, shouldNotBeNil: false) + expect(withMinNbRows: 5, withMaxNbRows: 10, withMinNbCols: 5, withMaxNbCols: 12, withNbChipsToAlign: 11, shouldNotBeNil: false) + expect(withMinNbRows: 5, withMaxNbRows: 12, withMinNbCols: 5, withMaxNbCols: 10, withNbChipsToAlign: 11, shouldNotBeNil: false) } - func testIsGameOver() { - // TODO + func testIsGameOver() throws { + func expect() { + + } } }