* io.c (rb_open_file): encoding in mode string was ignored if perm is
[ruby-svn.git] / bootstraptest / test_proc.rb
blob1ab9444c31d44aa53c5418bef54480b9e282e6c6
1 assert_equal %q{[1, 2, 3]}, %q{
2   def getproc &b
3     b
4   end
5   
6   def m
7     yield
8   end
9   
10   m{
11     i = 1
12     m{
13       j = 2
14       m{
15         k = 3
16         getproc{
17           [i, j, k]
18         }
19       }
20     }
21   }.call
23 assert_equal %q{7}, %q{
24   def make_proc(&b)
25     b
26   end
27   
28   def make_closure
29     a = 0
30     make_proc{
31       a+=1
32     }
33   end
34   
35   cl = make_closure
36   cl.call + cl.call * cl.call
38 assert_equal %q{ok}, %q{
39   class C
40     def foo
41       :ok
42     end
43   end
44   
45   def block
46     C.method(:new).to_proc
47   end
48   b = block()
49   b.call.foo
51 assert_equal %q{[0, 1, :last, 0, 2, :last]}, %q{
52   def proc &b
53     b
54   end
55   
56   pr = []
57   proc{|i_b|
58     p3 = proc{|j_b|
59       pr << proc{|k_b|
60         [i_b, j_b, k_b]
61       }
62     }
63     p3.call(1)
64     p3.call(2)
65   }.call(0)
66   
67   pr[0].call(:last).concat pr[1].call(:last)
69 assert_equal %q{12}, %q{
70   def iter
71     yield
72   end
73   
74   def getproc &b
75     b
76   end
77   
78   iter{
79     bvar = 3
80     getproc{
81       bvar2 = 4
82       bvar * bvar2
83     }
84   }.call
86 assert_equal %q{200}, %q{
87   def iter
88     yield
89   end
90   
91   def getproc &b
92     b
93   end
94   
95   loc1 = 0
96   pr1 = iter{
97     bl1 = 1
98     getproc{
99       loc1 += 1
100       bl1  += 1
101       loc1 + bl1
102     }
103   }
104   
105   pr2 = iter{
106     bl1 = 1
107     getproc{
108       loc1 += 1
109       bl1  += 1
110       loc1 + bl1
111     }
112   }
113   
114   pr1.call; pr2.call
115   pr1.call; pr2.call
116   pr1.call; pr2.call
117   (pr1.call + pr2.call) * loc1
119 assert_equal %q{[1, 2]}, %q{
120   def proc(&pr)
121     pr
122   end
123   
124   def m
125     a = 1
126     m2{
127       a
128     }
129   end
130   
131   def m2
132     b = 2
133     proc{
134       [yield, b]
135     }
136   end
137   
138   pr = m
139   x = ['a', 1,2,3,4,5,6,7,8,9,0,
140             1,2,3,4,5,6,7,8,9,0,
141             1,2,3,4,5,6,7,8,9,0,
142             1,2,3,4,5,6,7,8,9,0,
143             1,2,3,4,5,6,7,8,9,0,]
144   pr.call
146 assert_equal %q{1}, %q{
147   def proc(&pr)
148     pr
149   end
150   
151   def m
152     a = 1
153     m2{
154       a
155     }
156   end
157   
158   def m2
159     b = 2
160     proc{
161       [yield, b]
162     }
163     100000.times{|x|
164       "#{x}"
165     }
166     yield
167   end
168   m
170 assert_equal %q{[:C, :C]}, %q{
171   Const = :top
172   class C
173     Const = :C
174     $pr = proc{
175       (1..2).map{
176         Const
177       }
178     }
179   end
180   $pr.call
182 assert_equal %q{top}, %q{
183   Const = :top
184   class C
185     Const = :C
186   end
187   pr = proc{
188     Const
189   }
190   C.class_eval %q{
191     pr.call
192   }
194 assert_equal %q{1}, %q{
195   def m(&b)
196     b
197   end
199   m{|e_proctest| e_proctest}.call(1)
201 assert_equal %q{12}, %q{
202   def m(&b)
203     b
204   end
206   m{|e_proctest1, e_proctest2|
207     a = e_proctest1 * e_proctest2 * 2
208     a * 3
209   }.call(1, 2)
211 assert_equal %q{[[], [1], [1, 2], [1, 2, 3]]}, %q{
212   [
213   Proc.new{|*args| args}.call(),
214   Proc.new{|*args| args}.call(1),
215   Proc.new{|*args| args}.call(1, 2),
216   Proc.new{|*args| args}.call(1, 2, 3),
217   ]
219 assert_equal %q{[[nil, []], [1, []], [1, [2]], [1, [2, 3]]]}, %q{
220   [
221   Proc.new{|a, *b| [a, b]}.call(),
222   Proc.new{|a, *b| [a, b]}.call(1),
223   Proc.new{|a, *b| [a, b]}.call(1, 2),
224   Proc.new{|a, *b| [a, b]}.call(1, 2, 3),
225   ]
227 assert_equal %q{0}, %q{
228   pr = proc{
229     $SAFE
230   }
231   $SAFE = 1
232   pr.call
234 assert_equal %q{[1, 0]}, %q{
235   pr = proc{
236     $SAFE += 1
237   }
238   [pr.call, $SAFE]
240 assert_equal %q{1}, %q{
241   def m(&b)
242     b
243   end
244   m{1}.call
246 assert_equal %q{3}, %q{
247   def m(&b)
248     b
249   end
251   m{
252     a = 1
253     a + 2
254   }.call
256 assert_equal %Q{ok\n}, %q{
257   class A; def get_block; proc {puts "ok"} end end
258   block = A.new.get_block
259   GC.start
260   block.call
261 }, '[ruby-core:14885]'
263 assert_equal 'ok', %q{
264   a = lambda {|x, y, &b| b }
265   b = a.curry[1]
266   if b.call(2){} == nil
267     :ng
268   else
269     :ok
270   end
271 }, '[ruby-core:15551]'
273 assert_equal 'ok', %q{
274   lambda {
275     break :ok
276     :ng
277   }.call
278 }, '[ruby-dev:34646]'
280 assert_equal %q{[:bar, :foo]}, %q{
281   def foo
282     klass = Class.new do
283       define_method(:bar) do
284         return :bar
285       end
286     end
287     [klass.new.bar, :foo]
288   end
289   foo
290 }, "[ ruby-Bugs-19304 ]"
292 assert_equal 'ok', %q{
293    $x = :ok
294    def def7(x, y)
295       x[y]
296       $x = :ng
297    end
298    def test_def7
299       def7(lambda {|x| x.call}, Proc.new {return})
300       $x = :ng
301    end
302    test_def7
303    $x
304 }, '[ruby-core:17164]'
306 assert_equal 'ok', %q{
307   lambda { a = lambda { return }; $x = :ng; a[]; $x = :ok }.call
308   $x
309 }, '[ruby-core:17164]'
311 assert_equal 'ok', %q{
312   lambda { a = lambda { break }; $x = :ng; a[]; $x = :ok }.call
313   $x
314 }, '[ruby-core:17164]'
316 assert_equal 'ok', %q{
317   def def8
318     $x = :ng
319     lambda { a = Proc.new { return }; a[]}.call
320     $x = :ok
321   end
322   def8
323   $x
324 }, '[ruby-core:17164]'
327 assert_equal 'ok', %q{
328    def def9
329       lambda {|a| $x = :ok; a[]; $x = :ng }.call(Proc.new { return })
330       $x = :ng
331    end
332    def9
333    $x
334 }, '[ruby-core:17164]'
336 assert_equal 'ok', %q{
337    def def10
338      $x = :ng
339      lambda { 1.times { return } }.call
340      $x = :ok
341    end
342    $x = :ok
343    def10
344    $x
345 }, '[ruby-core:17164]'
347 assert_equal 'ok', %q{
348    def def11
349       yield
350    end
351    begin
352       lambda { def11 { return } }.call
353    rescue LocalJumpError
354       :ng
355    else
356       :ok
357    end
358 }, '[ruby-core:17164]'
360 assert_equal 'ok', %q{
361    def def12
362       b = Proc.new { $x = :ng; lambda { return }.call; $x = :ok }.call
363    end
364    def12
365    $x
366 }, '[ruby-core:17164]'
368 assert_equal 'ok', %q{
369   def m
370     pr = proc{
371       proc{
372         return :ok
373       }
374     }.call
375     pr.call
376     :ng
377   end
378   m()
381 assert_equal 'ok', %q{
382   class Foo
383     def call_it
384       p = Proc.new
385       p.call
386     end
387   end
389   def give_it
390     proc { :ok }
391   end
393   f = Foo.new
394   a_proc = give_it
395   f.call_it(&give_it())
396 }, '[ruby-core:15711]'