Created
July 20, 2011 20:55
-
-
Save mclosson/1095915 to your computer and use it in GitHub Desktop.
Solution to Triangle Classification Challenge from http://onestepback.org/vital_testing/
This file contains hidden or 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
require 'rspec' | |
class TriangleClassifier | |
def classify(len1, len2, len3) | |
lengths = [len1, len2, len3].sort | |
raise ArgumentError unless lengths.select {|length| length <= 0}.empty? | |
raise ArgumentError unless lengths[0] + lengths[1] > lengths[2] | |
case lengths.uniq.count | |
when 3 then :scalene | |
when 2 then :isoceles | |
when 1 then :equilateral | |
end | |
end | |
end | |
describe TriangleClassifier do | |
before(:each) do | |
@classifier = TriangleClassifier.new | |
end | |
it "returns scalene if all three sides are different lengths" do | |
@classifier.classify(3, 4, 5).should == :scalene | |
@classifier.classify(50, 87, 94).should == :scalene | |
@classifier.classify(307, 9, 308).should == :scalene | |
end | |
it "returns isoceles if two sides are equal lengths" do | |
@classifier.classify(3, 3, 5).should == :isoceles | |
@classifier.classify(4, 6, 4).should == :isoceles | |
@classifier.classify(2, 200, 200).should == :isoceles | |
end | |
it "returns equilateral if all three sides are equal lengths" do | |
@classifier.classify(3, 3, 3).should == :equilateral | |
@classifier.classify(1, 1, 1).should == :equilateral | |
@classifier.classify(170, 170, 170).should == :equilateral | |
end | |
it "raises ArgumentError if any given length is less than or equal to 0" do | |
lambda {@classifier.classify(3, 2, 0)}.should raise_error ArgumentError | |
lambda {@classifier.classify(4, 4, -4)}.should raise_error ArgumentError | |
lambda {@classifier.classify(0, 0, 0)}.should raise_error ArgumentError | |
end | |
it "raises ArgumentError if the sum of two lengths are not greater than the third" do | |
lambda {@classifier.classify(1, 2, 3)}.should raise_error ArgumentError | |
lambda {@classifier.classify(50, 87, 402)}.should raise_error ArgumentError | |
lambda {@classifier.classify(307, 9, 117)}.should raise_error ArgumentError | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment