Skip to content

Instantly share code, notes, and snippets.

@mclosson
Created July 20, 2011 20:55
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 mclosson/1095915 to your computer and use it in GitHub Desktop.
Save mclosson/1095915 to your computer and use it in GitHub Desktop.
Solution to Triangle Classification Challenge from http://onestepback.org/vital_testing/
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