1# empty program
2assert_equal '',                ''
3assert_equal '',                ' '
4assert_equal '',                "\n"
5
6# special const
7assert_equal 'true',            'true'
8assert_equal 'TrueClass',       'true.class'
9assert_equal 'false',           'false'
10assert_equal 'FalseClass',      'false.class'
11assert_equal '',                'nil'
12assert_equal 'nil',             'nil.inspect'
13assert_equal 'NilClass',        'nil.class'
14assert_equal 'sym',             ':sym'
15assert_equal ':sym',            ':sym.inspect'
16assert_equal 'Symbol',          ':sym.class'
17assert_equal '1234',            '1234'
18assert_equal 'Integer',         '1234.class'
19assert_equal '1234',            '1_2_3_4'
20assert_equal 'Integer',         '1_2_3_4.class'
21assert_equal '18',              '0x12'
22assert_equal 'Integer',         '0x12.class'
23assert_equal '15',              '0o17'
24assert_equal 'Integer',         '0o17.class'
25assert_equal '5',               '0b101'
26assert_equal 'Integer',         '0b101.class'
27assert_equal '123456789012345678901234567890', '123456789012345678901234567890'
28assert_equal 'Integer',         '123456789012345678901234567890.class'
29assert_equal '2.0',             '2.0'
30assert_equal 'Float',           '1.3.class'
31
32# self
33assert_equal 'main',            'self'
34assert_equal 'Object',          'self.class'
35
36# string literal
37assert_equal 'a',               '?a'
38assert_equal 'String',          '?a.class'
39assert_equal 'A',               '?A'
40assert_equal 'String',          '?A.class'
41assert_equal "\n",              '?\n'
42assert_equal 'String',          '?\n.class'
43assert_equal ' ',               '?\ '
44assert_equal 'String',          '?\ .class'
45assert_equal 'string',          "'string'"
46assert_equal 'string',          '"string"'
47assert_equal 'string',          '%(string)'
48assert_equal 'string',          '%q(string)'
49assert_equal 'string',          '%Q(string)'
50assert_equal 'string string',   '"string string"'
51assert_equal ' ',               '" "'
52assert_equal "\0",              '"\0"'
53assert_equal "\1",              '"\1"'
54assert_equal "3",               '"\x33"'
55assert_equal "\n",              '"\n"'
56
57# dynamic string literal
58assert_equal '2',               '"#{1 + 1}"'
59assert_equal '16',              '"#{2 ** 4}"'
60assert_equal 'string',          's = "string"; "#{s}"'
61
62# dynamic symbol literal
63assert_equal 'a3c',             ':"a#{1+2}c"'
64assert_equal ':a3c',            ':"a#{1+2}c".inspect'
65assert_equal 'Symbol',          ':"a#{1+2}c".class'
66
67# xstring
68assert_equal "foo\n",           %q(`echo foo`)
69assert_equal "foo\n",           %q(s = "foo"; `echo #{s}`)
70
71# regexp
72assert_equal '',                '//.source'
73assert_equal 'Regexp',          '//.class'
74assert_equal '0',               '// =~ "a"'
75assert_equal '0',               '// =~ ""'
76assert_equal 'a',               '/a/.source'
77assert_equal 'Regexp',          '/a/.class'
78assert_equal '0',               '/a/ =~ "a"'
79assert_equal '0',               '/test/ =~ "test"'
80assert_equal '',                '/test/ =~ "tes"'
81assert_equal '0',               're = /test/; re =~ "test"'
82assert_equal '0',               'str = "test"; /test/ =~ str'
83assert_equal '0',               're = /test/; str = "test"; re =~ str'
84
85# dynamic regexp
86assert_equal 'regexp',          %q(/re#{'ge'}xp/.source)
87assert_equal 'Regexp',          %q(/re#{'ge'}xp/.class)
88
89# array
90assert_equal 'Array',           '[].class'
91assert_equal '0',               '[].size'
92assert_equal '0',               '[].length'
93assert_equal '[]',              '[].inspect'
94assert_equal 'Array',           '[0].class'
95assert_equal '1',               '[3].size'
96assert_equal '[3]',             '[3].inspect'
97assert_equal '3',               'a = [3]; a[0]'
98assert_equal 'Array',           '[1,2].class'
99assert_equal '2',               '[1,2].size'
100assert_equal '[1, 2]',          '[1,2].inspect'
101assert_equal 'Array',           '[1,2,3,4,5].class'
102assert_equal '5',               '[1,2,3,4,5].size'
103assert_equal '[1, 2, 3, 4, 5]', '[1,2,3,4,5].inspect'
104assert_equal '1',               'a = [1,2]; a[0]'
105assert_equal '2',               'a = [1,2]; a[1]'
106assert_equal 'Array',           'a = [1 + 2, 3 + 4, 5 + 6]; a.class'
107assert_equal '[3, 7, 11]',      'a = [1 + 2, 3 + 4, 5 + 6]; a.inspect'
108assert_equal '7',               'a = [1 + 2, 3 + 4, 5 + 6]; a[1]'
109assert_equal '1',               '([0][0] += 1)'
110assert_equal '1',               '([2][0] -= 1)'
111assert_equal 'Array',           'a = [obj = Object.new]; a.class'
112assert_equal '1',               'a = [obj = Object.new]; a.size'
113assert_equal 'true',            'a = [obj = Object.new]; a[0] == obj'
114assert_equal '5',               'a = [1,2,3]; a[1] = 5; a[1]'
115assert_equal 'bar',             '[*:foo];:bar'
116assert_equal '[1, 2]',          'def nil.to_a; [2]; end; [1, *nil]'
117assert_equal '[1, 2]',          'def nil.to_a; [1, 2]; end; [*nil]'
118assert_equal '[0, 1, {2=>3}]',  '[0, *[1], 2=>3]', "[ruby-dev:31592]"
119
120
121# hash
122assert_equal 'Hash',            '{}.class'
123assert_equal '{}',              '{}.inspect'
124assert_equal 'Hash',            '{1=>2}.class'
125assert_equal '{1=>2}',          '{1=>2}.inspect'
126assert_equal '2',               'h = {1 => 2}; h[1]'
127assert_equal '0',               'h = {1 => 2}; h.delete(1); h.size'
128assert_equal '',                'h = {1 => 2}; h.delete(1); h[1]'
129assert_equal '2',               'h = {"string" => "literal", "goto" => "hell"}; h.size'
130assert_equal 'literal', 'h = {"string"=>"literal", "goto"=>"hell"}; h["string"]'
131assert_equal 'hell', 'h = {"string"=>"literal", "goto"=>"hell"}; h["goto"]'
132
133# range
134assert_equal 'Range',           '(1..2).class'
135assert_equal '1..2',            '(1..2).inspect'
136assert_equal '1',               '(1..2).begin'
137assert_equal '2',               '(1..2).end'
138assert_equal 'false',           '(1..2).exclude_end?'
139assert_equal 'Range',           'r = 1..2; r.class'
140assert_equal '1..2',            'r = 1..2; r.inspect'
141assert_equal '1',               'r = 1..2; r.begin'
142assert_equal '2',               'r = 1..2; r.end'
143assert_equal 'false',           'r = 1..2; r.exclude_end?'
144assert_equal 'Range',           '(1...3).class'
145assert_equal '1...3',           '(1...3).inspect'
146assert_equal '1',               '(1...3).begin'
147assert_equal '3',               '(1...3).end'
148assert_equal 'true',            '(1...3).exclude_end?'
149assert_equal 'Range',           'r = (1...3); r.class'
150assert_equal '1...3',           'r = (1...3); r.inspect'
151assert_equal '1',               'r = (1...3); r.begin'
152assert_equal '3',               'r = (1...3); r.end'
153assert_equal 'true',            'r = (1...3); r.exclude_end?'
154assert_equal 'Range',           'r = (1+2 .. 3+4); r.class'
155assert_equal '3..7',            'r = (1+2 .. 3+4); r.inspect'
156assert_equal '3',               'r = (1+2 .. 3+4); r.begin'
157assert_equal '7',               'r = (1+2 .. 3+4); r.end'
158assert_equal 'false',           'r = (1+2 .. 3+4); r.exclude_end?'
159assert_equal 'Range',           'r = (1+2 ... 3+4); r.class'
160assert_equal '3...7',           'r = (1+2 ... 3+4); r.inspect'
161assert_equal '3',               'r = (1+2 ... 3+4); r.begin'
162assert_equal '7',               'r = (1+2 ... 3+4); r.end'
163assert_equal 'true',            'r = (1+2 ... 3+4); r.exclude_end?'
164assert_equal 'Range',           'r = ("a".."c"); r.class'
165assert_equal '"a".."c"',        'r = ("a".."c"); r.inspect'
166assert_equal 'a',               'r = ("a".."c"); r.begin'
167assert_equal 'c',               'r = ("a".."c"); r.end'
168
169assert_equal 'String',          '__FILE__.class'
170assert_equal 'Integer',         '__LINE__.class'
171
172###
173
174assert_equal 'ok', %q{
175  # this cause "called on terminated object".
176  ObjectSpace.each_object(Module) {|m| m.name.inspect }
177  :ok
178}
179
180assert_normal_exit %q{
181  begin
182    r = 0**-1
183    r + r
184  rescue
185  end
186}, '[ruby-dev:34524]'
187
188assert_normal_exit %q{
189  begin
190    r = Marshal.load("\x04\bU:\rRational[\ai\x06i\x05")
191    r + r
192  rescue
193  end
194}, '[ruby-dev:34536]'
195
196assert_equal 'ok', %q{
197  "#{}""#{}ok"
198}, '[ruby-dev:38968]'
199
200assert_equal 'ok', %q{
201  "#{}o""#{}k""#{}"
202}, '[ruby-core:25284]'
203
204assert_equal 'ok', %q{ #  long array literal
205  x = nil
206  eval "a = [#{(1..10_000).map{'x'}.join(", ")}]"
207  :ok
208}
209
210assert_equal 'ok', %q{ #  long array literal (optimized)
211  eval "a = [#{(1..10_000).to_a.join(", ")}]"
212  :ok
213}
214
215assert_equal 'ok', %q{ #  long hash literal
216  x = nil
217  eval "a = {#{(1..10_000).map{|n| "#{n} => x"}.join(', ')}}"
218  :ok
219}
220
221assert_equal 'ok', %q{ #  long hash literal (optimized)
222  eval "a = {#{(1..10_000).map{|n| "#{n} => #{n}"}.join(', ')}}"
223  :ok
224}
225
226assert_equal 'ok', %q{ #  Bug #15536
227  eval <<-END
228    {
229      **{
230        a0: nil, a1: nil, a2: nil, a3: nil, a4: nil, a5: nil, a6: nil, a7: nil, a8: nil,
231      },
232      a0: nil, a1: nil, a2: nil, a3: nil, a4: nil, a5: nil, a6: nil, a7: nil, a8: nil,
233      **{
234        c: nil
235      },
236      b0: nil, b1: nil, b2: nil, b3: nil, b4: nil, b5: nil, b6: nil, b7: nil, b8: nil,
237      b9: nil, b10: nil, b11: nil, b12: nil, b13: nil, b14: nil, b15: nil, b16: nil,
238      b17: nil, b18: nil, b19: nil, b20: nil, b21: nil,
239    }
240  END
241  :ok
242}
243
244assert_equal 'ok', %q{
245  [print(:ok), exit] # void literal with side-effect
246  :dummy
247}
248