Skip to content

Instantly share code, notes, and snippets.

@ktanaka117
Created May 28, 2018 17:14
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ktanaka117/1c7270b7a8f8bcd44d45c6a83550d59b to your computer and use it in GitHub Desktop.
Save ktanaka117/1c7270b7a8f8bcd44d45c6a83550d59b to your computer and use it in GitHub Desktop.
ペアプロTDDを楽しむ会 in DarkでやったFizzBuzzのお題。
// 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