Skip to content

Instantly share code, notes, and snippets.

@stanislaw
Last active July 28, 2017 15:54
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 stanislaw/9407f178a525a2cc4901 to your computer and use it in GitHub Desktop.
Save stanislaw/9407f178a525a2cc4901 to your computer and use it in GitHub Desktop.
Test Triangle Type (exercise from Kent Beck's "Test-Driven Development by Example")
//
// TriangleTest.swift
// TriangleTest
//
// Created by Stanislaw Pankevich on 24/01/16.
// Copyright © 2016 Stanislaw Pankevich. All rights reserved.
//
import XCTest
enum TriangleType {
case Equilateral
case Isosceles
case Scalene
case NotWellFormed
}
func triangleType(a: Int, _ b: Int, _ c: Int) -> TriangleType {
if (a <= 0 || b <= 0 || c <= 0) {
return .NotWellFormed
}
if (a == b && b == c) {
return .Equilateral
}
if (a == b || b == c || a == c) {
return .Isosceles
}
return .Scalene
}
class TriangleTest: XCTestCase {
func testEquilateral() {
let type = triangleType(1, 1, 1)
XCTAssert(type == .Equilateral)
}
func testScalene() {
let type = triangleType(1, 2, 3)
XCTAssert(type == .Scalene)
}
// Isosceles: 3 cases
func testIsoscelesAandB() {
let type = triangleType(2, 2, 1)
XCTAssert(type == .Isosceles)
}
func testIsoscelesBandC() {
let type = triangleType(2, 1, 2)
XCTAssert(type == .Isosceles)
}
func testIsoscelesAandC() {
let type = triangleType(2, 1, 2)
XCTAssert(type == .Isosceles)
}
// First parameter validation
func testMalformedIfFirstParameterIsZero() {
let type = triangleType(0, 1, 1)
XCTAssert(type == .NotWellFormed)
}
func testMalformedIfFirstParameterIsNegative() {
let type = triangleType(-1, 1, 1)
XCTAssert(type == .NotWellFormed)
}
// Second parameter validation
func testMalformedIfSecondParameterIsZero() {
let type = triangleType(1, 0, 1)
XCTAssert(type == .NotWellFormed)
}
func testMalformedIfSecondParameterIsNegative() {
let type = triangleType(1, -2, 1)
XCTAssert(type == .NotWellFormed)
}
// Third parameter validation
func testMalformedIfThirdParameterIsZero() {
let type = triangleType(1, 1, 0)
XCTAssert(type == .NotWellFormed)
}
func testMalformedIfThirdParameterIsNegative() {
let type = triangleType(1, 1, -3)
XCTAssert(type == .NotWellFormed)
}
}
@sjaustirni
Copy link

You forgot to check if sum of any two sides is bigger than the third one. For instance, a 5:1:2 triangle is according to your program scalene, whilst in fact it is malformed.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment