Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 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
Add Comment
Please, Sign In to add comment