require 'shape' require 'test/unit' class ShapeTest < Test::Unit::TestCase def test_abstract assert_raise(NotImplementedError){Shape[].contour} assert_raise(NotImplementedError){Shape[].svg} assert_raise(NotImplementedError){Shape[].viewbox} end def test_default_style assert_equal( Color.black, Shape[].default_style.fill ) end end class CurveTest < Test::Unit::TestCase def test_abstract assert_raise(NotImplementedError){Curve[].contour} assert_raise(NotImplementedError){Curve[].svg} assert_raise(NotImplementedError){Curve[].point(0.0)} assert_raise(NotImplementedError){Curve[].tangent(0.0)} assert_raise(NotImplementedError){Curve[].acc(0.0)} assert_raise(NotImplementedError){Curve[].length(0.0)} assert_raise(NotImplementedError){Curve[].rotation(0.0)} assert_raise(NotImplementedError){Curve[].scale(0.0)} end def test_default_style assert_equal( Color.black, Shape[].default_style.fill ) end end class LineTest < Test::Unit::TestCase @@line = Line[ :points, [ V2D[ 0.0, 0.0], V2D[ 0.0, 1.0] ] ] def test_point assert_equal( V2D[0.0, 0.3], @@line.point( 0.3 ) ) end def test_points assert_equal( [V2D[0.0, 0.3], V2D[0.0, 0.7]] , @@line.points( [0.3,0.7] ) ) end def test_tangent assert_equal( V2D[0.0, 1.0], @@line.tangent( 0.3 ) ) end def test_tangents assert_equal( [V2D[0.0, 1.0],V2D[0.0, 1.0]], @@line.tangents( [0.3,0.7] ) ) end def test_acc assert_equal( V2D[0.0, 0.0], @@line.acc( 0.3 ) ) end def test_normal assert_equal( V2D[-1.0, 0.0], @@line.normal( 0.3 ) ) end def test_normals assert_equal( [V2D[-1.0, 0.0],V2D[-1.0, 0.0]], @@line.normals( [0.3,0.7] ) ) end def test_acc_normal assert_equal( 0.0, @@line.acc_normal( 0.3 ) ) end def test_curvature assert_equal( 0.0, @@line.curvature( 0.3 ) ) end def test_surface assert_equal( 0.0, @@line.surface ) assert_equal( 1.0, Line[ :points, [ V2D[ 0.0, 0.0], V2D[ 1.0, 1.0] ] ].surface ) end def test_frame result = Frame[ :center, V2D[0.0,0.5], :vector, V2D[0.0,1.0], :rotation, 0.0, :scale, 1.0 ] assert_equal( result, @@line.frame( 0.5 ) ) end def test_frames result = [Frame[ :center, V2D[0.0,0.5], :vector, V2D[0.0,1.0], :rotation, 0.0, :scale, 1.0 ], Frame[ :center, V2D[0.0,0.7], :vector, V2D[0.0,1.0], :rotation, 0.0, :scale, 1.0 ]] assert_equal( result, @@line.frames( [0.5, 0.7] ) ) end def test_framev result = [ V2D[0.0,0.5], V2D[0.0,1.0] ] assert_equal( result, @@line.framev( 0.5 ) ) end def test_svg line = Line[ :points, [ V2D[ 0.0, 0.0], V2D[ 0.0, 1.0], V2D[ 0.0, 2.0] ] ] assert_equal( '', line.svg ) end def test_samples [Line[].samples(3), [V2D[0.0,0.0], V2D[0.5,0.5], V2D[1.0,1.0]] ].forzip do |v1, v2| assert( V2D.vequal?( v1, v2 ) ) end end def test_length line = Line[ :points, [ V2D[ 0.0, 0.0], V2D[ 0.0, 1.0], V2D[ 1.0, 1.0] ] ] assert_equal( 2.0, line.length ) end def test_translate line = Line[ :points, [ V2D[ 0.0, 0.0], V2D[ 0.0, 1.0], V2D[ 1.0, 1.0] ] ].translate( V2D[1.0,2.0] ) assert_equal( V2D[ 1.0, 2.0], line.point( 0.0 ) ) assert_equal( V2D[ 2.0, 3.0], line.point( 2.0 ) ) end def test_reverse line = Line[ :points, [ V2D[ 0.0, 0.0], V2D[ 0.0, 1.0], V2D[ 1.0, 1.0] ] ].reverse assert_equal( V2D[ 1.0, 1.0], line.point( 0.0 ) ) assert_equal( V2D[ 0.0, 0.0], line.point( 2.0 ) ) end end class CircleTest < Test::Unit::TestCase def test_default circle = Circle[] assert_equal( '', circle.svg ) end def test_svg circle = Circle[ :center, V2D[ 0.0, 0.0 ], :radius, 1.0 ] assert_equal( '', circle.svg ) end def test_viewbox circle = Circle[ :center, V2D[ 0.0, 0.0 ], :radius, 1.0 ] assert_equal( [-1.0, -1.0, 1.0, 1.0], circle.viewbox ) end def test_samples [Circle[].samples(3), [V2D[1.0,0.0], V2D[-1.0,0.0], V2D[1.0,0.0]] ].forzip do |v1, v2| assert( V2D.vequal?( v1, v2 ) ) end end def test_curvature assert( 1.0.fequal?( Circle[].curvature( 0.0 ) ) ) assert( Circle[].curvature( Range.O.rand ).fequal?( Circle[].curvature( Range.O.rand ) ) ) end def test_diameter cd = Circle.diameter( V2D[0.0,1.0], V2D[0.0,-1.0] ) c2 = Circle[ :center, V2D::O, :radius, 1.0 ] assert( V2D.vequal?( cd.center, c2.center ) ) assert_equal( cd.radius, c2.radius ) assert( V2D.vequal?( V2D[0.0,1.0], cd.point( 0.0 ) ) ) end def test_rotate assert( V2D.vequal?( V2D[0.0,1.0], Circle[].rotate(Math::PI/2.0).point( 0.0 ) ) ) end end