Created
June 19, 2019 08:49
-
-
Save Booharin/498315eae635c4e2ba273c9aac48a868 to your computer and use it in GitHub Desktop.
Incrementor
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
protocol IncrementorInterface { | |
func getNumber() -> Int | |
func incrementNumber() | |
func setMaximumValue(maximumValue: Int) | |
} | |
class Incrementor: IncrementorInterface { | |
var number = 0 { | |
didSet { | |
// MARK: - check if maxNumber 0 | |
if maxNumber == 0 { | |
number = 0 | |
} | |
} | |
} | |
var maxNumber = Int.max | |
// MARK: - get current number, default 0 | |
func getNumber() -> Int { | |
return number | |
} | |
// MARK: - increment current number by 1 | |
func incrementNumber() { | |
number += 1 | |
if number == maxNumber { | |
number = 0 | |
} | |
} | |
// MARK: - set value for maximum number, default Int.max | |
func setMaximumValue(maximumValue: Int) { | |
guard maximumValue >= 0 else { return } | |
if maximumValue > number { | |
number = 0 | |
} | |
maxNumber = maximumValue | |
} | |
} | |
import XCTest | |
class IncrementorTests: XCTestCase { | |
var incrementor: Incrementor! | |
override func setUp() { | |
super.setUp() | |
incrementor = Incrementor() | |
} | |
override func tearDown() { | |
incrementor = nil | |
super.tearDown() | |
} | |
func testGetCurrentNumber() { | |
XCTAssertEqual(incrementor.getNumber(), incrementor.number, "Current number") | |
} | |
func testIncrementNumberByOne() { | |
incrementor.number = 0 | |
incrementor.incrementNumber() | |
XCTAssertEqual(incrementor.getNumber(), 1, "Number increment by 1") | |
} | |
func testSetMaximumValueToTwo() { | |
let maxValue = 2 | |
incrementor.number = 0 | |
incrementor.setMaximumValue(maximumValue: maxValue) | |
incrementor.incrementNumber() | |
incrementor.incrementNumber() | |
XCTAssertEqual(incrementor.getNumber(), 0, "Number increment by 2") | |
} | |
func testSetMaximumValueToZero() { | |
let maxValue = 0 | |
incrementor.number = 0 | |
incrementor.setMaximumValue(maximumValue: maxValue) | |
incrementor.incrementNumber() | |
XCTAssertEqual(incrementor.getNumber(), 0, "Number 0 when maxValue 0") | |
} | |
func testSetMaximumValueTonNegative() { | |
let maxValue = -1 | |
incrementor.number = 0 | |
incrementor.maxNumber = Int.max | |
incrementor.setMaximumValue(maximumValue: maxValue) | |
XCTAssertEqual(incrementor.maxNumber, Int.max, "Max value can't be negative") | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment