xrvg 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -5,8 +5,23 @@ class InterpolatorTest < Test::Unit::TestCase
5
5
 
6
6
  def test_quadtree
7
7
  quad = QuadTree.new( [0.0,1.0, 0.2,0.0, 0.6,1.0, 0.8,0.0, 1.0,1.0] )
8
- assert_equal( [0.2,0.0,0.6,1.0], quad.range( 0.5 ) )
8
+ assert_equal( [0.2,0.0, 0.6,1.0], quad.range( 0.5 ) )
9
9
  assert_equal( [0.0,1.0, 0.2,0.0], quad.range( 0.0 ) )
10
10
  assert_equal( [0.8,0.0, 1.0,1.0], quad.range( 1.0 ) )
11
+ assert_equal( [0.8,0.0, 1.0,1.0], quad.range( 1.1 ) )
11
12
  end
13
+
14
+ def test_interpolator
15
+ interpolator = Interpolator[ :samplelist, [0.0,0.0, 1.0,2.0]]
16
+ assert_equal( 1.0, interpolator.interpolate( 0.5 ) )
17
+ assert_equal( 2.0, interpolator.interpolate( 2.5 ) )
18
+ end
19
+
20
+ class A
21
+ include Interpolation
22
+ end
23
+ def test_interpolation
24
+ assert_raise(NotImplementedError) {A[].samplelist}
25
+ end
26
+
12
27
  end
@@ -0,0 +1,15 @@
1
+ require 'test/unit'
2
+ require 'bezier'
3
+
4
+ class ParametricLengthTest < Test::Unit::TestCase
5
+
6
+ class A
7
+ include ParametricLength
8
+ end
9
+
10
+ def test_holes
11
+ assert_raise(NotImplementedError) {A[].parameter_range}
12
+ assert_raise(NotImplementedError) {A[].pointfromparameter( 0.0, V2D[] )}
13
+ end
14
+
15
+ end
data/test/test_render.rb CHANGED
@@ -3,16 +3,64 @@ require 'render'
3
3
 
4
4
  class SVGRenderTest < Test::Unit::TestCase
5
5
 
6
-
7
-
8
- def test_raster
9
- if nil
6
+ def test_render
10
7
  require 'shape'
11
- render = SVGRender.new( :filename, "output/svgrender.svg" )
8
+ if File.exist?( "svgrender.svg" )
9
+ File.delete( "svgrender.svg" )
10
+ end
11
+ render = SVGRender.new( :filename, "svgrender.svg" )
12
12
  render.add( Circle[] )
13
13
  render.end
14
- assert( File.exist?( "svgrender.jpg" ) )
14
+ assert( File.exist?( "svgrender.svg" ) )
15
+ end
16
+
17
+ def test_render2
18
+ require 'shape'
19
+ if File.exist?( "svgrender.svg" )
20
+ File.delete( "svgrender.svg" )
21
+ end
22
+ SVGRender.[](:filename, "svgrender.svg") do |render|
23
+ render.add( Circle[] )
24
+ render.add( Circle[:center, V2D[1.0,1.0]] )
25
+ render.add( Circle[:center, V2D[-1.0,-1.0]] )
26
+
27
+ end
28
+ assert( File.exist?( "svgrender.svg" ) )
29
+ end
30
+
31
+ def test_render3
32
+ require 'shape'
33
+ if File.exist?( "svgrender.svg" )
34
+ File.delete( "svgrender.svg" )
35
+ end
36
+ SVGRender.[](:filename, "svgrender.svg") do |render|
37
+ render.add( Circle[:radius, 0.0] )
38
+ end
39
+ assert( File.exist?( "svgrender.svg" ) )
40
+ end
41
+
42
+ def test_render4
43
+ require 'shape'
44
+ if File.exist?( "svgrender.svg" )
45
+ File.delete( "svgrender.svg" )
46
+ end
47
+ circle = Circle.new
48
+ gradient = CircularGradient.new( :colorlist, [0.0, Color.black(1.0), 1.0, Color.black(0.0)], :circle, circle )
49
+ render = SVGRender.new( :filename, "svgrender.svg" )
50
+ render.add( Circle[], Style[ :fill, gradient, :stroke, gradient, :strokewidth, 0.01 ] )
51
+ render.end
52
+ assert( File.exist?( "svgrender.svg" ) )
53
+ end
54
+
55
+ def test_layer
56
+ if File.exist?( "svgrender.svg" )
57
+ File.delete( "svgrender.svg" )
15
58
  end
59
+ render = SVGRender.new( :filename, "svgrender.svg" )
60
+ render.layers = [:stars, :disk, :dustback, :halo, :dustforeground]
61
+ render.add( Circle[], nil, :stars )
62
+ render.end
63
+ assert( File.exist?( "svgrender.svg" ) )
16
64
  end
17
65
 
18
66
  end
data/test/test_shape.rb CHANGED
@@ -4,29 +4,95 @@ require 'test/unit'
4
4
  class ShapeTest < Test::Unit::TestCase
5
5
 
6
6
  def test_abstract
7
- # Shape.new.svg
7
+ assert_raise(NotImplementedError){Shape[].contour}
8
+ assert_raise(NotImplementedError){Shape[].svg}
9
+ assert_raise(NotImplementedError){Shape[].viewbox}
10
+ end
11
+
12
+ def test_default_style
13
+ assert_equal( Color.black, Shape[].default_style.fill )
8
14
  end
9
15
 
10
16
  end
11
17
 
18
+ class CurveTest < Test::Unit::TestCase
19
+
20
+ def test_abstract
21
+ assert_raise(NotImplementedError){Curve[].contour}
22
+ assert_raise(NotImplementedError){Curve[].svg}
23
+ assert_raise(NotImplementedError){Curve[].point(0.0)}
24
+ assert_raise(NotImplementedError){Curve[].tangent(0.0)}
25
+ assert_raise(NotImplementedError){Curve[].acc(0.0)}
26
+ assert_raise(NotImplementedError){Curve[].length(0.0)}
27
+ assert_raise(NotImplementedError){Curve[].rotation(0.0)}
28
+ assert_raise(NotImplementedError){Curve[].scale(0.0)}
29
+ end
30
+
31
+ def test_default_style
32
+ assert_equal( Color.black, Shape[].default_style.fill )
33
+ end
34
+
35
+ end
12
36
 
13
- class LineTest < Test::Unit::TestCase
14
37
 
38
+ class LineTest < Test::Unit::TestCase
39
+ @@line = Line[ :points, [ V2D[ 0.0, 0.0], V2D[ 0.0, 1.0] ] ]
40
+
15
41
  def test_point
16
- line = Line[ :points, [ V2D[ 0.0, 0.0], V2D[ 0.0, 1.0] ] ]
17
- # puts Line.instance_methods(false)
18
- assert_equal( V2D[0.0, 0.3], line.point( 0.3 ) )
42
+ assert_equal( V2D[0.0, 0.3], @@line.point( 0.3 ) )
43
+ end
44
+
45
+ def test_points
46
+ assert_equal( [V2D[0.0, 0.3], V2D[0.0, 0.7]] , @@line.points( [0.3,0.7] ) )
19
47
  end
20
48
 
21
49
  def test_tangent
22
- line = Line[ :points, [ V2D[ 0.0, 0.0], V2D[ 0.0, 2.0] ] ]
23
- assert_equal( V2D[0.0, 1.0], line.tangent( 0.3 ) )
50
+ assert_equal( V2D[0.0, 1.0], @@line.tangent( 0.3 ) )
51
+ end
52
+
53
+ def test_tangents
54
+ assert_equal( [V2D[0.0, 1.0],V2D[0.0, 1.0]], @@line.tangents( [0.3,0.7] ) )
55
+ end
56
+
57
+ def test_acc
58
+ assert_equal( V2D[0.0, 0.0], @@line.acc( 0.3 ) )
59
+ end
60
+
61
+ def test_normal
62
+ assert_equal( V2D[-1.0, 0.0], @@line.normal( 0.3 ) )
63
+ end
64
+
65
+ def test_normals
66
+ assert_equal( [V2D[-1.0, 0.0],V2D[-1.0, 0.0]], @@line.normals( [0.3,0.7] ) )
67
+ end
68
+
69
+ def test_acc_normal
70
+ assert_equal( 0.0, @@line.acc_normal( 0.3 ) )
71
+ end
72
+
73
+ def test_curvature
74
+ assert_equal( 0.0, @@line.curvature( 0.3 ) )
75
+ end
76
+
77
+ def test_surface
78
+ assert_equal( 0.0, @@line.surface )
79
+ assert_equal( 1.0, Line[ :points, [ V2D[ 0.0, 0.0], V2D[ 1.0, 1.0] ] ].surface )
24
80
  end
25
81
 
26
82
  def test_frame
27
- line = Line[ :points, [ V2D[ 0.0, 0.0], V2D[ 0.0, 1.0] ] ]
28
- result = Frame[ :center, V2D[0.0,0.5], :vector, V2D[0.0,0.0], :rotation, 0.0, :scale, 1.0 ]
29
- assert_equal( result, line.frame( 0.5 ) )
83
+ result = Frame[ :center, V2D[0.0,0.5], :vector, V2D[0.0,1.0], :rotation, 0.0, :scale, 1.0 ]
84
+ assert_equal( result, @@line.frame( 0.5 ) )
85
+ end
86
+
87
+ def test_frames
88
+ result = [Frame[ :center, V2D[0.0,0.5], :vector, V2D[0.0,1.0], :rotation, 0.0, :scale, 1.0 ],
89
+ Frame[ :center, V2D[0.0,0.7], :vector, V2D[0.0,1.0], :rotation, 0.0, :scale, 1.0 ]]
90
+ assert_equal( result, @@line.frames( [0.5, 0.7] ) )
91
+ end
92
+
93
+ def test_framev
94
+ result = [ V2D[0.0,0.5], V2D[0.0,1.0] ]
95
+ assert_equal( result, @@line.framev( 0.5 ) )
30
96
  end
31
97
 
32
98
 
@@ -40,6 +106,24 @@ class LineTest < Test::Unit::TestCase
40
106
  assert( V2D.vequal?( v1, v2 ) )
41
107
  end
42
108
  end
109
+
110
+ def test_length
111
+ line = Line[ :points, [ V2D[ 0.0, 0.0], V2D[ 0.0, 1.0], V2D[ 1.0, 1.0] ] ]
112
+ assert_equal( 2.0, line.length )
113
+ end
114
+
115
+ def test_translate
116
+ line = Line[ :points, [ V2D[ 0.0, 0.0], V2D[ 0.0, 1.0], V2D[ 1.0, 1.0] ] ].translate( V2D[1.0,2.0] )
117
+ assert_equal( V2D[ 1.0, 2.0], line.point( 0.0 ) )
118
+ assert_equal( V2D[ 2.0, 3.0], line.point( 2.0 ) )
119
+ end
120
+
121
+ def test_reverse
122
+ line = Line[ :points, [ V2D[ 0.0, 0.0], V2D[ 0.0, 1.0], V2D[ 1.0, 1.0] ] ].reverse
123
+ assert_equal( V2D[ 1.0, 1.0], line.point( 0.0 ) )
124
+ assert_equal( V2D[ 0.0, 0.0], line.point( 2.0 ) )
125
+ end
126
+
43
127
  end
44
128
 
45
129
  class CircleTest < Test::Unit::TestCase
@@ -65,6 +149,11 @@ class CircleTest < Test::Unit::TestCase
65
149
  end
66
150
  end
67
151
 
152
+ def test_curvature
153
+ assert( 1.0.fequal?( Circle[].curvature( 0.0 ) ) )
154
+ assert( Circle[].curvature( Range.O.rand ).fequal?( Circle[].curvature( Range.O.rand ) ) )
155
+ end
156
+
68
157
  def test_diameter
69
158
  cd = Circle.diameter( V2D[0.0,1.0], V2D[0.0,-1.0] )
70
159
  c2 = Circle[ :center, V2D::O, :radius, 1.0 ]
@@ -72,4 +161,8 @@ class CircleTest < Test::Unit::TestCase
72
161
  assert_equal( cd.radius, c2.radius )
73
162
  assert( V2D.vequal?( V2D[0.0,1.0], cd.point( 0.0 ) ) )
74
163
  end
164
+
165
+ def test_rotate
166
+ assert( V2D.vequal?( V2D[0.0,1.0], Circle[].rotate(Math::PI/2.0).point( 0.0 ) ) )
167
+ end
75
168
  end
@@ -0,0 +1,13 @@
1
+ require 'test/unit'
2
+ require 'utils'
3
+
4
+ class TraceTest < Test::Unit::TestCase
5
+
6
+ def test_trace
7
+ Trace("hello")
8
+ Trace.inhibit
9
+ Trace("ghost")
10
+ Trace.activate
11
+ Trace("goodbye")
12
+ end
13
+ end
data/test/test_utils.rb CHANGED
@@ -17,17 +17,8 @@ class IntegerTest < Test::Unit::TestCase
17
17
 
18
18
  def test_randsplit1!
19
19
  result = 3.randsplit!
20
- puts "result #{result.join(" ")}"
21
20
  assert_equal( 1.0, result[0] + result[1] + result[2] )
22
- end
23
-
24
- if nil
25
- def test_randsplit2!
26
- result = 3.randsplit!(0.3)
27
- puts "result minsize 0.3 #{result.join(" ")}"
28
- assert_equal( 1.0, result[0] + result[1] + result[2] )
29
- result.each {|v| assert( v > 0.3 ) }
30
- end
21
+ assert_equal( [], 3.randsplit!( 4.0 ) )
31
22
  end
32
23
 
33
24
  def test_randsplitsum!
@@ -67,7 +58,6 @@ class ArrayTest < Test::Unit::TestCase
67
58
  [(0.0..1.0), (1.0..0.0)].samples(3) {|v1,v2| result += [v1,v2] }
68
59
  assert_equal( [0.0, 1.0, 0.5, 0.5, 1.0, 0.0], result )
69
60
  end
70
-
71
61
 
72
62
  def test_pairs
73
63
  a = [ 1, 2, 3]
@@ -83,9 +73,13 @@ class ArrayTest < Test::Unit::TestCase
83
73
 
84
74
 
85
75
  def test_foreach
86
- b = Array.new
76
+ b = []
87
77
  [1, 2, 3, 4].foreach {|i, j| b.push( [j,i] )}
88
78
  assert_equal( [[2, 1], [4, 3]], b)
79
+
80
+ b = []
81
+ [1, 2, 3, 4].foreach {|i| b << i}
82
+ assert_equal( [1, 2, 3, 4], b)
89
83
  end
90
84
 
91
85
  def test_slice
@@ -104,6 +98,10 @@ class ArrayTest < Test::Unit::TestCase
104
98
  assert_equal( [[1, 2], [2, 3]], result )
105
99
  end
106
100
 
101
+ def test_triplets
102
+ assert_equal( [[1, 2, 3], [2, 3, 4]], [1, 2, 3, 4].triplets )
103
+ end
104
+
107
105
  def test_assignment
108
106
  a, b, c = [1, 2, 3]
109
107
  assert_equal( a, 1 )
@@ -132,13 +130,30 @@ class ArrayTest < Test::Unit::TestCase
132
130
  def test_forpattern
133
131
  assert_equal( [1,2,"a",3,4,"b"], [ [1,2,3,4], ["a","b"] ].forpattern( [0,0,1] ) )
134
132
  assert_equal( [1,"a",2,3,"b",4], [ [1,2,3,4], ["a","b"] ].forpattern( [0,1,0] ) )
133
+ result = []
134
+ [ [1,2,3,4], ["a","b"] ].forpattern( [0,1,0] ) do |v1, v2, v3|
135
+ result += [v1,v2,v3]
136
+ end
137
+ assert_equal( [1,"a",2,3,"b",4], result )
135
138
  end
136
139
 
137
140
  def test_sub
138
141
  assert_equal( [1,3,5], [1,2,3,4,5].sub(2) )
139
142
  assert_equal( [1,3,5], [1,2,3,4,5].half )
143
+ result = []
144
+ [1,2,3,4,5].sub(2) {|v| result << v}
145
+ assert_equal( [1,3,5], result )
146
+ end
147
+
148
+ def test_mean
149
+ assert_equal( 3, [1,3,5].mean )
150
+ end
151
+
152
+ def test_range
153
+ assert_equal( (1.0..5.0), [5.0,3.0,1.0].range )
140
154
  end
141
155
 
156
+
142
157
  end
143
158
 
144
159
  class FloatTest < Test::Unit::TestCase
@@ -158,22 +173,51 @@ class FloatTest < Test::Unit::TestCase
158
173
  assert_equal( 0.25, r[0] + r[1] )
159
174
  end
160
175
 
176
+ def test_float_include
177
+ assert( Float.floatlist_include?( [1.0,2.0,3.0001,4.0], 3.0, 0.001 ) )
178
+ assert_equal( false, Float.floatlist_include?( [1.0,2.0,3.0001,4.0], 3.0, 0.0001 ) )
179
+ end
180
+
161
181
  end
162
182
 
163
183
  class RangeTest < Test::Unit::TestCase
164
184
 
165
185
  def test_samples
166
186
  assert_equal( [0.0, 0.5, 1.0], (0.0..1.0).samples(3))
187
+ assert_equal( [1.0], (1.0..2.0).samples(1))
167
188
  end
168
189
 
169
190
  def test_samples2
170
191
  # assert_equal( [0.0, 0.667128916301921, 0.889196841637666], (0.0..1.0).geo(2.2).samples(3))
171
192
  end
172
193
 
194
+ def test_samples3
195
+ assert_not_equal( [0.0, 1.0], (0.0..1.0).ssort.random.samples(2))
196
+ end
197
+
198
+
199
+ def test_samplesblock
200
+ result = []
201
+ (0.0..1.0).samples(3) do |v|
202
+ result << v
203
+ end
204
+ assert_equal( [0.0, 0.5, 1.0], result)
205
+ end
206
+
207
+
173
208
  def test_split
174
209
  assert_equal( [(0.0..0.5), (0.5..1.0)], (0.0..1.0).splits(2) )
175
210
  end
176
211
 
212
+ def test_splitblock
213
+ result = []
214
+ (0.0..1.0).splits(2) do |subrange|
215
+ result << subrange
216
+ end
217
+ assert_equal( [(0.0..0.5), (0.5..1.0)], result )
218
+ end
219
+
220
+
177
221
  def test_split2
178
222
  # assert_equal( [(0.0..0.75), (0.75..1.0)], (0.0..1.0).geo(3.0).splits(2) )
179
223
  end
@@ -199,6 +243,7 @@ class RangeTest < Test::Unit::TestCase
199
243
  assert_equal( 2, (1.0..2.0).rand( 2 ).length )
200
244
  assert_equal( 1.8, (1.0..2.0).complement(1.2) )
201
245
  assert_equal( 0.5, (1.0..2.0).abscissa(1.5) )
246
+ assert_equal( 1.0, (1.0..1.0).abscissa(1.5) )
202
247
 
203
248
  # Splittable module
204
249
  assert_equal( (1.2..1.3), (1.0..2.0).split(0.2,0.3) )
@@ -215,6 +260,15 @@ class RangeTest < Test::Unit::TestCase
215
260
  assert_equal( (1.3..2.3), (1.0..2.0).translate(0.3) )
216
261
  end
217
262
 
263
+ def test_range_sym
264
+ assert_equal( (-0.3..0.3), Range.sym( 0.3 ) )
265
+ assert_equal( (-0.5..0.5), Range.sym( -0.5 ) )
266
+ end
267
+
268
+ def test_resize
269
+ assert_equal( (-0.5..1.5), Range.O.resize( 2.0 ) )
270
+ end
271
+
218
272
  end
219
273
 
220
274
  class SampleClass
@@ -235,6 +289,21 @@ class SampleTest < Test::Unit::TestCase
235
289
  assert_equal( [0.0, 1.0, 2.0], (0.0..2.0).samples(3))
236
290
  end
237
291
 
292
+ def test_samples2
293
+ assert_equal( [0.0, 1.0, 2.0], (0.0..2.0).samples([0.0,0.5,1.0]))
294
+ end
295
+
296
+ def test_hash
297
+ assert_raise(RuntimeError) {Range.O.apply( [0.0], :toto )}
298
+ end
299
+
300
+ def test_limit
301
+ assert_equal( [], Range.O.samples(0) )
302
+ result = []
303
+ Range.O.samples(0) {|v| result << v}
304
+ assert_equal( [], result )
305
+ end
306
+
238
307
  def test_array_samples
239
308
  # TODO
240
309
  # assert_equal( [0.0, 0.0, 0.864664716763387, 1.72932943352677], [(0.0..1.0),(0.0..2.0)].geo(2.0).samples(3))
@@ -247,6 +316,39 @@ class SampleTest < Test::Unit::TestCase
247
316
 
248
317
  def test_roller
249
318
  assert_equal( ["a", "b", "a"], Roller["a","b"].samples(3))
319
+
320
+ rand = Roller["a","b"].rand
321
+ assert( ["a","b"].include?( rand ) )
322
+ end
323
+
324
+ def test_random_split
325
+ splits = Range.O.random.splits( 2 )
326
+ assert_equal( 0.0, splits[0].begin )
327
+ assert_equal( 1.0, splits[1].end )
328
+ end
329
+
330
+ def test_geo
331
+ assert_equal( 1.0, (0.0..1.0).geo(100.0).sample( 1.0 ) )
332
+ end
333
+
334
+ def test_alternate
335
+ assert_equal( [1.0,1.5], (1.0..0.0).alternate.samples( [0.0,0.5] ) )
336
+ assert_equal( [0.0,-0.5], AlternateFilter[(0.0..1.0)].samples( [0.0,0.5] ) )
337
+ end
338
+
339
+ def test_split_errors
340
+ assert_raise(RuntimeError){Range.O.random.splits( 0 )}
341
+ assert_raise(RuntimeError){Range.O.random.splits( [0.0] )}
342
+ assert_equal( [(0.0..1.0)], (0.0..1.0).splits(1) )
343
+ end
344
+
345
+ def test_multisamples
346
+ assert_equal( [0.0, 0.1875, 0.3125, 0.5, 0.625, 0.8125, 0.9375], (0.0..1.0).multisamples( [4, 2], [3.0, 1.0] ) )
347
+ end
348
+
349
+ def test_randomgauss
350
+ (0.0..1.0).randgauss
250
351
  end
251
352
 
252
353
  end
354
+