Skip to content

Instantly share code, notes, and snippets.

@Booharin
Created June 19, 2019 08:49
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Booharin/498315eae635c4e2ba273c9aac48a868 to your computer and use it in GitHub Desktop.
Save Booharin/498315eae635c4e2ba273c9aac48a868 to your computer and use it in GitHub Desktop.
Incrementor
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