Skip to content

Instantly share code, notes, and snippets.

@andyweiss1982
Created August 4, 2014 18:25
Show Gist options
  • Save andyweiss1982/06332cbe2409cc4448ef to your computer and use it in GitHub Desktop.
Save andyweiss1982/06332cbe2409cc4448ef to your computer and use it in GitHub Desktop.
Quadrilaterals
module Equilateral
def assign_sides(a)
@side1 = a
@side2 = a
@side3 = a
@side4 = a
end
def equilateral_sidelength
@side1
end
end
class Quadrilateral
def initialize(a, b, c, d)
@side1 = a
@side2 = b
@side3 = c
@side4 = d
end
def perimeter
@side1 + @side2 + @side3 + @side4
end
end
class Trapezoid < Quadrilateral
end
class Parallelogram < Quadrilateral
def initialize(a,b)
@side1 = a
@side2 = b
@side3 = a
@side4 = b
end
end
class Rhombus < Parallelogram
include Equilateral
def initialize(a)
assign_sides(a)
end
end
class Rectangle < Parallelogram
def area
@side1 * @side2
end
end
class Square < Rectangle
include Equilateral
def initialize(a)
assign_sides(a)
end
end
def test_quadrilateral
quad = Quadrilateral.new(1,2,3,4)
puts quad.perimeter == 10
end
def test_trapezoid
trap = Trapezoid.new(2,3,4,5)
puts trap.perimeter == 14
puts trap.is_a? Quadrilateral
end
def test_parallelogram
para = Parallelogram.new(6,3)
puts para.perimeter == 18
puts para.is_a? Quadrilateral
end
def test_rhombus
rhom = Rhombus.new(6)
puts rhom.perimeter == 24
puts rhom.equilateral_sidelength == 6
puts rhom.is_a? Parallelogram
puts rhom.is_a? Quadrilateral
end
def test_rectangle
rect = Rectangle.new(4,9)
puts rect.perimeter == 26
puts rect.area == 36
puts rect.is_a? Parallelogram
puts rect.is_a? Quadrilateral
end
def test_square
squa = Square.new(2)
puts squa.perimeter == 8
puts squa.area == 4
puts squa.equilateral_sidelength == 2
puts squa.is_a? Rectangle
puts squa.is_a? Parallelogram
puts squa.is_a? Quadrilateral
end
def test_all
test_quadrilateral
test_trapezoid
test_parallelogram
test_rhombus
test_rectangle
test_square
end
test_all
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment