xrvg 0.0.3 → 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. data/CHANGES +21 -0
  2. data/README +3 -3
  3. data/Rakefile +4 -4
  4. data/examples/bezierbasic.rb +1 -0
  5. data/examples/bezierbasicvector.rb +1 -0
  6. data/examples/foreach.rb +1 -0
  7. data/examples/geodash.rb +1 -0
  8. data/examples/geodash2.rb +1 -0
  9. data/examples/hellocrown.rb +1 -0
  10. data/examples/hellocrown2.rb +1 -0
  11. data/examples/hellocrownrecurse.rb +1 -0
  12. data/examples/helloworldcompact.rb +1 -0
  13. data/examples/helloworldexpanded.rb +1 -0
  14. data/examples/multibezierbasic.rb +1 -0
  15. data/examples/palette_circle.rb +1 -0
  16. data/examples/randomdash.rb +1 -0
  17. data/examples/range_examples.rb +1 -0
  18. data/examples/range_examples2.rb +1 -0
  19. data/examples/sample.rb +1 -0
  20. data/examples/simpledash.rb +1 -0
  21. data/examples/uplets.rb +1 -0
  22. data/lib/bezier.rb +21 -55
  23. data/lib/bezierbuilders.rb +194 -0
  24. data/lib/beziermotifs.rb +114 -0
  25. data/lib/bezierspline.rb +20 -75
  26. data/lib/beziertools.rb +211 -0
  27. data/lib/color.rb +26 -7
  28. data/lib/fitting.rb +203 -0
  29. data/lib/frame.rb +2 -1
  30. data/lib/geometry2D.rb +6 -5
  31. data/lib/interbezier.rb +87 -0
  32. data/lib/interpolation.rb +6 -5
  33. data/lib/parametriclength.rb +87 -0
  34. data/lib/render.rb +4 -9
  35. data/lib/samplation.rb +71 -82
  36. data/lib/shape.rb +47 -25
  37. data/lib/style.rb +2 -1
  38. data/lib/trace.rb +2 -0
  39. data/lib/utils.rb +111 -17
  40. data/lib/xrvg.rb +16 -6
  41. data/test/test_attributable.rb +34 -2
  42. data/test/test_bezier.rb +93 -2
  43. data/test/test_bezierbuilders.rb +92 -0
  44. data/test/test_beziertools.rb +97 -0
  45. data/test/test_color.rb +65 -24
  46. data/test/test_fitting.rb +47 -0
  47. data/test/test_frame.rb +7 -2
  48. data/test/test_geometry2D.rb +26 -7
  49. data/test/test_interbezier.rb +29 -0
  50. data/test/test_interpolation.rb +16 -1
  51. data/test/test_parametric_length.rb +15 -0
  52. data/test/test_render.rb +54 -6
  53. data/test/test_shape.rb +103 -10
  54. data/test/test_trace.rb +13 -0
  55. data/test/test_utils.rb +114 -12
  56. data/test/test_xrvg.rb +3 -0
  57. metadata +16 -5
  58. data/lib/assertion.rb +0 -14
  59. data/lib/attributable.rb +0 -152
@@ -0,0 +1,92 @@
1
+ require 'test/unit'
2
+ require 'bezierbuilders'
3
+
4
+
5
+ class BezierBuilderTest < Test::Unit::TestCase
6
+
7
+ def test_abstract
8
+ assert_raise(NotImplementedError){BezierBuilder.new.compute}
9
+ end
10
+
11
+ def test_lissage
12
+ bezier = Bezier.multi( [[:vector, V2D::O, V2D::X, V2D::X, V2D::X], [:vector, V2D::X, V2D::X, V2D::X * 2.0, V2D::X]] )
13
+ assert_equal( bezier.pointlist, BezierBuilder.lissage( bezier, 0.0 ).pointlist )
14
+ assert_equal( [V2D::O, V2D::X, V2D::X, V2D::O, V2D::X, V2D::O, V2D::X * 2.0, V2D::X], BezierBuilder.lissage( bezier, 1.0 ).pointlist(:vector) )
15
+ end
16
+
17
+ end
18
+
19
+ class SimilarMotifIteratorTest < Test::Unit::TestCase
20
+
21
+ def test_all
22
+ bezier = Bezier.multi( [[:vector, V2D::O, V2D::X, V2D::X, V2D::X]] )
23
+ simibezier = SimilarMotifIterator[ :curvesampler, bezier, :motif, bezier, :nmotifs, 2 ]
24
+ assert( V2D.vequal?( bezier.firstpoint, simibezier.firstpoint ))
25
+ assert( V2D.vequal?(bezier.lastpoint, simibezier.lastpoint ))
26
+ assert( V2D.vequal?(bezier.point( 0.5 ), simibezier.bezier(0).lastpoint ))
27
+ end
28
+ end
29
+
30
+ class AttributeMotifIteratorTest < Test::Unit::TestCase
31
+
32
+ def test_all
33
+ require 'beziermotifs'
34
+ bezier = Bezier.multi( [[:vector, V2D::O, V2D::X, V2D::X, V2D::X]] )
35
+ simibezier = AttributeMotifIterator[ :curvesampler, bezier, :motifclass, LinearBezier, :nmotifs, 2, :closed, false ]
36
+ assert( V2D.vequal?( bezier.firstpoint, simibezier.firstpoint ))
37
+ assert( V2D.vequal?(bezier.lastpoint, simibezier.lastpoint ))
38
+ assert( V2D.vequal?(bezier.point( 0.5 ), simibezier.bezier(0).lastpoint ))
39
+ end
40
+
41
+ def test_all2
42
+ require 'beziermotifs'
43
+ bezier = Bezier.multi( [[:vector, V2D::O, V2D::X, V2D::X, V2D::X]] )
44
+ simibezier = AttributeMotifIterator[ :curvesampler, bezier, :motifclass, LinearBezier, :nmotifs, 2, :closed, true ]
45
+ assert( V2D.vequal?( bezier.firstpoint, simibezier.firstpoint ))
46
+ assert( V2D.vequal?(bezier.point( 0.5 ), simibezier.lastpoint ))
47
+ assert( V2D.vequal?(bezier.point( 0.5 ), simibezier.bezier(0).lastpoint ))
48
+ assert_equal( 4, simibezier.piecenumber )
49
+ end
50
+
51
+ def test_all3
52
+ require 'beziermotifs'
53
+ bezier = Bezier.multi( [[:vector, V2D::O, V2D::X, V2D::X, V2D::X]] )
54
+ simibezier = AttributeMotifIterator[ :curvesampler, bezier, :motifclass, PicBezier, :attributes, [:height, (0.0..1.0)], :nmotifs, 2, :closed, true ]
55
+ assert( V2D.vequal?( bezier.firstpoint, simibezier.firstpoint ))
56
+ assert( V2D.vequal?(bezier.point( 0.5 ), simibezier.lastpoint ))
57
+ assert( V2D.vequal?(bezier.point( 0.5 ), simibezier.bezier(1).lastpoint ))
58
+ assert_equal( 6, simibezier.piecenumber )
59
+ end
60
+
61
+ def test_all4
62
+ require 'beziermotifs'
63
+ bezier = Bezier.multi( [[:vector, V2D::O, V2D::X, V2D::X, V2D::X]] )
64
+ simibezier = AttributeMotifIterator[ :curvesampler, bezier, :motifclass, ArcBezier, :attributes, [:height, 1.0], :nmotifs, 2, :closed, true ]
65
+ assert( V2D.vequal?( bezier.firstpoint, simibezier.firstpoint ))
66
+ assert( V2D.vequal?(bezier.point( 0.5 ), simibezier.lastpoint ))
67
+ assert( V2D.vequal?(bezier.point( 0.5 ), simibezier.bezier(2).firstpoint ))
68
+ assert_equal( 4, simibezier.piecenumber )
69
+ end
70
+
71
+ def test_complete
72
+ assert_equal( V2D::O, LinearBezier.buildwithangle( 0.0 ).firstpoint )
73
+ end
74
+
75
+ end
76
+
77
+ class FitBezierBuilderTest < Test::Unit::TestCase
78
+
79
+ def test_all
80
+ bezier = Bezier.raw( V2D[0.0, 0.0], V2D[100.0, 0.0], V2D[0.0, 100.0], V2D[100.0, 100.0] )
81
+ points = bezier.samples( 15 )
82
+ fit = FitBezierBuilder[ :points, points, :maxerror, 0.001 ]
83
+ assert_equal( 3, fit.piecenumber )
84
+ end
85
+ end
86
+
87
+ class CircleTest < Test::Unit::TestCase
88
+
89
+ def test_bezier
90
+ assert_equal( 2, Circle[].bezier.piecenumber )
91
+ end
92
+ end
@@ -0,0 +1,97 @@
1
+ require 'beziertools'
2
+ require 'test/unit'
3
+
4
+ class SimpleBezierTest < Test::Unit::TestCase
5
+ def test_all
6
+ bezier = SimpleBezier[ :support, [V2D::O,V2D::X, V2D::X+V2D::Y] ]
7
+ assert_equal( V2D::O, bezier.firstpoint )
8
+ assert_equal( 2, bezier.piecenumber )
9
+ assert_raise(RuntimeError){SimpleBezier[ :support, [V2D::O] ]}
10
+ assert_equal( SimpleBezier[ :support, [V2D::O,V2D::X] ].point( 0.3 ), LinearBezier[ :support, [V2D::O,V2D::X] ].point( 0.3 ) )
11
+ end
12
+ end
13
+
14
+ class ClosureTest < Test::Unit::TestCase
15
+
16
+ def test_all
17
+ bezier = SimpleBezier[ :support, [V2D::O, V2D::X, V2D::X+V2D::Y] ]
18
+ closure = ClosureBezier[ :bezierlist, [bezier, LinearBezier[ :support, [V2D::X, -V2D::X] ]]]
19
+ assert_equal( V2D::O, closure.lastpoint )
20
+ assert_equal( 5, closure.piecenumber )
21
+ end
22
+
23
+ end
24
+
25
+ class OffestTest < Test::Unit::TestCase
26
+
27
+ def test_all
28
+ bezier = LinearBezier.buildwithangle( 0.0 )
29
+ offset = Offset[ :support, bezier, :ampl, 1.0, :nsamples, 10 ]
30
+ assert( V2D.vequal?( V2D::O + V2D::Y, offset.firstpoint ) )
31
+ assert( V2D.vequal?( V2D::O + V2D::X + V2D::Y, offset.lastpoint ) )
32
+ end
33
+
34
+ def test_roller
35
+ bezier = LinearBezier.buildwithangle( 0.0 )
36
+ offset = Offset[ :support, bezier, :ampl, (0.0..1.0).samples(10), :nsamples, 10 ]
37
+ assert( V2D.vequal?( V2D::O, offset.firstpoint ) )
38
+ assert( V2D.vequal?( V2D::O + V2D::X + V2D::Y, offset.lastpoint ) )
39
+ end
40
+
41
+ def test_sampler
42
+ bezier = LinearBezier.buildwithangle( 0.0 )
43
+ offset = Offset[ :support, bezier, :ampl, (0.0..1.0), :nsamples, 10 ]
44
+ assert( V2D.vequal?( V2D::O, offset.firstpoint ) )
45
+ assert( V2D.vequal?( V2D::O + V2D::X + V2D::Y, offset.lastpoint ) )
46
+ end
47
+
48
+ end
49
+
50
+ class FuseauTest < Test::Unit::TestCase
51
+
52
+ def test_all
53
+ bezier = LinearBezier.buildwithangle( 0.0 )
54
+ offset = Fuseau[ :support, bezier, :maxwidth, 1.0, :nsamples, 10 ]
55
+ assert( V2D.vequal?( V2D::O + V2D::X, offset.lastpoint ) )
56
+ assert( V2D.vequal?( V2D::O + V2D::Y, offset.firstpoint ) )
57
+ end
58
+
59
+ end
60
+
61
+ class BezierLevelTest < Test::Unit::TestCase
62
+
63
+ def test_all
64
+ offset = BezierLevel[ :samplelist, [0.0,0.0, 1.0,1.0]]
65
+ assert( V2D.vequal?( V2D::O, offset.firstpoint ) )
66
+ assert( V2D.vequal?( V2D::O + V2D::Y + V2D::X, offset.lastpoint ) )
67
+ end
68
+
69
+ end
70
+
71
+ class OndulationTest < Test::Unit::TestCase
72
+
73
+ def test_all
74
+ bezier = LinearBezier.buildwithangle( 0.0 )
75
+ ondulation = Ondulation[ :support, bezier, :ampl, 1.0, :freq, 2 ]
76
+ assert( V2D.vequal?( V2D::O, ondulation.firstpoint ) )
77
+ assert_equal( 4, ondulation.piecenumber )
78
+ end
79
+
80
+ def test_roller
81
+ bezier = LinearBezier.buildwithangle( 0.0 )
82
+ ondulation = Ondulation[ :support, bezier, :ampl, (0.0..1.0).samples(2), :freq, 2 ]
83
+ assert( V2D.vequal?( V2D::O, ondulation.firstpoint ) )
84
+ assert_equal( 4, ondulation.piecenumber )
85
+ end
86
+
87
+ def test_sampler
88
+ bezier = LinearBezier.buildwithangle( 0.0 )
89
+ ondulation = Ondulation[ :support, bezier, :ampl, (0.0..1.0), :freq, 2 ]
90
+ assert( V2D.vequal?( V2D::O, ondulation.firstpoint ) )
91
+ assert_equal( 4, ondulation.piecenumber )
92
+ end
93
+
94
+ end
95
+
96
+
97
+
data/test/test_color.rb CHANGED
@@ -13,10 +13,20 @@ class ColorTest < Test::Unit::TestCase
13
13
  end
14
14
 
15
15
  def test_colors
16
- black = Color[0.0, 0.0, 0.0, 1.0]
17
- white = Color[1.0, 1.0, 1.0, 1.0]
16
+ black = Color[0.0, 0.0, 0.0, 1.0]
17
+ white = Color[1.0, 1.0, 1.0, 1.0]
18
+ blue = Color[0.0, 0.0, 1.0, 1.0]
19
+ red = Color[1.0, 0.0, 0.0, 1.0]
20
+ green = Color[0.0, 1.0, 0.0, 1.0]
21
+ yellow = Color[1.0, 1.0, 0.0, 1.0]
22
+ orange = Color[1.0, 0.5, 0.0, 1.0]
18
23
  assert_equal( black, Color.black )
19
24
  assert_equal( white, Color.white )
25
+ assert_equal( red, Color.red )
26
+ assert_equal( blue, Color.blue )
27
+ assert_equal( green, Color.green )
28
+ assert_equal( yellow, Color.yellow )
29
+ assert_equal( orange, Color.orange )
20
30
  end
21
31
 
22
32
  def test_svg
@@ -30,6 +40,43 @@ class ColorTest < Test::Unit::TestCase
30
40
  assert_equal( black, Color.hsv( 0.0, 0.0, 0.0, 1.0 ) )
31
41
  assert_equal( white, Color.hsv( 0.0, 0.0, 1.0, 1.0 ) )
32
42
  assert_equal( red, Color.hsv( 0.0, 1.0, 1.0, 1.0 ) )
43
+ assert_equal( black, Color.hsv( 0.2, 1.0, 0.0, 1.0 ) )
44
+ assert_equal( black, Color.hsv( 0.4, 1.0, 0.0, 1.0 ) )
45
+ assert_equal( black, Color.hsv( 0.6, 1.0, 0.0, 1.0 ) )
46
+ assert_equal( black, Color.hsv( 0.8, 1.0, 0.0, 1.0 ) )
47
+ assert_equal( black, Color.hsv( 1.0, 1.0, 0.0, 1.0 ) )
48
+ end
49
+
50
+ def test_hsl
51
+ black = Color[0.0, 0.0, 0.0, 1.0]
52
+ white = Color[1.0, 1.0, 1.0, 1.0]
53
+ red = Color[1.0, 0.0, 0.0, 1.0]
54
+ assert_equal( black, Color.hsl( 0.0, 0.0, 0.0, 1.0 ) )
55
+ assert_equal( white, Color.hsl( 0.0, 0.0, 1.0, 1.0 ) )
56
+ assert_equal( white, Color.hsl( 0.0, 1.0, 1.0, 1.0 ) )
57
+ assert_equal( white, Color.hsl( 2.0, 1.0, 1.0, 1.0 ) )
58
+ assert_equal( white, Color.hsl( 0.6, 1.0, 1.0, 1.0 ) )
59
+ end
60
+
61
+
62
+ def test_accessors
63
+ black = Color[0.0, 0.0, 0.0, 1.0]
64
+ assert_equal( 0.0, black.r )
65
+ assert_equal( 0.0, black.g )
66
+ assert_equal( 0.0, black.b )
67
+ assert_equal( 1.0, black.a )
68
+ black.r = 1.0
69
+ assert_equal( 1.0, black.r )
70
+ black.g = 1.0
71
+ assert_equal( 1.0, black.g )
72
+ black.b = 1.0
73
+ assert_equal( 1.0, black.b )
74
+ black.a = 0.0
75
+ assert_equal( 0.0, black.a )
76
+ end
77
+
78
+ def test_format255
79
+ assert_equal( [255,255,255,255], Color.white.format255 )
33
80
  end
34
81
 
35
82
  end
@@ -40,40 +87,34 @@ class PaletteTest < Test::Unit::TestCase
40
87
  def test_palette
41
88
  palette = Palette.new( :colorlist, [ 0.0, Color.black, 1.0, Color.white ] )
42
89
  assert_equal( Color[0.5, 0.5, 0.5, 1.0], palette.color( 0.5 ) )
90
+ assert_equal( Color[0.5, 0.5, 0.5, 1.0], palette.sample( 0.5 ) )
91
+ end
92
+
93
+ def test_reverse
94
+ palette = Palette.new( :colorlist, [ 0.0, Color.black, 0.3, Color.red, 1.0, Color.white ] ).reverse
95
+ assert_equal( Color.red, palette.color( 0.7 ) )
43
96
  end
97
+
44
98
  end
45
99
 
46
100
  class GradientTest < Test::Unit::TestCase
47
101
 
48
102
  def test_gradient
103
+ assert_raise(NotImplementedError) {Gradient[ :colorlist, [0.0, Color.black, 1.0, Color.white]].defsvg}
104
+ end
105
+
106
+ def test_lineargradient
49
107
  gradient = LinearGradient.new( :colorlist, [0.0, Color.black, 1.0, Color.white] )
50
108
  assert_equal( gradient.svgdef,
51
109
  "<linearGradient id=\"%ID%\" x1=\"0%\" y1=\"0%\" x2=\"0%\" y2=\"100%\">\n<stop offset=\"0.0\" stop-color=\"rgb(0,0,0)\" stop-opacity=\"1.0\"/>\n<stop offset=\"1.0\" stop-color=\"rgb(255,255,255)\" stop-opacity=\"1.0\"/>\n</linearGradient>")
52
110
 
53
111
  end
54
112
 
55
- if nil
56
- def test_gradient1
57
- require 'render'
58
- require 'shape'
59
- render = SVGRender.new( :filename, "gradient1.svg" )
60
- render.add( Circle.new, Style.new( :stroke, "none", :fill, LinearGradient.new( :colorlist, [0.0, Color.black, 1.0, Color.white] ) ) )
61
- render.end
62
- assert( File.exist?( "gradient1.png" ) )
63
- end
64
- end
113
+ def test_circulargradient
114
+ circle = Circle.new
115
+ gradient = CircularGradient.new( :colorlist, [0.0, Color.black(1.0), 1.0, Color.black(0.0)], :circle, circle )
116
+ assert_equal( gradient.svgdef,
117
+ "<radialGradient id=\"%ID%\" gradientUnits=\"userSpaceOnUse\" cx=\"0.0\" cy=\"0.0\" r=\"1.0\">\n<stop offset=\"0.0\" stop-color=\"rgb(0,0,0)\" stop-opacity=\"1.0\"/>\n<stop offset=\"1.0\" stop-color=\"rgb(0,0,0)\" stop-opacity=\"0.0\"/>\n</radialGradient>")
65
118
 
66
- if nil
67
- def test_gradient2
68
- require 'render'
69
- require 'shape'
70
- render = SVGRender.new( :filename, "gradient2.svg" )
71
- circle = Circle.new
72
- style = Style.new( :stroke, "none", :fill, CircularGradient.new( :colorlist, [0.0, Color.black(1.0), 1.0, Color.black(0.0)], :circle, circle ) )
73
- render.add( circle, style )
74
- render.end
75
- assert( File.exist?( "gradient2.png" ) )
76
119
  end
77
- end
78
-
79
120
  end
@@ -0,0 +1,47 @@
1
+ require 'test/unit'
2
+ require 'fitting'
3
+
4
+ class FittingTest < Test::Unit::TestCase
5
+
6
+ def test_base
7
+ bezier = Bezier.raw( V2D[0.0, 0.0], V2D[100.0, 0.0], V2D[0.0, 100.0], V2D[100.0, 100.0] )
8
+ points = bezier.samples( 30 )
9
+ fit = Fitting.compute( points, 0.000001, 500 )
10
+ assert( V2D.vequal?( bezier.pointlist[1], fit.pointlist[1], 0.01) )
11
+ assert( V2D.vequal?( bezier.pointlist[2], fit.pointlist[2], 0.01) )
12
+ end
13
+
14
+ def test_base2
15
+ bezier = Bezier.raw( V2D[0.0, 0.0], V2D[100.0, 0.0], V2D[0.0, 100.0], V2D[100.0, 100.0] )
16
+ points = bezier.samples( 15 )
17
+ fit, error = Fitting.adaptative_compute( points, 0.01 )
18
+ assert_equal( 1, fit.piecenumber )
19
+ end
20
+
21
+ def test_base3
22
+ bezier = Bezier.raw( V2D[0.0, 0.0], V2D[100.0, 0.0], V2D[0.0, 100.0], V2D[100.0, 100.0] )
23
+ points = bezier.samples( 15 )
24
+ fit, error = Fitting.adaptative_compute( points, 0.001 )
25
+ assert_equal( 3, fit.piecenumber )
26
+ end
27
+
28
+
29
+ def test_limit
30
+ points = [V2D[0.0, 0.0]] * 10
31
+ fit, error = Fitting.adaptative_compute( points, 0.01 )
32
+ assert_equal( 1, fit.piecenumber )
33
+ end
34
+
35
+
36
+ def test_limit2
37
+ bezier = Bezier.raw( V2D[0.0, 0.0], V2D[100.0, 0.0], V2D[0.0, 100.0], V2D[100.0, 100.0] )
38
+ points = bezier.samples( 30 )
39
+ points = [points[0]] + points
40
+ fit = Fitting.compute( points, 0.000001, 500 )
41
+ assert( V2D.vequal?( bezier.pointlist[1], fit.pointlist[1], 0.01) )
42
+ assert( V2D.vequal?( bezier.pointlist[2], fit.pointlist[2], 0.01) )
43
+ end
44
+
45
+
46
+
47
+ end
data/test/test_frame.rb CHANGED
@@ -5,8 +5,13 @@ require 'geometry2D'
5
5
  class FrameTest < Test::Unit::TestCase
6
6
 
7
7
  def test_frame1
8
- frame = Frame[ :center, V2D[0.0,0.0], :vector, V2D[1.0,0.0], :rotation, 0.0, :scale, 1.0 ]
9
- assert_equal( 0.0, frame.center.x )
8
+ frame1 = Frame[ :center, V2D[0.0,0.0], :vector, V2D[1.0,0.0], :rotation, 0.0, :scale, 1.0 ]
9
+ frame2 = Frame[ :center, V2D[0.0,0.0], :vector, V2D[1.0,0.0], :rotation, 0.0, :scale, 1.0 ]
10
+ frame3 = Frame[ :center, V2D[0.0,0.0], :vector, V2D[1.0,0.0], :rotation, 1.0, :scale, 1.0 ]
11
+
12
+ assert_equal( 0.0, frame1.center.x )
13
+ assert( frame1 == frame2 )
14
+ assert( !(frame1 == frame3) )
10
15
  end
11
16
 
12
17
  end
@@ -15,11 +15,7 @@ class V2DTest < Test::Unit::TestCase
15
15
  t = V2D[2,3]
16
16
  assert_equal(V2D[2,4], s + t)
17
17
  end
18
-
19
- def test_norm
20
- assert_equal(V2D[0,1], V2D[0,2].norm)
21
- end
22
-
18
+
23
19
  def test_angle
24
20
  assert_equal(0.0, V2D[0,0].angle)
25
21
  assert_equal(0.0, V2D[1,0].angle)
@@ -61,8 +57,8 @@ class V2DTest < Test::Unit::TestCase
61
57
  end
62
58
 
63
59
  def test_viewbox
64
- assert_equal( [1.0, 1.0, 2.0, 2.0],
65
- V2D.viewbox( [V2D[1.0, 2.0], V2D[2.0, 1.0]] ))
60
+ assert_equal( [1.0, 1.0, 2.0, 2.0], V2D.viewbox( [V2D[1.0, 2.0], V2D[2.0, 1.0]] ))
61
+ assert_equal( [0.0, 0.0, 0.0, 0.0], V2D.viewbox( [] ))
66
62
  end
67
63
 
68
64
  def test_size
@@ -91,4 +87,27 @@ class V2DTest < Test::Unit::TestCase
91
87
  a.x = 3.0
92
88
  assert_equal( 3.0, v.x )
93
89
  end
90
+
91
+ def test_succ
92
+ assert_equal( V2D[1.0,1.0], V2D[].succ )
93
+ end
94
+
95
+ def test_scale
96
+ assert_equal( V2D[2.0,6.0], V2D[1.0,2.0].scale( V2D[2.0,3.0]) )
97
+ end
98
+
99
+ def test_sym
100
+ assert_equal( V2D[2.0,4.0], V2D[1.0,2.0].sym( V2D[0.0,0.0] ) )
101
+ end
102
+
103
+ def test_coords
104
+ assert_equal( [0.0,1.0], V2D[0.0,1.0].coords )
105
+ assert_equal( [1.0,Math::PI/2.0], V2D[0.0,1.0].coords(:polar) )
106
+ assert_raise(RuntimeError) {V2D[0.0,1.0].coords(:toto)}
107
+ end
108
+
109
+ def test_polar
110
+ assert( V2D.vequal?( V2D[0.0,1.0], V2D.polar( 1.0, Math::PI/2.0 ) ) )
111
+ end
112
+
94
113
  end
@@ -0,0 +1,29 @@
1
+ require 'test/unit'
2
+ require 'interbezier.rb'
3
+
4
+ # Test class
5
+ class InterBezierTest < Test::Unit::TestCase
6
+
7
+ def test_base
8
+ bezier1 = Bezier.raw( V2D::O, V2D::X, V2D::O, V2D::X )
9
+ center = V2D::O + V2D::Y
10
+ bezier2 = Bezier.raw( center, center, center, center )
11
+ interbezier = InterBezier.new( :bezierlist, [0.0, bezier1, 1.0, bezier2] )
12
+ v = V2D::Y * 0.5
13
+ assert_equal( [V2D::O + v, V2D::X * 0.5 + v, V2D::O + v, V2D::X * 0.5 + v], interbezier.sample( 0.5 ).pointlist )
14
+ end
15
+ end
16
+
17
+
18
+ # Test class
19
+ class GradientBezierTest < Test::Unit::TestCase
20
+
21
+ def test_base
22
+ bezier1 = Bezier.raw( V2D::O, V2D::X, V2D::O, V2D::X )
23
+ center = V2D::O + V2D::Y
24
+ bezier2 = Bezier.raw( center, center, center, center )
25
+ interbezier = GradientBezier.new( :bezierlist, [0.0, bezier1, 1.0, bezier2] )
26
+ v = V2D::Y * 0.5
27
+ assert_equal( [V2D::O + v, V2D::X * 0.5 + v, V2D::O + v, V2D::X * 0.5 + v], interbezier.samples( 10 )[5].bezier(0).pointlist )
28
+ end
29
+ end