source: EcnlProtoTool/trunk/mruby-1.3.0/test/t/proc.rb@ 331

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

prototoolに関連するプロジェクトをnewlibからmuslを使うよう変更・更新
ntshellをnewlibの下位の実装から、muslのsyscallの実装に変更・更新
以下のOSSをアップデート
・mruby-1.3.0
・musl-1.1.18
・onigmo-6.1.3
・tcc-0.9.27
以下のOSSを追加
・openssl-1.1.0e
・curl-7.57.0
・zlib-1.2.11
以下のmrbgemsを追加
・iij/mruby-digest
・iij/mruby-env
・iij/mruby-errno
・iij/mruby-iijson
・iij/mruby-ipaddr
・iij/mruby-mock
・iij/mruby-require
・iij/mruby-tls-openssl

  • Property svn:eol-style set to native
  • Property svn:mime-type set to text/x-ruby;charset=UTF-8
File size: 3.9 KB
Line 
1##
2# Proc ISO Test
3
4assert('Proc', '15.2.17') do
5 assert_equal Class, Proc.class
6end
7
8assert('Proc.new', '15.2.17.3.1') do
9 assert_raise ArgumentError do
10 Proc.new
11 end
12
13 assert_equal (Proc.new {}).class, Proc
14end
15
16assert('Proc#[]', '15.2.17.4.1') do
17 a = 0
18 b = Proc.new { a += 1 }
19 b.[]
20
21 a2 = 0
22 b2 = Proc.new { |i| a2 += i }
23 b2.[](5)
24
25 assert_equal 1, a
26 assert_equal 5, a2
27end
28
29assert('Proc#arity', '15.2.17.4.2') do
30 a = Proc.new {|x, y|}.arity
31 b = Proc.new {|x, *y, z|}.arity
32 c = Proc.new {|x=0, y|}.arity
33 d = Proc.new {|(x, y), z=0|}.arity
34
35 assert_equal 2, a
36 assert_equal(-3, b)
37 assert_equal 1, c
38 assert_equal 1, d
39
40 e = ->(x=0, y){}.arity
41 f = ->((x, y), z=0){}.arity
42 g = ->(x=0){}.arity
43
44 assert_equal(-2, e)
45 assert_equal(-2, f)
46 assert_equal(-1, g)
47end
48
49assert('Proc#call', '15.2.17.4.3') do
50 a = 0
51 b = Proc.new { a += 1 }
52 b.call
53
54 a2 = 0
55 b2 = Proc.new { |i| a2 += i }
56 b2.call(5)
57
58 assert_equal 1, a
59 assert_equal 5, a2
60end
61
62assert('Proc#call proc args pos block') do
63 pr = Proc.new {|a,b,&c|
64 [a, b, c.class, c&&c.call(:x)]
65 }
66 assert_equal [nil, nil, Proc, :proc], (pr.call(){ :proc })
67 assert_equal [1, nil, Proc, :proc], (pr.call(1){ :proc })
68 assert_equal [1, 2, Proc, :proc], (pr.call(1, 2){ :proc })
69 assert_equal [1, 2, Proc, :proc], (pr.call(1, 2, 3){ :proc })
70 assert_equal [1, 2, Proc, :proc], (pr.call(1, 2, 3, 4){ :proc })
71
72 assert_equal [nil, nil, Proc, :x], (pr.call(){|x| x})
73 assert_equal [1, nil, Proc, :x], (pr.call(1){|x| x})
74 assert_equal [1, 2, Proc, :x], (pr.call(1, 2){|x| x})
75 assert_equal [1, 2, Proc, :x], (pr.call(1, 2, 3){|x| x})
76 assert_equal [1, 2, Proc, :x], (pr.call(1, 2, 3, 4){|x| x})
77end
78
79assert('Proc#call proc args pos rest post') do
80 pr = Proc.new {|a,b,*c,d,e|
81 [a,b,c,d,e]
82 }
83 assert_equal [nil, nil, [], nil, nil], pr.call()
84 assert_equal [1, nil, [], nil, nil], pr.call(1)
85 assert_equal [1, 2, [], nil, nil], pr.call(1,2)
86 assert_equal [1, 2, [], 3, nil], pr.call(1,2,3)
87 assert_equal [1, 2, [], 3, 4], pr.call(1,2,3,4)
88 assert_equal [1, 2, [3], 4, 5], pr.call(1,2,3,4,5)
89 assert_equal [1, 2, [3, 4], 5, 6], pr.call(1,2,3,4,5,6)
90 assert_equal [1, 2, [3, 4, 5], 6,7], pr.call(1,2,3,4,5,6,7)
91
92 assert_equal [nil, nil, [], nil, nil], pr.call([])
93 assert_equal [1, nil, [], nil, nil], pr.call([1])
94 assert_equal [1, 2, [], nil, nil], pr.call([1,2])
95 assert_equal [1, 2, [], 3, nil], pr.call([1,2,3])
96 assert_equal [1, 2, [], 3, 4], pr.call([1,2,3,4])
97 assert_equal [1, 2, [3], 4, 5], pr.call([1,2,3,4,5])
98 assert_equal [1, 2, [3, 4], 5, 6], pr.call([1,2,3,4,5,6])
99 assert_equal [1, 2, [3, 4, 5], 6,7], pr.call([1,2,3,4,5,6,7])
100end
101
102assert('Proc#return_does_not_break_self') do
103 class TestClass
104 attr_accessor :block
105 def initialize
106 end
107 def return_array
108 @block = Proc.new { self }
109 return []
110 end
111 def return_instance_variable
112 @block = Proc.new { self }
113 return @block
114 end
115 def return_const_fixnum
116 @block = Proc.new { self }
117 return 123
118 end
119 def return_nil
120 @block = Proc.new { self }
121 return nil
122 end
123 end
124
125 c = TestClass.new
126 assert_equal [], c.return_array
127 assert_equal c, c.block.call
128
129 c.return_instance_variable
130 assert_equal c, c.block.call
131
132 assert_equal 123, c.return_const_fixnum
133 assert_equal c, c.block.call
134
135 assert_equal nil, c.return_nil
136 assert_equal c, c.block.call
137end
138
139assert('call Proc#initialize if defined') do
140 a = []
141 c = Class.new(Proc) do
142 define_method(:initialize) do
143 a << :ok
144 end
145 end
146
147 assert_kind_of c, c.new{}
148 assert_equal [:ok], a
149end
150
151assert('&obj call to_proc if defined') do
152 pr = Proc.new{}
153 def mock(&b)
154 b
155 end
156 assert_equal pr.object_id, mock(&pr).object_id
157 assert_equal pr, mock(&pr)
158
159 obj = Object.new
160 def obj.to_proc
161 Proc.new{ :from_to_proc }
162 end
163 assert_equal :from_to_proc, mock(&obj).call
164
165 assert_raise(TypeError){ mock(&(Object.new)) }
166end
Note: See TracBrowser for help on using the repository browser.