require 'test/unit' require 'bezier' class BezierTest < Test::Unit::TestCase @@piece = [ :raw, V2D[0.0, 1.0], V2D[1.0, 1.0], V2D[0.0, 0.0], V2D[1.0, 0.0] ] @@bezier = Bezier.single( *@@piece ) @@beziersym = Bezier.raw( V2D[0.0, 0.0], V2D[1.0, 0.0], V2D[0.0, 1.0], V2D[1.0, 1.0] ) @@pieces = [[:raw, V2D[0.0, 1.0], V2D[1.0, 1.0], V2D[0.0, 0.0], V2D[1.0, 0.0] ], [:raw, V2D[1.0, 0.0], V2D[2.0, 2.0], V2D[1.0, 1.0], V2D[2.0, 0.0] ]] @@multibezier = Bezier.multi( @@pieces ) def test_builder b = Bezier.new( :pieces, [BezierSpline[:raw, V2D[0.0, 1.0], V2D[1.0, 1.0], V2D[0.0, 0.0], V2D[1.0, 0.0]]] ) assert_equal( V2D[0.0, 1.0], b.firstpoint ) b = Bezier.single( :raw, V2D[0.0, 1.0], V2D[1.0, 1.0], V2D[0.0, 0.0], V2D[1.0, 0.0] ) assert_equal( V2D[0.0, 1.0], b.firstpoint ) b = Bezier.raw( V2D[0.0, 1.0], V2D[1.0, 1.0], V2D[0.0, 0.0], V2D[1.0, 0.0] ) assert_equal( V2D[0.0, 1.0], b.firstpoint ) b = Bezier.vector( V2D[0.0, 1.0], V2D[1.0, 1.0], V2D[0.0, 0.0], V2D[1.0, 0.0] ) assert_equal( V2D[0.0, 1.0], b.firstpoint ) b = Bezier.multi( [@@piece] ) assert_equal( V2D[0.0, 1.0], b.firstpoint ) b = Bezier.multi( [@@piece,@@piece] ) assert_equal( V2D[0.0, 1.0], b.firstpoint ) end def test_O assert_equal( [V2D::O, V2D::O, V2D::O, V2D::O], Bezier::O.pointlist ) end def test_piece assert_equal( V2D[0.0, 1.0], @@multibezier.piece( 0 ).firstpoint ) assert_equal( V2D[1.0, 0.0], @@multibezier.piece( 1 ).firstpoint ) assert_equal( V2D[0.0, 1.0], @@multibezier.piece( 0.2 ).firstpoint ) assert_equal( V2D[1.0, 0.0], @@multibezier.piece( 0.7 ).firstpoint ) assert_equal( V2D[0.0, 1.0], @@multibezier.piece( 0.2, :parameter ).firstpoint ) assert_equal( V2D[0.0, 1.0], @@multibezier.piece( 0.7, :parameter ).firstpoint ) assert_equal( V2D[1.0, 0.0], @@multibezier.piece( 1.2, :parameter ).firstpoint ) end def test_piecenumber assert_equal( 1, @@bezier.piecenumber ) assert_equal( 2, @@multibezier.piecenumber ) end def test_viewbox assert_equal( [0.0, 0.0, 1.0, 1.0], @@bezier.viewbox ) end def test_pointlist assert_equal( [ V2D[0.0, 1.0], V2D[1.0, 1.0], V2D[0.0, 0.0], V2D[1.0, 0.0], V2D[1.0, 0.0], V2D[2.0, 2.0], V2D[1.0, 1.0], V2D[2.0, 0.0] ], @@multibezier.pointlist() ) assert_equal( [ V2D[0.0, 1.0], V2D[1.0, 1.0], V2D[0.0, 0.0], V2D[1.0, 0.0], V2D[1.0, 0.0], V2D[2.0, 2.0], V2D[1.0, 1.0], V2D[2.0, 0.0] ], @@multibezier.pointlist(:raw) ) assert_equal( [ V2D[0.0, 1.0], V2D[1.0, 0.0], V2D[1.0, 0.0], V2D[-1.0, 0.0], V2D[1.0, 0.0], V2D[1.0, 2.0], V2D[2.0, 0.0], V2D[-1.0, 1.0] ], @@multibezier.pointlist(:vector) ) assert_equal( [ V2D[0.0, 1.0], V2D[1.0, 1.0], V2D[0.0, 0.0], V2D[1.0, 0.0]], @@multibezier.piece(0).pointlist() ) assert_equal( [ V2D[1.0, 0.0], V2D[2.0, 2.0], V2D[1.0, 1.0], V2D[2.0, 0.0]], @@multibezier.piece(1).pointlist() ) assert_equal( [ V2D[0.0, 1.0], V2D[1.0, 1.0], V2D[0.0, 0.0], V2D[1.0, 0.0]], @@multibezier.piece(0).pointlist(:raw) ) assert_equal( [ V2D[1.0, 0.0], V2D[2.0, 2.0], V2D[1.0, 1.0], V2D[2.0, 0.0]], @@multibezier.piece(1).pointlist(:raw) ) assert_equal( [ V2D[0.0, 1.0], V2D[1.0, 0.0], V2D[1.0, 0.0], V2D[-1.0, 0.0]], @@multibezier.piece(0).pointlist(:vector) ) assert_equal( [ V2D[1.0, 0.0], V2D[1.0, 2.0], V2D[2.0, 0.0], V2D[-1.0, 1.0]], @@multibezier.piece(1).pointlist(:vector) ) assert_equal( [ V2D[0.0, 1.0], V2D[1.0, 1.0], V2D[0.0, 0.0], V2D[1.0, 0.0]], @@multibezier.piece(0.2).pointlist(:raw) ) assert_equal( [ V2D[1.0, 0.0], V2D[2.0, 2.0], V2D[1.0, 1.0], V2D[2.0, 0.0]], @@multibezier.piece(0.8).pointlist(:raw) ) assert_equal( [ V2D[0.0, 1.0], V2D[1.0, 1.0], V2D[0.0, 0.0], V2D[1.0, 0.0]], @@multibezier.piece(0.2, :parameter).pointlist ) assert_equal( [ V2D[1.0, 0.0], V2D[2.0, 2.0], V2D[1.0, 1.0], V2D[2.0, 0.0]], @@multibezier.piece(1.2, :parameter).pointlist ) end def test_firstpoint assert_equal( V2D[0.0, 1.0], @@multibezier.firstpoint ) end def test_lastpoint assert_equal( V2D[2.0, 0.0], @@multibezier.lastpoint ) end def test_beziers beziers = @@multibezier.beziers assert_equal( 2, beziers.length ) assert_equal( V2D[0.0, 1.0], beziers[0].firstpoint ) assert_equal( V2D[1.0, 0.0], beziers[1].firstpoint ) end def test_computelength assert( (1.0 - Bezier.raw( V2D[0.0, 0.0], V2D[1.0, 0.0], V2D[0.0, 0.0], V2D[1.0, 0.0] ).length()).abs < 0.00001 ) end def test_point assert( V2D.vequal?( V2D[0.5, 0.5], @@beziersym.point( 0.5 ) ) ) end def test_point_boundary assert( V2D.vequal?( @@beziersym.point( 0.0 ), @@beziersym.point( -1.0 ) ) ) assert( V2D.vequal?( @@beziersym.point( 1.0 ), @@beziersym.point( 2.0 ) ) ) end def test_parameter assert( V2D.vequal?( @@beziersym.piece(0).point( 0.1 ), @@beziersym.point( 0.1, nil, :parameter ) ) ) end def test_tangent assert( V2D.vequal?( V2D[0.0, 0.5], @@beziersym.tangent( 0.5 ) ) ) end def test_acc assert( V2D.vequal?( V2D[0.0, 0.0], @@beziersym.acc( 0.5 ) ) ) end def test_point2 container = V2D[0.0,0.0] assert( V2D.vequal?( V2D[0.5, 0.5], @@beziersym.point( 0.5, container ) ) ) assert( V2D.vequal?( V2D[0.5, 0.5], container ) ) end def test_tangent2 container = V2D[0.0,0.0] assert( V2D.vequal?( V2D[0.0, 0.5], @@beziersym.tangent( 0.5, container ) ) ) assert( V2D.vequal?( V2D[0.0, 0.5], container ) ) end def test_tangent3 container = V2D[0.0,0.0] assert( V2D.vequal?( V2D[0.0, 0.0], @@beziersym.acc( 0.5, container ) ) ) assert( V2D.vequal?( V2D[0.0, 0.0], container ) ) end def test_ranges assert_equal( [(0.0..1.0), (1.0..2.0)], @@multibezier.ranges ) end end