rubysketch 0.3.1 → 0.3.6

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.
@@ -28,17 +28,9 @@ Gem::Specification.new do |s|
28
28
  s.platform = Gem::Platform::RUBY
29
29
  s.required_ruby_version = '~> 2'
30
30
 
31
- s.add_runtime_dependency 'yard'
32
- s.add_runtime_dependency 'xot', '~> 0.1'
33
- s.add_runtime_dependency 'beeps', '~> 0.1'
34
- s.add_runtime_dependency 'rucy', '~> 0.1'
35
- s.add_runtime_dependency 'rays', '~> 0.1'
36
31
  s.add_runtime_dependency 'reflexion', '~> 0.1'
37
32
 
38
33
  s.files = `git ls-files`.split $/
39
34
  s.test_files = s.files.grep %r{^(test|spec|features)/}
40
35
  s.extra_rdoc_files = rdocs.to_a
41
- s.has_rdoc = true
42
-
43
- s.extensions << 'Rakefile'
44
36
  end
@@ -0,0 +1,24 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+
4
+ %w[../xot ../rucy ../rays ../reflex .]
5
+ .map {|s| File.expand_path "../../#{s}/lib", __FILE__}
6
+ .each {|s| $:.unshift s if !$:.include?(s) && File.directory?(s)}
7
+
8
+ require 'test/unit'
9
+ require 'xot/test'
10
+ require 'rubysketch'
11
+
12
+ include Xot::Test
13
+
14
+
15
+ unless $RAYS_NOAUTOINIT
16
+ #def Rays.fin! () end
17
+ end
18
+
19
+
20
+ def assert_equal_vector (v1, v2, delta = 0.000001)
21
+ assert_in_delta v1.x, v2.x, delta
22
+ assert_in_delta v1.y, v2.y, delta
23
+ assert_in_delta v1.z, v2.z, delta
24
+ end
@@ -0,0 +1,34 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+
4
+ require_relative '../helper'
5
+
6
+
7
+ class TestProcessingUtility < Test::Unit::TestCase
8
+
9
+ C = RubySketch::Processing::Context
10
+
11
+ def setup ()
12
+
13
+ end
14
+
15
+ def test_random ()
16
+ assert_equal Float, C.random(1).class
17
+ assert_equal Float, C.random(1.0).class
18
+ assert_equal Symbol, C.random((:a..:z).to_a).class
19
+
20
+ assert_not_equal C.random, C.random
21
+
22
+ 10000.times do
23
+ n = C.random
24
+ assert 0 <= n && n < 1
25
+
26
+ n = C.random 1
27
+ assert 0 <= n && n < 1
28
+
29
+ n = C.random 1, 2
30
+ assert 1.0 <= n && n < 2.0
31
+ end
32
+ end
33
+
34
+ end# TestProcessingUtility
@@ -0,0 +1,397 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+
4
+ require_relative '../helper'
5
+
6
+
7
+ class TestProcessingVector < Test::Unit::TestCase
8
+
9
+ P = RubySketch::Processing
10
+
11
+ V = P::Vector
12
+
13
+ M = Math
14
+
15
+ PI = M::PI
16
+
17
+ def vec (*args)
18
+ V.new *args
19
+ end
20
+
21
+ def point (*args)
22
+ Rays::Point.new *args
23
+ end
24
+
25
+ def test_initialize ()
26
+ assert_equal_vector vec(0, 0, 0), vec()
27
+ assert_equal_vector vec(1, 0, 0), vec(1)
28
+ assert_equal_vector vec(1, 2, 0), vec(1, 2)
29
+ assert_equal_vector vec(1, 2, 3), vec(1, 2, 3)
30
+
31
+ assert_equal_vector vec(0, 0, 0), vec([])
32
+ assert_equal_vector vec(1, 0, 0), vec([1])
33
+ assert_equal_vector vec(1, 2, 0), vec([1, 2])
34
+ assert_equal_vector vec(1, 2, 3), vec([1, 2, 3])
35
+
36
+ assert_equal_vector vec(1, 2, 3), vec(vec 1, 2, 3)
37
+ assert_equal_vector vec(1, 2, 3), vec(point 1, 2, 3)
38
+ end
39
+
40
+ def test_set ()
41
+ v0 = vec 9, 9, 9
42
+
43
+ v = v0.dup; v.set; assert_equal_vector vec(0, 0, 0), v
44
+ v = v0.dup; v.set 1; assert_equal_vector vec(1, 0, 0), v
45
+ v = v0.dup; v.set 1, 2; assert_equal_vector vec(1, 2, 0), v
46
+ v = v0.dup; v.set 1, 2, 3; assert_equal_vector vec(1, 2, 3), v
47
+
48
+ v = v0.dup; v.set []; assert_equal_vector vec(0, 0, 0), v
49
+ v = v0.dup; v.set [1]; assert_equal_vector vec(1, 0, 0), v
50
+ v = v0.dup; v.set [1, 2]; assert_equal_vector vec(1, 2, 0), v
51
+ v = v0.dup; v.set [1, 2, 3]; assert_equal_vector vec(1, 2, 3), v
52
+
53
+ v = v0.dup; v.set vec(1, 2, 3); assert_equal_vector vec(1, 2, 3), v
54
+ v = v0.dup; v.set point(1, 2, 3); assert_equal_vector vec(1, 2, 3), v
55
+ end
56
+
57
+ def test_dup ()
58
+ v1 = vec 1, 2, 3
59
+ assert_equal_vector vec(1, 2, 3), v1
60
+
61
+ v2 = v1.dup
62
+ assert_equal_vector vec(1, 2, 3), v1
63
+ assert_equal_vector vec(1, 2, 3), v2
64
+
65
+ v1.set 7, 8, 9
66
+ assert_equal_vector vec(7, 8, 9), v1
67
+ assert_equal_vector vec(1, 2, 3), v2
68
+ end
69
+
70
+ def test_copy ()
71
+ v1 = vec 1, 2, 3
72
+ assert_equal_vector vec(1, 2, 3), v1
73
+
74
+ v2 = v1.copy
75
+ assert_equal_vector vec(1, 2, 3), v1
76
+ assert_equal_vector vec(1, 2, 3), v2
77
+
78
+ v1.set 7, 8, 9
79
+ assert_equal_vector vec(7, 8, 9), v1
80
+ assert_equal_vector vec(1, 2, 3), v2
81
+ end
82
+
83
+ def test_xyz ()
84
+ v = vec 1, 2, 3
85
+ assert_equal_vector vec(1, 2, 3), v
86
+ assert_equal [1, 2, 3], [v.x, v.y, v.z]
87
+
88
+ v.x = 7
89
+ assert_equal_vector vec(7, 2, 3), v
90
+
91
+ v.y = 8
92
+ assert_equal_vector vec(7, 8, 3), v
93
+
94
+ v.z = 9
95
+ assert_equal_vector vec(7, 8, 9), v
96
+ end
97
+
98
+ def test_array ()
99
+ assert_equal [1, 2, 3], vec(1, 2, 3).array
100
+ end
101
+
102
+ def test_add ()
103
+ v = vec 1, 2, 3
104
+ v.add 4, 5, 6
105
+ assert_equal_vector vec(5, 7, 9), v
106
+
107
+ assert_equal_vector vec(1, 2, 3), vec(1, 2, 3).add()
108
+ assert_equal_vector vec(5, 2, 3), vec(1, 2, 3).add(4)
109
+ assert_equal_vector vec(5, 7, 3), vec(1, 2, 3).add(4, 5)
110
+ assert_equal_vector vec(5, 7, 9), vec(1, 2, 3).add(4, 5, 6)
111
+
112
+ assert_equal_vector vec(1, 2, 3), vec(1, 2, 3).add([])
113
+ assert_equal_vector vec(5, 2, 3), vec(1, 2, 3).add([4])
114
+ assert_equal_vector vec(5, 7, 3), vec(1, 2, 3).add([4, 5])
115
+ assert_equal_vector vec(5, 7, 9), vec(1, 2, 3).add([4, 5, 6])
116
+
117
+ assert_equal_vector vec(5, 7, 9), vec(1, 2, 3).add( vec(4, 5, 6))
118
+ assert_equal_vector vec(5, 7, 9), vec(1, 2, 3).add(point(4, 5, 6))
119
+ end
120
+
121
+ def test_sub ()
122
+ v = vec 9, 8, 7
123
+ v.sub 1, 2, 3
124
+ assert_equal_vector vec(8, 6, 4), v
125
+
126
+ assert_equal_vector vec(9, 8, 7), vec(9, 8, 7).sub()
127
+ assert_equal_vector vec(8, 8, 7), vec(9, 8, 7).sub(1)
128
+ assert_equal_vector vec(8, 6, 7), vec(9, 8, 7).sub(1, 2)
129
+ assert_equal_vector vec(8, 6, 4), vec(9, 8, 7).sub(1, 2, 3)
130
+
131
+ assert_equal_vector vec(9, 8, 7), vec(9, 8, 7).sub([])
132
+ assert_equal_vector vec(8, 8, 7), vec(9, 8, 7).sub([1])
133
+ assert_equal_vector vec(8, 6, 7), vec(9, 8, 7).sub([1, 2])
134
+ assert_equal_vector vec(8, 6, 4), vec(9, 8, 7).sub([1, 2, 3])
135
+
136
+ assert_equal_vector vec(8, 6, 4), vec(9, 8, 7).sub( vec(1, 2, 3))
137
+ assert_equal_vector vec(8, 6, 4), vec(9, 8, 7).sub(point(1, 2, 3))
138
+ end
139
+
140
+ def test_mult ()
141
+ v = vec 1, 2, 3
142
+ v.mult 2
143
+ assert_equal_vector vec(2, 4, 6), v
144
+ end
145
+
146
+ def test_div ()
147
+ v = vec 2, 4, 6
148
+ v.div 2
149
+ assert_equal_vector vec(1, 2, 3), v
150
+ end
151
+
152
+ def test_op_add ()
153
+ v1 = vec 1, 2, 3
154
+ v2 = vec 4, 5, 6
155
+ assert_equal_vector vec(5, 7, 9), v1 + v2
156
+ assert_equal_vector vec(1, 2, 3), v1
157
+ assert_equal_vector vec(4, 5, 6), v2
158
+
159
+ assert_equal_vector vec(5, 2, 3), vec(1, 2, 3) + 4
160
+
161
+ assert_equal_vector vec(1, 2, 3), vec(1, 2, 3) + []
162
+ assert_equal_vector vec(5, 2, 3), vec(1, 2, 3) + [4]
163
+ assert_equal_vector vec(5, 7, 3), vec(1, 2, 3) + [4, 5]
164
+ assert_equal_vector vec(5, 7, 9), vec(1, 2, 3) + [4, 5, 6]
165
+
166
+ assert_equal_vector vec(5, 7, 9), vec(1, 2, 3) + vec(4, 5, 6)
167
+ assert_equal_vector vec(5, 7, 9), vec(1, 2, 3) + point(4, 5, 6)
168
+ end
169
+
170
+ def test_op_sub ()
171
+ v1 = vec 9, 8, 7
172
+ v2 = vec 1, 2, 3
173
+ assert_equal_vector vec(8, 6, 4), v1 - v2
174
+ assert_equal_vector vec(9, 8, 7), v1
175
+ assert_equal_vector vec(1, 2, 3), v2
176
+
177
+ assert_equal_vector vec(8, 8, 7), vec(9, 8, 7) - 1
178
+
179
+ assert_equal_vector vec(9, 8, 7), vec(9, 8, 7) - []
180
+ assert_equal_vector vec(8, 8, 7), vec(9, 8, 7) - [1]
181
+ assert_equal_vector vec(8, 6, 7), vec(9, 8, 7) - [1, 2]
182
+ assert_equal_vector vec(8, 6, 4), vec(9, 8, 7) - [1, 2, 3]
183
+
184
+ assert_equal_vector vec(8, 6, 4), vec(9, 8, 7) - vec(1, 2, 3)
185
+ assert_equal_vector vec(8, 6, 4), vec(9, 8, 7) - point(1, 2, 3)
186
+ end
187
+
188
+ def test_op_mult ()
189
+ v = vec 1, 2, 3
190
+ assert_equal_vector vec(2, 4, 6), v * 2
191
+ assert_equal_vector vec(1, 2, 3), v
192
+ end
193
+
194
+ def test_op_div ()
195
+ v = vec 2, 4, 6
196
+ assert_equal_vector vec(1, 2, 3), v / 2
197
+ assert_equal_vector vec(2, 4, 6), v
198
+ end
199
+
200
+ def test_fun_add ()
201
+ v1 = vec 1, 2, 3
202
+ v2 = vec 4, 5, 6
203
+ result = vec
204
+ assert_equal_vector vec(5, 7, 9), V.add(v1, v2, result)
205
+ assert_equal_vector vec(1, 2, 3), v1
206
+ assert_equal_vector vec(4, 5, 6), v2
207
+ assert_equal_vector vec(5, 7, 9), result
208
+ end
209
+
210
+ def test_fun_sub ()
211
+ v1 = vec 9, 8, 7
212
+ v2 = vec 1, 2, 3
213
+ result = vec
214
+ assert_equal_vector vec(8, 6, 4), V.sub(v1, v2, result)
215
+ assert_equal_vector vec(9, 8, 7), v1
216
+ assert_equal_vector vec(1, 2, 3), v2
217
+ assert_equal_vector vec(8, 6, 4), result
218
+ end
219
+
220
+ def test_fun_mult ()
221
+ v1 = vec 1, 2, 3
222
+ result = vec
223
+ assert_equal_vector vec(2, 4, 6), V.mult(v1, 2, result)
224
+ assert_equal_vector vec(1, 2, 3), v1
225
+ assert_equal_vector vec(2, 4, 6), result
226
+ end
227
+
228
+ def test_fun_div ()
229
+ v1 = vec 2, 4, 6
230
+ result = vec
231
+ assert_equal_vector vec(1, 2, 3), V.div(v1, 2, result)
232
+ assert_equal_vector vec(2, 4, 6), v1
233
+ assert_equal_vector vec(1, 2, 3), result
234
+ end
235
+
236
+ def test_mag ()
237
+ assert_in_delta M.sqrt(5), vec(1, 2) .mag, 0.000001
238
+ assert_in_delta M.sqrt(14), vec(1, 2, 3).mag, 0.000001
239
+ end
240
+
241
+ def test_magSq ()
242
+ assert_equal 5, vec(1, 2) .magSq
243
+ assert_equal 14, vec(1, 2, 3).magSq
244
+ end
245
+
246
+ def test_setMag ()
247
+ v = vec 3, 4, 0
248
+ assert_equal_vector vec(6, 8, 0), v.setMag(10)
249
+ assert_equal_vector vec(6, 8, 0), v
250
+
251
+ v = vec 3, 4, 0
252
+ result = vec
253
+ assert_equal_vector vec(6, 8, 0), v.setMag(result, 10)
254
+ assert_equal_vector vec(3, 4, 0), v
255
+ assert_equal_vector vec(6, 8, 0), result
256
+ end
257
+
258
+ def test_normalize ()
259
+ v = vec 1, 2, 3
260
+ normal = v / v.mag
261
+ assert_equal_vector normal, v.normalize
262
+ assert_equal_vector normal, v
263
+
264
+ v = vec 1, 2, 3
265
+ result = vec
266
+ assert_equal_vector normal, v.normalize(result)
267
+ assert_equal_vector vec(1, 2, 3), v
268
+ assert_equal_vector normal, result
269
+ end
270
+
271
+ def test_limit ()
272
+ v = vec 1, 2, 3
273
+ assert_in_delta 1, v.limit(1).mag, 0.000001
274
+ assert_in_delta 1, v .mag, 0.000001
275
+
276
+ assert_in_delta 1, vec(1, 2, 3).limit(1).mag, 0.000001
277
+ assert_in_delta 2, vec(1, 2, 3).limit(2).mag, 0.000001
278
+ assert_in_delta 3, vec(1, 2, 3).limit(3).mag, 0.000001
279
+ assert_in_delta vec(1, 2, 3).mag, vec(1, 2, 3).limit(4).mag, 0.000001
280
+ end
281
+
282
+ def test_dist ()
283
+ v1 = vec 1, 2, 3
284
+ v2 = vec 4, 5, 6
285
+
286
+ assert_in_delta M.sqrt((4-1)**2 + (5-2)**2 + (6-3)**2), v1.dist(v2), 0.000001
287
+ assert_equal_vector vec(1, 2, 3), v1
288
+ assert_equal_vector vec(4, 5, 6), v2
289
+
290
+ assert_in_delta M.sqrt((4-1)**2 + (5-2)**2 + (6-3)**2), V.dist(v1, v2), 0.000001
291
+ assert_equal_vector vec(1, 2, 3), v1
292
+ assert_equal_vector vec(4, 5, 6), v2
293
+ end
294
+
295
+ def test_dot ()
296
+ v1 = vec 1, 2, 3
297
+ v2 = vec 4, 5, 6
298
+
299
+ assert_equal 1*4 + 2*5 + 3*6, v1.dot(4, 5, 6)
300
+ assert_equal_vector vec(1, 2, 3), v1
301
+
302
+ assert_equal 1*4 + 2*5 + 3*6, v1.dot(v2)
303
+ assert_equal_vector vec(1, 2, 3), v1
304
+ assert_equal_vector vec(4, 5, 6), v2
305
+
306
+ assert_equal 1*4 + 2*5 + 3*6, V.dot(v1, v2)
307
+ assert_equal_vector vec(1, 2, 3), v1
308
+ assert_equal_vector vec(4, 5, 6), v2
309
+ end
310
+
311
+ def test_cross ()
312
+ v1 = vec 1, 0, 0
313
+ v2 = vec 0, 1, 0
314
+
315
+ assert_equal_vector vec(0, 0, 1), v1.cross(0, 1, 0)
316
+ assert_equal_vector vec(1, 0, 0), v1
317
+
318
+ result = vec 1, 2, 3
319
+ assert_equal_vector vec(0, 0, 1), v1.cross(v2, result)
320
+ assert_equal_vector vec(1, 0, 0), v1
321
+ assert_equal_vector vec(0, 1, 0), v2
322
+ assert_equal_vector vec(0, 0, 1), result
323
+
324
+ result = vec 1, 2, 3
325
+ assert_equal_vector vec(0, 0, 1), V.cross(v1, v2, result)
326
+ assert_equal_vector vec(1, 0, 0), v1
327
+ assert_equal_vector vec(0, 1, 0), v2
328
+ assert_equal_vector vec(0, 0, 1), result
329
+ end
330
+
331
+ def test_rotate ()
332
+ angle = PI * 2 * 0.1
333
+ context = Object.new.tap {|o| def o.toAngle__ (a); a * 2 * P::RAD2DEG__; end}
334
+
335
+ v = vec 1, 0, 0
336
+ assert_equal_vector vec(M.cos(angle), M.sin(angle), 0), v.rotate(angle)
337
+ assert_equal_vector vec(M.cos(angle), M.sin(angle), 0), v
338
+
339
+ v = vec 1, 0, 0, context: context
340
+ assert_equal_vector vec(M.cos(angle * 2), M.sin(angle * 2), 0), v.rotate(angle)
341
+ end
342
+
343
+ def test_fromAngle ()
344
+ angle = PI * 2 * 0.1
345
+ result = vec
346
+ assert_equal_vector vec(M.cos(angle), M.sin(angle), 0), V.fromAngle(angle)
347
+ assert_equal_vector vec(M.cos(angle), M.sin(angle), 0), V.fromAngle(angle, result)
348
+ assert_equal_vector vec(M.cos(angle), M.sin(angle), 0), result
349
+ end
350
+
351
+ def test_heading ()
352
+ angle = PI * 1 * 0.1
353
+ assert_in_delta angle, V.fromAngle( angle).heading, 0.000001
354
+ assert_in_delta -angle, V.fromAngle(-angle).heading, 0.000001
355
+ end
356
+
357
+ def test_angleBetween ()
358
+ v1 = V.fromAngle PI * 0.25
359
+ v2 = V.fromAngle PI * 0.75
360
+ assert_in_delta PI / 2, V.angleBetween(v1, v2), 0.000001
361
+ end
362
+
363
+ def test_lerp ()
364
+ assert_equal_vector vec(0.5, 0.5, 0.5), vec(0, 0, 0).lerp(vec(1, 1, 1), 0.5)
365
+ assert_equal_vector vec(0.5, 0.5, 0.5), vec(0, 0, 0).lerp( 1, 1, 1, 0.5)
366
+ assert_equal_vector vec(0.5, 0.5, 0.5), V.lerp(vec(0, 0, 0), vec(1, 1, 1), 0.5)
367
+ end
368
+
369
+ def test_random2D ()
370
+ v1 = V.random2D
371
+ v2 = V.random2D
372
+ assert v1.x != 0
373
+ assert v1.y != 0
374
+ assert_equal 0, v1.z
375
+ assert v2.x != 0
376
+ assert v2.y != 0
377
+ assert_equal 0, v2.z
378
+ assert_not_equal v1, v2
379
+ assert_in_delta 1, v1.mag, 0.000001
380
+ assert_in_delta 1, v2.mag, 0.000001
381
+ end
382
+
383
+ def test_random3D ()
384
+ v1 = V.random3D
385
+ v2 = V.random3D
386
+ assert v1.x != 0
387
+ assert v1.y != 0
388
+ assert v1.z != 0
389
+ assert v2.x != 0
390
+ assert v2.y != 0
391
+ assert v2.z != 0
392
+ assert_not_equal v1, v2
393
+ assert_in_delta 1, v1.mag, 0.000001
394
+ assert_in_delta 1, v2.mag, 0.000001
395
+ end
396
+
397
+ end# TestProcessingVector