4 assert('Proc#source_location') do
5 loc = Proc.new {}.source_location
7 assert_equal loc[0][-7, 7], 'proc.rb'
11 assert('Proc#inspect') do
12 ins = Proc.new{}.inspect
13 assert_kind_of String, ins
16 assert('Proc#parameters') do
17 parameters = Proc.new{|x,y=42,*other|}.parameters
18 assert_equal [[:opt, :x], [:opt, :y], [:rest, :other]], parameters
21 assert('Proc#lambda?') do
22 assert_true lambda{}.lambda?
23 assert_true !Proc.new{}.lambda?
27 proc = Proc.new {|a| a * 2}
28 assert_equal 20, (proc === 10)
31 assert('Proc#yield') do
32 proc = Proc.new {|a| a * 2}
33 assert_equal 20, proc.yield(10)
36 assert('Proc#curry') do
37 b = proc {|x, y, z| (x||0) + (y||0) + (z||0) }
38 assert_equal 6, b.curry[1][2][3]
39 assert_equal 6, b.curry[1, 2][3, 4]
40 assert_equal 6, b.curry(5)[1][2][3][4][5]
41 assert_equal 6, b.curry(5)[1, 2][3, 4][5]
42 assert_equal 1, b.curry(1)[1]
44 b = lambda {|x, y, z| (x||0) + (y||0) + (z||0) }
45 assert_equal 6, b.curry[1][2][3]
46 assert_raise(ArgumentError) { b.curry[1, 2][3, 4] }
47 assert_raise(ArgumentError) { b.curry(5) }
48 assert_raise(ArgumentError) { b.curry(1) }
50 assert_false(proc{}.curry.lambda?)
51 assert_true(lambda{}.curry.lambda?)
54 assert('Proc#parameters') do
55 assert_equal([], Proc.new {}.parameters)
56 assert_equal([], Proc.new {||}.parameters)
57 assert_equal([[:opt, :a]], Proc.new {|a|}.parameters)
58 assert_equal([[:req, :a]], lambda {|a|}.parameters)
59 assert_equal([[:opt, :a]], lambda {|a=nil|}.parameters)
60 assert_equal([[:req, :a]], ->(a){}.parameters)
61 assert_equal([[:rest]], lambda { |*| }.parameters)
62 assert_equal([[:rest, :a]], Proc.new {|*a|}.parameters)
63 assert_equal([[:opt, :a], [:opt, :b], [:opt, :c], [:opt, :d], [:rest, :e], [:opt, :f], [:opt, :g], [:block, :h]], Proc.new {|a,b,c=:c,d=:d,*e,f,g,&h|}.parameters)
64 assert_equal([[:req, :a], [:req, :b], [:opt, :c], [:opt, :d], [:rest, :e], [:req, :f], [:req, :g], [:block, :h]], lambda {|a,b,c=:c,d=:d,*e,f,g,&h|}.parameters)
67 assert('Proc#to_proc') do
69 assert_equal proc, proc.to_proc
72 assert('Kernel#proc') do
73 assert_true !proc{|a|}.lambda?
75 assert_raise LocalJumpError do
80 assert "Proc#<< and Proc#>>" do
81 add3 = ->(n) { n + 3 }
82 mul2 = ->(n) { n * 2 }
85 assert_kind_of Proc, f1
86 assert_equal 16, f1.call(5)
89 assert_kind_of Proc, f2
90 assert_equal 13, f2.call(5)
93 assert('mrb_proc_new_cfunc_with_env') do
94 ProcExtTest.mrb_proc_new_cfunc_with_env(:test)
95 ProcExtTest.mrb_proc_new_cfunc_with_env(:mruby)
99 assert_equal :test, t.test
100 assert_equal :mruby, t.mruby
103 assert('mrb_cfunc_env_get') do
104 ProcExtTest.mrb_cfunc_env_get :get_int, [0, 1, 2]
108 assert_raise(TypeError) { t.cfunc_without_env }
110 assert_raise(IndexError) { t.get_int(-1) }
111 assert_raise(IndexError) { t.get_int(3) }
113 assert_equal 1, t.get_int(1)