source: EcnlProtoTool/trunk/mruby-1.2.0/test/t/bs_block.rb@ 270

Last change on this file since 270 was 270, checked in by coas-nagasima, 7 years ago

mruby版ECNLプロトタイピング・ツールを追加

  • Property svn:eol-style set to native
  • Property svn:mime-type set to text/x-ruby
File size: 6.6 KB
Line 
1##
2# Bootstrap tests for blocks
3
4assert('BS Block 1') do
5 assert_equal(1) do
6 1.times{
7 begin
8 a = 1
9 ensure
10 foo = nil
11 end
12 }
13 end
14end
15
16assert('BS Block 2') do
17 assert_equal 2, [1,2,3].find{|x| x == 2}
18end
19
20assert('BS Block 3') do
21 class E
22 include Enumerable
23 def each(&block)
24 [1, 2, 3].each(&block)
25 end
26 end
27 assert_equal 2, E.new.find {|x| x == 2 }
28end
29
30assert('BS Block 3') do
31 sum = 0
32 for x in [1, 2, 3]
33 sum += x
34 end
35 assert_equal 6, sum
36end
37
38assert('BS Block 4') do
39 sum = 0
40 for x in (1..5)
41 sum += x
42 end
43 assert_equal 15, sum
44end
45
46assert('BS Block 5') do
47 sum = 0
48 for x in []
49 sum += x
50 end
51 assert_equal 0, sum
52end
53
54assert('BS Block 6') do
55 ans = []
56 assert_equal(1) do
57 1.times{
58 for n in 1..3
59 a = n
60 ans << a
61 end
62 }
63 end
64end
65
66assert('BS Block 7') do
67 ans = []
68 assert_equal((1..3)) do
69 for m in 1..3
70 for n in 2..4
71 a = [m, n]
72 ans << a
73 end
74 end
75 end
76end
77
78assert('BS Block 8') do
79 assert_equal [1, 2, 3], (1..3).to_a
80end
81
82assert('BS Block 9') do
83 assert_equal([4, 8, 12]) do
84 (1..3).map{|e|
85 e * 4
86 }
87 end
88end
89
90assert('BS Block 10') do
91 def m
92 yield
93 end
94 def n
95 yield
96 end
97
98 assert_equal(100) do
99 m{
100 n{
101 100
102 }
103 }
104 end
105end
106
107assert('BS Block 11') do
108 def m
109 yield 1
110 end
111
112 assert_equal(20) do
113 m{|ib|
114 m{|jb|
115 i = 20
116 }
117 }
118 end
119end
120
121assert('BS Block 12') do
122 def m
123 yield 1
124 end
125
126 assert_equal(2) do
127 m{|ib|
128 m{|jb|
129 ib = 20
130 kb = 2
131 }
132 }
133 end
134end
135
136assert('BS Block 13') do
137 def iter1
138 iter2{
139 yield
140 }
141 end
142
143 def iter2
144 yield
145 end
146
147 assert_equal(3) do
148 iter1{
149 jb = 2
150 iter1{
151 jb = 3
152 }
153 jb
154 }
155 end
156end
157
158assert('BS Block 14') do
159 def iter1
160 iter2{
161 yield
162 }
163 end
164
165 def iter2
166 yield
167 end
168
169 assert_equal(2) do
170 iter1{
171 jb = 2
172 iter1{
173 jb
174 }
175 jb
176 }
177 end
178end
179
180assert('BS Block 15') do
181 def m
182 yield 1
183 end
184 assert_equal(2) do
185 m{|ib|
186 ib*2
187 }
188 end
189end
190
191assert('BS Block 16') do
192 def m
193 yield 12345, 67890
194 end
195 assert_equal(92580) do
196 m{|ib,jb|
197 ib*2+jb
198 }
199 end
200end
201
202assert('BS Block 17') do
203 def iter
204 yield 10
205 end
206
207 a = nil
208 assert_equal [10, nil] do
209 [iter{|a|
210 a
211 }, a]
212 end
213end
214
215assert('BS Block 18') do
216 def iter
217 yield 10
218 end
219
220 assert_equal(21) do
221 iter{|a|
222 iter{|a|
223 a + 1
224 } + a
225 }
226 end
227end
228
229assert('BS Block 19') do
230 def iter
231 yield 10, 20, 30, 40
232 end
233
234 a = b = c = d = nil
235 assert_equal([10, 20, 30, 40, nil, nil, nil, nil]) do
236 iter{|a, b, c, d|
237 [a, b, c, d]
238 } + [a, b, c, d]
239 end
240end
241
242assert('BS Block 20') do
243 def iter
244 yield 10, 20, 30, 40
245 end
246
247 a = b = nil
248 assert_equal([10, 20, 30, 40, nil, nil]) do
249 iter{|a, b, c, d|
250 [a, b, c, d]
251 } + [a, b]
252 end
253end
254
255assert('BS Block 21') do
256 def iter
257 yield 1, 2
258 end
259
260 assert_equal([1, [2]]) do
261 iter{|a, *b|
262 [a, b]
263 }
264 end
265end
266
267assert('BS Block 22') do
268 def iter
269 yield 1, 2
270 end
271
272 assert_equal([[1, 2]]) do
273 iter{|*a|
274 [a]
275 }
276 end
277end
278
279assert('BS Block 23') do
280 def iter
281 yield 1, 2
282 end
283
284 assert_equal([1, 2, []]) do
285 iter{|a, b, *c|
286 [a, b, c]
287 }
288 end
289end
290
291assert('BS Block 24') do
292 def m
293 yield
294 end
295 assert_equal(1) do
296 m{
297 1
298 }
299 end
300end
301
302assert('BS Block 25') do
303 def m
304 yield 123
305 end
306 assert_equal(15129) do
307 m{|ib|
308 m{|jb|
309 ib*jb
310 }
311 }
312 end
313end
314
315assert('BS Block 26') do
316 def m a
317 yield a
318 end
319 assert_equal(2) do
320 m(1){|ib|
321 m(2){|jb|
322 ib*jb
323 }
324 }
325 end
326end
327
328assert('BS Block 27') do
329 sum = 0
330 3.times{|ib|
331 2.times{|jb|
332 sum += ib + jb
333 }}
334 assert_equal sum, 9
335end
336
337assert('BS Block 28') do
338 assert_equal(10) do
339 3.times{|bl|
340 break 10
341 }
342 end
343end
344
345assert('BS Block 29') do
346 def iter
347 yield 1,2,3
348 end
349
350 assert_equal([1, 2]) do
351 iter{|i, j|
352 [i, j]
353 }
354 end
355end
356
357assert('BS Block 30') do
358 def iter
359 yield 1
360 end
361
362 assert_equal([1, nil]) do
363 iter{|i, j|
364 [i, j]
365 }
366 end
367end
368
369assert('BS Block [ruby-dev:31147]') do
370 def m
371 yield
372 end
373 assert_nil m{|&b| b}
374end
375
376assert('BS Block [ruby-dev:31160]') do
377 def m()
378 yield
379 end
380 assert_nil m {|(v,(*))|}
381end
382
383assert('BS Block [issue #750]') do
384 def m(a, *b)
385 yield
386 end
387 args = [1, 2, 3]
388 assert_equal m(*args){ 1 }, 1
389end
390
391assert('BS Block 31') do
392 def m()
393 yield
394 end
395 assert_nil m {|((*))|}
396end
397
398assert('BS Block [ruby-dev:31440]') do
399 def m
400 yield [0]
401 end
402 assert_equal m{|v, &b| v}, [0]
403end
404
405assert('BS Block 32') do
406 r = false; 1.times{|&b| r = b}
407 assert_equal NilClass, r.class
408end
409
410assert('BS Block [ruby-core:14395]') do
411 class Controller
412 def respond_to(&block)
413 responder = Responder.new
414 block.call(responder)
415 responder.respond
416 end
417 def test_for_bug
418 respond_to{|format|
419 format.js{
420 "in test"
421 render{|obj|
422 obj
423 }
424 }
425 }
426 end
427 def render(&block)
428 "in render"
429 end
430 end
431
432 class Responder
433 def method_missing(symbol, &block)
434 "enter method_missing"
435 @response = Proc.new{
436 'in method missing'
437 block.call
438 }
439 "leave method_missing"
440 end
441 def respond
442 @response.call
443 end
444 end
445 t = Controller.new
446 assert_true t.test_for_bug
447end
448
449assert("BS Block 33") do
450 module TestReturnFromNestedBlock
451 def self.test
452 1.times do
453 1.times do
454 return :ok
455 end
456 end
457 :bad
458 end
459 end
460 assert_equal :ok, TestReturnFromNestedBlock.test
461end
462
463assert("BS Block 34") do
464 module TestReturnFromNestedBlock_BSBlock34
465 def self.test
466 1.times do
467 while true
468 return :ok
469 end
470 end
471 :bad
472 end
473 end
474 assert_equal :ok, TestReturnFromNestedBlock_BSBlock34.test
475end
476
477assert("BS Block 35") do
478 module TestReturnFromNestedBlock_BSBlock35
479 def self.test
480 1.times do
481 until false
482 return :ok
483 end
484 end
485 :bad
486 end
487 end
488 assert_equal :ok, TestReturnFromNestedBlock_BSBlock35.test
489end
490
491assert('BS Block 36') do
492 def iter
493 yield 1, 2, 3, 4, 5
494 end
495
496 assert_equal([1, 2, [3, 4], 5]) do
497 iter{|a, b, *c, d|
498 [a, b, c, d]
499 }
500 end
501end
502
503assert('BS Block 37') do
504 def iter
505 yield 1, 2, 3
506 end
507
508 assert_equal([1, 2, [], 3]) do
509 iter{|a, b, *c, d|
510 [a, b, c, d]
511 }
512 end
513end
514
515assert('BS Block 38') do
516 def iter
517 yield 1,2,3,4,5,6
518 end
519
520 assert_equal [1,2,3,4,5], iter{|a,b,c=:c,d,e| [a,b,c,d,e]}
521end
Note: See TracBrowser for help on using the repository browser.