* 2022-01-18 [ci skip]
[ruby-80x24.org.git] / bootstraptest / test_flow.rb
blob35f19db5888f854211e523026988ddfacd760168
1 assert_equal %q{[1, 2, 4, 5, 6, 7, 8]}, %q{$a = []; begin;  ; $a << 1
2   [1,2].each{; $a << 2
3     break; $a << 3
4   }; $a << 4
5   begin; $a << 5
6   ensure; $a << 6
7   end; $a << 7
8 ; $a << 8
9 ; rescue Exception; $a << 99; end; $a}
10 assert_equal %q{[1, 2, 3, 5, 6, 7, 8]}, %q{$a = []; begin;  ; $a << 1
11   begin; $a << 2
12     [1,2].each do; $a << 3
13       break; $a << 4
14     end; $a << 5
15   ensure; $a << 6
16   end; $a << 7
17 ; $a << 8
18 ; rescue Exception; $a << 99; end; $a}
19 assert_equal %q{ok}, %q{
20   ["a"].inject("ng"){|x,y|
21     break :ok
22   }
24 assert_equal %q{ok}, %q{
25   unless ''.respond_to? :lines
26     class String
27       def lines
28         self
29       end
30     end
31   end
33   ('a').lines.map{|e|
34     break :ok
35   }
37 assert_equal %q{[1, 2, 4, 5]}, %q{$a = []; begin; ; $a << 1
38   ["a"].inject("ng"){|x,y|; $a << 2
39     break :ok; $a << 3
40   }; $a << 4
41 ; $a << 5
42 ; rescue Exception; $a << 99; end; $a}
43 assert_equal %q{[1, 2, 4, 5]}, %q{$a = []; begin; ; $a << 1
44   ('a'..'b').map{|e|; $a << 2
45     break :ok; $a << 3
46   }; $a << 4
47 ; $a << 5
48 ; rescue Exception; $a << 99; end; $a}
49 assert_equal %q{[1, 2, 3, 5, 7, 8]}, %q{$a = []; begin;  ; $a << 1
50   [1,2].each do; $a << 2
51     begin; $a << 3
52       break; $a << 4
53     ensure; $a << 5
54     end; $a << 6
55   end; $a << 7
56 ; $a << 8
57 ; rescue Exception; $a << 99; end; $a}
58 assert_equal %q{[1, 2, 3, 4, 5, 6, 9, 10]}, %q{$a = []; begin; ; $a << 1
59   i=0; $a << 2
60   while i<3; $a << 3
61     i+=1; $a << 4
62     begin; $a << 5
63     ensure; $a << 6
64       break; $a << 7
65     end; $a << 8
66   end; $a << 9
67 ; $a << 10
68 ; rescue Exception; $a << 99; end; $a}
69 assert_equal %q{[1, 2, 3, 4, 5, 7, 10, 11]}, %q{$a = []; begin; ; $a << 1
70   i=0; $a << 2
71   while i<3; $a << 3
72     i+=1; $a << 4
73     begin; $a << 5
74       raise; $a << 6
75     ensure; $a << 7
76       break; $a << 8
77     end; $a << 9
78   end; $a << 10
79 ; $a << 11
80 ; rescue Exception; $a << 99; end; $a}
81 assert_equal %q{[1, 2, 3, 4, 5, 7, 10, 11]}, %q{$a = []; begin; ; $a << 1
82   i=0; $a << 2
83   while i<3; $a << 3
84     i+=1; $a << 4
85     begin; $a << 5
86       raise; $a << 6
87     rescue; $a << 7
88       break; $a << 8
89     end; $a << 9
90   end; $a << 10
91 ; $a << 11
92 ; rescue Exception; $a << 99; end; $a}
93 assert_equal %q{[1, 2, 3, 5, 8, 9]}, %q{$a = []; begin;  ; $a << 1
94   [1,2].each do; $a << 2
95     begin; $a << 3
96       raise StandardError; $a << 4
97     ensure; $a << 5
98       break; $a << 6
99     end; $a << 7
100   end; $a << 8
101 ; $a << 9
102 ; rescue Exception; $a << 99; end; $a}
103 assert_equal %q{[1, 2, 3, 5, 8, 9]}, %q{$a = []; begin;  ; $a << 1
104   [1,2].each do; $a << 2
105     begin; $a << 3
106       raise StandardError; $a << 4
107     rescue; $a << 5
108       break; $a << 6
109     end; $a << 7
110   end; $a << 8
111 ; $a << 9
112 ; rescue Exception; $a << 99; end; $a}
113 assert_equal %q{[1, 2, 3, 4, 6, 8, 10, 11]}, %q{$a = []; begin;  ; $a << 1
114   [1,2].each do; $a << 2
115     begin; $a << 3
116       begin; $a << 4
117         break; $a << 5
118       ensure; $a << 6
119       end; $a << 7
120     ensure; $a << 8
121     end; $a << 9
122   end; $a << 10
123 ; $a << 11
124 ; rescue Exception; $a << 99; end; $a}
125 assert_equal %q{[1, 2, 3, 4, 5, 6, 7, 8, 10, 13, 3, 4, 5, 6, 7, 8, 10, 13, 3, 4, 5, 6, 7, 8, 10, 13, 14, 15]}, %q{$a = []; begin; ; $a << 1
126   i = 0; $a << 2
127   while i<3; $a << 3
128     i+=1; $a << 4
129     j = 0; $a << 5
130     while j<3; $a << 6
131       j+=1; $a << 7
132       begin; $a << 8
133         raise; $a << 9
134       rescue; $a << 10
135         break; $a << 11
136       end; $a << 12
137     end; $a << 13
138   end; $a << 14
139 ; $a << 15
140 ; rescue Exception; $a << 99; end; $a}
141 assert_equal %q{[1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 14, 6, 7, 8, 9, 11, 14, 6, 7, 8, 9, 11, 14, 15, 3, 4, 5, 6, 7, 8, 9, 11, 14, 6, 7, 8, 9, 11, 14, 6, 7, 8, 9, 11, 14, 15, 3, 4, 5, 6, 7, 8, 9, 11, 14, 6, 7, 8, 9, 11, 14, 6, 7, 8, 9, 11, 14, 15, 16, 17]}, %q{$a = []; begin; ; $a << 1
142   i = 0; $a << 2
143   while i<3; $a << 3
144     i+=1; $a << 4
145     j = 0; $a << 5
146     while j<3; $a << 6
147       j+=1; $a << 7
148       1.times{; $a << 8
149         begin; $a << 9
150           raise; $a << 10
151         rescue; $a << 11
152           break; $a << 12
153         end; $a << 13
154       }; $a << 14
155     end; $a << 15
156   end; $a << 16
157 ; $a << 17
158 ; rescue Exception; $a << 99; end; $a}
159 assert_equal %q{[1, 2, 3, 4, 5, 6, 7, 8, 10, 13, 3, 4, 5, 6, 7, 8, 10, 13, 3, 4, 5, 6, 7, 8, 10, 13, 14, 15]}, %q{$a = []; begin; ; $a << 1
160   i = 0; $a << 2
161   while i<3; $a << 3
162     i+=1; $a << 4
163     j = 0; $a << 5
164     while j<3; $a << 6
165       j+=1; $a << 7
166       begin; $a << 8
167         raise; $a << 9
168       ensure; $a << 10
169         break; $a << 11
170       end; $a << 12
171     end; $a << 13
172   end; $a << 14
173 ; $a << 15
174 ; rescue Exception; $a << 99; end; $a}
175 assert_equal %q{[1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 14, 6, 7, 8, 9, 11, 14, 6, 7, 8, 9, 11, 14, 15, 3, 4, 5, 6, 7, 8, 9, 11, 14, 6, 7, 8, 9, 11, 14, 6, 7, 8, 9, 11, 14, 15, 3, 4, 5, 6, 7, 8, 9, 11, 14, 6, 7, 8, 9, 11, 14, 6, 7, 8, 9, 11, 14, 15, 16, 17]}, %q{$a = []; begin; ; $a << 1
176   i = 0; $a << 2
177   while i<3; $a << 3
178     i+=1; $a << 4
179     j = 0; $a << 5
180     while j<3; $a << 6
181       j+=1; $a << 7
182       1.times{; $a << 8
183         begin; $a << 9
184           raise; $a << 10
185         ensure; $a << 11
186           break; $a << 12
187         end; $a << 13
188       }; $a << 14
189     end; $a << 15
190   end; $a << 16
191 ; $a << 17
192 ; rescue Exception; $a << 99; end; $a}
193 assert_equal %q{[1, 2, 3, 5, 8, 9]}, %q{$a = []; begin; ; $a << 1
194   while true; $a << 2
195     begin; $a << 3
196       break; $a << 4
197     ensure; $a << 5
198       break; $a << 6
199     end; $a << 7
200   end; $a << 8
201 ; $a << 9
202 ; rescue Exception; $a << 99; end; $a}
203 assert_equal %q{[1, 2, 3, 5, 99]}, %q{
204 $a = [];
205 begin; ; $a << 1
206   while true; $a << 2
207     begin; $a << 3
208       break; $a << 4
209     ensure; $a << 5
210       raise; $a << 6
211     end; $a << 7
212   end; $a << 8
213 ; $a << 9
214 ; rescue Exception; $a << 99; end; $a}
215 assert_equal %q{[1, 2, 3, 4, 6, 8, 9, 10, 11]}, %q{$a = []; begin;  ; $a << 1
216   begin; $a << 2
217     [1,2].each do; $a << 3
218       begin; $a << 4
219         break; $a << 5
220       ensure; $a << 6
221       end; $a << 7
222     end; $a << 8
223   ensure; $a << 9
224   end; $a << 10
225 ; $a << 11
226 ; rescue Exception; $a << 99; end; $a}
227 assert_equal %q{[1, 2, 4, 99]}, %q{$a = []; begin; ; $a << 1
228   begin; $a << 2
229     raise StandardError; $a << 3
230   ensure; $a << 4
231   end; $a << 5
232 ; $a << 6
233 ; rescue Exception; $a << 99; end; $a}
234 assert_equal %q{[1, 2, 3, 4]}, %q{$a = []; begin;  ; $a << 1
235   begin; $a << 2
236   ensure; $a << 3
237   end ; $a << 4
238 ; rescue Exception; $a << 99; end; $a}
239 assert_equal %q{[1, 2, 3, 5, 99]}, %q{$a = []; begin;  ; $a << 1
240   [1,2].each do; $a << 2
241     begin; $a << 3
242       break; $a << 4
243     ensure; $a << 5
244       raise StandardError; $a << 6
245     end; $a << 7
246   end; $a << 8
247 ; $a << 9
248 ; rescue Exception; $a << 99; end; $a}
249 assert_equal %q{3}, %q{
250   def m a, b
251     a + b
252   end
253   m(1,
254     while true
255       break 2
256     end
257     )
259 assert_equal %q{4}, %q{
260   def m a, b
261     a + b
262   end
263   m(1,
264     (i=0; while i<2
265        i+=1
266        class C
267          next 2
268        end
269      end; 3)
270     )
272 assert_equal %q{34}, %q{
273   def m a, b
274     a+b
275   end
276   m(1, 1.times{break 3}) +
277   m(10, (1.times{next 3}; 20))
279 assert_equal %q{[1, 2, 3, 6, 7]}, %q{$a = []; begin; ; $a << 1
280   3.times{; $a << 2
281     class C; $a << 3
282       break; $a << 4
283     end; $a << 5
284   }; $a << 6
285 ; $a << 7
286 ; rescue Exception; $a << 99; end; $a}
287 assert_equal %q{[1, 2, 3, 4, 8, 9]}, %q{$a = []; begin; ; $a << 1
288   3.times{; $a << 2
289     class A; $a << 3
290       class B; $a << 4
291         break; $a << 5
292       end; $a << 6
293     end; $a << 7
294   }; $a << 8
295 ; $a << 9
296 ; rescue Exception; $a << 99; end; $a}
297 assert_equal %q{[1, 2, 3, 2, 3, 2, 3, 6, 7]}, %q{$a = []; begin; ; $a << 1
298   3.times{; $a << 2
299     class C; $a << 3
300       next; $a << 4
301     end; $a << 5
302   }; $a << 6
303 ; $a << 7
304 ; rescue Exception; $a << 99; end; $a}
305 assert_equal %q{[1, 2, 3, 4, 2, 3, 4, 2, 3, 4, 8, 9]}, %q{$a = []; begin; ; $a << 1
306   3.times{; $a << 2
307     class C; $a << 3
308       class D; $a << 4
309         next; $a << 5
310       end; $a << 6
311     end; $a << 7
312   }; $a << 8
313 ; $a << 9
314 ; rescue Exception; $a << 99; end; $a}
315 assert_equal %q{[1, 2, 3, 6, 7]}, %q{$a = []; begin; ; $a << 1
316   while true; $a << 2
317     class C; $a << 3
318       break; $a << 4
319     end; $a << 5
320   end; $a << 6
321 ; $a << 7
322 ; rescue Exception; $a << 99; end; $a}
323 assert_equal %q{[1, 2, 3, 4, 8, 9]}, %q{$a = []; begin; ; $a << 1
324   while true; $a << 2
325     class C; $a << 3
326       class D; $a << 4
327         break; $a << 5
328       end; $a << 6
329     end; $a << 7
330   end; $a << 8
331 ; $a << 9
332 ; rescue Exception; $a << 99; end; $a}
333 assert_equal %q{[1, 2, 3, 4, 5, 3, 4, 5, 3, 4, 5, 8, 9]}, %q{$a = []; begin; ; $a << 1
334   i=0; $a << 2
335   while i<3; $a << 3
336     i+=1; $a << 4
337     class C; $a << 5
338       next 10; $a << 6
339     end; $a << 7
340   end; $a << 8
341 ; $a << 9
342 ; rescue Exception; $a << 99; end; $a}
343 assert_equal %q{1}, %q{
344   1.times{
345     while true
346       class C
347         begin
348           break
349         ensure
350           break
351         end
352       end
353     end
354   }
356 assert_equal %q{[1, 2, 3, 5, 2, 3, 5, 7, 8]}, %q{$a = []; begin;  ; $a << 1
357   [1,2].each do; $a << 2
358     begin; $a << 3
359       next; $a << 4
360     ensure; $a << 5
361     end; $a << 6
362   end; $a << 7
363 ; $a << 8
364 ; rescue Exception; $a << 99; end; $a}
365 assert_equal %q{[1, 2, 6, 3, 5, 7, 8]}, %q{$a = []; begin;  ; $a << 1
366   o = "test"; $a << 2
367   def o.test(a); $a << 3
368     return a; $a << 4
369   ensure; $a << 5
370   end; $a << 6
371   o.test(123); $a << 7
372 ; $a << 8
373 ; rescue Exception; $a << 99; end; $a}
374 assert_equal %q{[1, 4, 7, 5, 8, 9]}, %q{$a = []; begin; ; $a << 1
375   def m1 *args; $a << 2
376     ; $a << 3
377   end; $a << 4
378   def m2; $a << 5
379     m1(:a, :b, (return 1; :c)); $a << 6
380   end; $a << 7
381   m2; $a << 8
382 ; $a << 9
383 ; rescue Exception; $a << 99; end; $a}
384 assert_equal %q{[1, 8, 2, 3, 4, 5, 9, 10]}, %q{$a = []; begin; ; $a << 1
385   def m(); $a << 2
386     begin; $a << 3
387       2; $a << 4
388     ensure; $a << 5
389       return 3; $a << 6
390     end; $a << 7
391   end; $a << 8
392   m; $a << 9
393 ; $a << 10
394 ; rescue Exception; $a << 99; end; $a}
395 assert_equal %q{[1, 3, 11, 4, 5, 6, 7, 12, 13]}, %q{$a = []; begin; ; $a << 1
396   def m2; $a << 2
397   end; $a << 3
398   def m(); $a << 4
399     m2(begin; $a << 5
400          2; $a << 6
401        ensure; $a << 7
402          return 3; $a << 8
403        end); $a << 9
404     4; $a << 10
405   end; $a << 11
406   m(); $a << 12
407 ; $a << 13
408 ; rescue Exception; $a << 99; end; $a}
409 assert_equal %q{[1, 16, 2, 3, 4, 5, 6, 7, 10, 11, 17, 18]}, %q{$a = []; begin; ; $a << 1
410   def m; $a << 2
411     1; $a << 3
412     1.times{; $a << 4
413       2; $a << 5
414       begin; $a << 6
415         3; $a << 7
416         return; $a << 8
417         4; $a << 9
418       ensure; $a << 10
419         5; $a << 11
420       end; $a << 12
421       6; $a << 13
422     }; $a << 14
423     7; $a << 15
424   end; $a << 16
425   m(); $a << 17
426 ; $a << 18
427 ; rescue Exception; $a << 99; end; $a}
428 assert_equal %q{[:ok, :ok2, :last]}, %q{
429   a = []
430   i = 0
431   begin
432     while i < 1
433       i+=1
434       begin
435         begin
436           next
437         ensure
438           a << :ok
439         end
440       ensure
441         a << :ok2
442       end
443     end
444   ensure
445     a << :last
446   end
447   a
449 assert_equal %q{[:ok, :ok2, :last]}, %q{
450   a = []
451   i = 0
452   begin
453     while i < 1
454       i+=1
455       begin
456         begin
457           break
458         ensure
459           a << :ok
460         end
461       ensure
462         a << :ok2
463       end
464     end
465   ensure
466     a << :last
467   end
468   a
470 assert_equal %q{[:ok, :ok2, :last]}, %q{
471   a = []
472   i = 0
473   begin
474     while i < 1
475       if i>0
476         break
477       end
478       i+=1
479       begin
480         begin
481           redo
482         ensure
483           a << :ok
484         end
485       ensure
486         a << :ok2
487       end
488     end
489   ensure
490     a << :last
491   end
492   a
494 assert_equal %Q{ENSURE\n}, %q{
495   def test
496     while true
497       return
498     end
499   ensure
500     puts("ENSURE")
501   end
502   test
503 }, '[ruby-dev:37967]'
505 [['[ruby-core:28129]', %q{
506   class Bug2728
507     include Enumerable
508     define_method(:dynamic_method) do
509       "dynamically defined method"
510     end
511     def each
512       begin
513         yield :foo
514       ensure
515         dynamic_method
516       end
517     end
518   end
519   e = Bug2728.new
521  ['[ruby-core:28132]', %q{
522   class Bug2729
523     include Enumerable
524     def each
525       begin
526         yield :foo
527       ensure
528         proc {}.call
529       end
530     end
531   end
532   e = Bug2729.new
534  ['[ruby-core:39125]', %q{
535   class Bug5234
536     include Enumerable
537     def each(&block)
538       begin
539         yield :foo
540       ensure
541         proc(&block)
542       end
543     end
544   end
545   e = Bug5234.new
547  ['[ruby-dev:45656]', %q{
548   class Bug6460
549     include Enumerable
550     def each(&block)
551       begin
552         yield :foo
553       ensure
554         1.times { Proc.new(&block) }
555       end
556     end
557   end
558   e = Bug6460.new
559 }]].each do |bug, src|
560   assert_equal "foo", src + %q{e.detect {true}}, bug
561   assert_equal "true", src + %q{e.any? {true}}, bug
562   assert_equal "false", src + %q{e.all? {false}}, bug
563   assert_equal "true", src + %q{e.include?(:foo)}, bug
566 assert_equal "foo", %q{
567   class Bug6460
568     def m1
569       m2 {|e|
570         return e
571       }
572     end
574     def m2
575       begin
576         yield :foo
577       ensure
578         begin
579           begin
580             yield :foo
581           ensure
582             Proc.new
583             raise ''
584           end
585         rescue
586         end
587       end
588     end
589   end
590   Bug6460.new.m1
591 }, '[ruby-dev:46372]'
593 assert_equal "foo", %q{
594   obj = "foo"
595   if obj || any1
596     any2 = any2
597   else
598     raise obj.inspect
599   end
600   obj
601 }, '[ruby-core:87830]'