source: EcnlProtoTool/trunk/mruby-2.1.1/test/t/codegen.rb@ 439

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

mrubyを2.1.1に更新

  • Property svn:eol-style set to native
  • Property svn:mime-type set to text/x-ruby
File size: 5.0 KB
Line 
1##
2# Codegen tests
3
4assert('peephole optimization does not eliminate move whose result is reused') do
5 assert_raise LocalJumpError do
6 def method
7 yield
8 end
9 method(&a &&= 0)
10 end
11end
12
13assert('empty condition in ternary expression parses correctly') do
14 assert_equal(() ? 1 : 2, 2)
15end
16
17assert('method call with exactly 127 arguments') do
18 def args_to_ary(*args)
19 args
20 end
21
22 assert_equal [0]*127, args_to_ary(
23 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, \
24 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, \
25 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, \
26 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, \
27 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, \
28 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
29 )
30end
31
32assert('nested empty heredoc') do
33 _, a = nil, <<B
34#{<<A}
35A
36B
37 assert_equal "\n", a
38end
39
40assert('splat in case splat') do
41 a = *case
42 when 0
43 * = 1
44 end
45
46 assert_equal [1], a
47end
48
49assert('undef with 127 or more arguments') do
50 assert_raise NameError do
51 undef
52 a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
53 a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
54 a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a,
55 a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a
56 end
57end
58
59assert('next in normal loop with 127 arguments') do
60 assert_raise NameError do
61 while true
62 next A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A
63 end
64 end
65end
66
67assert('negate literal register alignment') do
68 a = *case
69 when 0
70 -0.0
71 2
72 end
73
74 assert_equal [2], a
75end
76
77assert('register window of calls (#3783)') do
78 # NODE_FOR
79 assert_nothing_raised do
80 for i in []; end
81 end
82
83 # NODE_SYMBOLS
84 assert_nothing_raised do
85 %i(sym)
86 end
87
88 # NODE_SCALL
89 assert_nothing_raised do
90 Object.new&.__id__
91 end
92
93 # NODE_RESCUE with splat
94 assert_nothing_raised do
95 begin
96 raise
97 rescue *[Exception]
98 end
99 end
100
101 # NODE_CASE
102 assert_nothing_raised do
103 case 1
104 when nil
105 end
106 end
107
108 # NODE_CASE with splat
109 assert_nothing_raised do
110 case 1
111 when *nil
112 end
113 end
114
115 # NODE_HASH
116 assert_nothing_raised do
117 {}.merge(
118 0=>0, 1=>1, 2=>2, 3=>3, 4=>4, 5=>5, 6=>6, 7=>7, 8=>8, 9=>9,
119 10=>10, 11=>11, 12=>12, 13=>13, 14=>14, 15=>15, 16=>16, 17=>17, 18=>18, 19=>19,
120 20=>20, 21=>21, 22=>22, 23=>23, 24=>24, 25=>25, 26=>26, 27=>27, 28=>28, 29=>29,
121 30=>30, 31=>31, 32=>32, 33=>33, 34=>34, 35=>35, 36=>36, 37=>37, 38=>38, 39=>39,
122 40=>40, 41=>41, 42=>42, 43=>43, 44=>44, 45=>45, 46=>46, 47=>47, 48=>48, 49=>49,
123 50=>50, 51=>51, 52=>52, 53=>53, 54=>54, 55=>55, 56=>56, 57=>57, 58=>58, 59=>59,
124 60=>60, 61=>61, 62=>62, 63=>63, 64=>64, 65=>65, 66=>66, 67=>67, 68=>68, 69=>69,
125 70=>70, 71=>71, 72=>72, 73=>73, 74=>74, 75=>75, 76=>76, 77=>77, 78=>78, 79=>79,
126 80=>80, 81=>81, 82=>82, 83=>83, 84=>84, 85=>85, 86=>86, 87=>87, 88=>88, 89=>89,
127 90=>90, 91=>91, 92=>92, 93=>93, 94=>94, 95=>95, 96=>96, 97=>97, 98=>98, 99=>99,
128 100=>100, 101=>101, 102=>102, 103=>103, 104=>104, 105=>105, 106=>106, 107=>107, 108=>108, 109=>109,
129 110=>110, 111=>111, 112=>112, 113=>113, 114=>114, 115=>115, 116=>116, 117=>117, 118=>118, 119=>119,
130 120=>120, 121=>121, 122=>122, 123=>123, 124=>124, 125=>125, 126=>126)
131 end
132
133 # NODE_OP_ASGN
134 o = Object.new
135 class << o
136 attr_accessor :a
137 end
138
139 o.a = 1
140 assert_nothing_raised{ o.a += 1 }
141 o.a = 1
142 assert_nothing_raised{ o.a <<= 1 }
143 o.a = 1
144 assert_nothing_raised{ o.a &&= 1 }
145
146 o = { k: 1 }
147 assert_nothing_raised{ o[:k] += 1 }
148 o = { k: 1 }
149 assert_nothing_raised{ o[:k] <<= 1 }
150 o = { k: 1 }
151 assert_nothing_raised{ o[:k] &&= 1 }
152
153 o = { k: 1 }
154 assert_nothing_raised{ o[*[:k]] += 1 }
155 o = { k: 1 }
156 assert_nothing_raised{ o[*[:k]] <<= 1 }
157 o = { k: 1 }
158 assert_nothing_raised{ o[*[:k]] &&= 1 }
159
160 # NODE_YIELD
161 def check_node_yield
162 yield
163 end
164 assert_nothing_raised do
165 check_node_yield{}
166 end
167
168 # NODE_DXSTR
169 assert_raise(NotImplementedError){ `#{:dynamic}` }
170
171 # NODE_XSTR
172 assert_raise(NotImplementedError){ `static` }
173
174 # NODE_DREGX
175 class Regexp; end
176 assert_raise(NoMethodError){ /#{'dynamic'}tail/ }
177 assert_raise(NoMethodError){ /#{'dynamic'}tail/iu }
178
179 # NODE_REGX
180 assert_raise(NoMethodError){ /static/ }
181 assert_raise(NoMethodError){ /static/iu }
182 Object.remove_const :Regexp
183
184 # NODE_UNDEF
185 assert_nothing_raised do
186 class << Object.new
187 undef inspect
188 end
189 end
190
191 # NODE_ALIAS
192 assert_nothing_raised do
193 class << Object.new
194 alias inspect2 inspect
195 end
196 end
197end
Note: See TracBrowser for help on using the repository browser.