Created
May 28, 2018 17:14
-
-
Save ktanaka117/1c7270b7a8f8bcd44d45c6a83550d59b to your computer and use it in GitHub Desktop.
ペアプロTDDを楽しむ会 in DarkでやったFizzBuzzのお題。
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
// FizzBuzzTests.swift | |
import XCTest | |
@testable import FizzBuzz | |
class FizzBuzzTests: XCTestCase { | |
func test数字を渡すとnumberを返す() { | |
XCTContext.runActivity(named: "2を渡した場合") { _ in | |
let fizzBuzz = FizzBuzz(2) | |
XCTContext.runActivity(named: "number(2)を返す") { _ in | |
XCTAssertEqual(.number(2), fizzBuzz.judge()) | |
} | |
} | |
XCTContext.runActivity(named: "1を渡した場合") { _ in | |
let fizzBuzz = FizzBuzz(1) | |
XCTContext.runActivity(named: "number(1)を返す") { _ in | |
XCTAssertEqual(.number(1), fizzBuzz.judge()) | |
} | |
} | |
} | |
func test3の倍数を渡すとfizzを返す() { | |
XCTContext.runActivity(named: "3を渡した場合") { _ in | |
let fizzBuzz = FizzBuzz(3) | |
XCTContext.runActivity(named: "fizzを返す") { _ in | |
XCTAssertEqual(.fizz, fizzBuzz.judge()) | |
} | |
} | |
XCTContext.runActivity(named: "6を渡した場合") { _ in | |
let fizzBuzz = FizzBuzz(6) | |
XCTContext.runActivity(named: "fizzを返す") { _ in | |
XCTAssertEqual(.fizz, fizzBuzz.judge()) | |
} | |
} | |
} | |
func test5の倍数を渡すとbuzzを返す() { | |
XCTContext.runActivity(named: "5を渡した場合") { _ in | |
let fizzBuzz = FizzBuzz(5) | |
XCTContext.runActivity(named: "buzzを返す") { _ in | |
XCTAssertEqual(.buzz, fizzBuzz.judge()) | |
} | |
} | |
XCTContext.runActivity(named: "10を渡した場合") { _ in | |
let fizzBuzz = FizzBuzz(10) | |
XCTContext.runActivity(named: "buzzを返す") { _ in | |
XCTAssertEqual(.buzz, fizzBuzz.judge()) | |
} | |
} | |
} | |
func test3と5の公倍数を渡すとfizzBuzzを返す() { | |
XCTContext.runActivity(named: "15を渡した場合") { _ in | |
let fizzBuzz = FizzBuzz(15) | |
XCTContext.runActivity(named: "fizzBuzzを返す") { _ in | |
XCTAssertEqual(.fizzBuzz, fizzBuzz.judge()) | |
} | |
} | |
XCTContext.runActivity(named: "30を渡した場合") { _ in | |
let fizzBuzz = FizzBuzz(30) | |
XCTContext.runActivity(named: "fizzBuzzを返す") { _ in | |
XCTAssertEqual(.fizzBuzz, fizzBuzz.judge()) | |
} | |
} | |
} | |
} | |
// ------------------------------- | |
// FizzBuzz.swift | |
import Foundation | |
enum FizzBuzzResult: Equatable { | |
case number(Int) | |
case fizz | |
case buzz | |
case fizzBuzz | |
static func ==(lhs: FizzBuzzResult, rhs: FizzBuzzResult) -> Bool { | |
switch (lhs, rhs) { | |
case (.fizz, .fizz), (.buzz, .buzz), (.fizzBuzz, .fizzBuzz): | |
return true | |
case (.number(let lhsValue), .number(let rhsValue)) where lhsValue == rhsValue: | |
return true | |
default: | |
return false | |
} | |
} | |
} | |
struct FizzBuzz { | |
private var number: Int | |
init(_ number: Int) { | |
self.number = number | |
} | |
func judge() -> FizzBuzzResult { | |
if number % 3 == 0 && number % 5 == 0 { | |
return .fizzBuzz | |
} | |
if number % 3 == 0 { | |
return .fizz | |
} | |
if number % 5 == 0 { | |
return .buzz | |
} | |
return .number(number) | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment