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