1require 'test/unit' 2 3ConstTest = 3 4class Class 5 alias _remove_const remove_const 6 public :_remove_const 7end 8 9class TestBasicInstructions < Test::Unit::TestCase 10 11 def test_immediates 12 assert_equal((1==1), true) 13 assert_equal((1==2), false) 14 assert_equal [][0], nil 15 assert_equal "sym".intern, :sym 16 assert_equal "sym".intern, :"sym" 17 assert_equal 1234 + 0, 1234 18 assert_equal 1234, 1_2_3_4 19 assert_equal 41, 0b0101001 20 assert_equal 420, 0644 21 assert_equal 18, 0x12 22 assert_equal 123456789012345678901234567890 + 0, 23 123456789012345678901234567890 24 assert_equal 1.234 + 0.0, 1.234 25 end 26 27 def test_self 28 assert_equal self, self 29 assert_equal false, (self == false) # Qfalse==0 in C 30 assert_equal false, (self == nil) 31 assert_equal false, (self == 0) 32 end 33 34 def test_string 35 expected = "str" + "ing" 36 assert_equal expected, 'string' 37 assert_equal expected, "string" 38 assert_equal expected, %q(string) 39 assert_equal expected, %Q(string) 40 assert_equal expected, %(string) 41 end 42 43 def test_dstring 44 assert_equal "2", "#{1+1}" 45 s = "OK" 46 assert_equal "OK", "#{s}" 47 assert_equal "OKx", "#{s}x" 48 assert_equal "xOK", "x#{s}" 49 assert_equal "xOKx", "x#{s}x" 50 end 51 52 def test_dsym 53 assert_equal :a3c, :"a#{1+2}c" 54 s = "sym" 55 assert_equal :sym, :"#{s}" 56 assert_equal :sym, :"#{"#{"#{s}"}"}" 57 end 58 59 def test_xstr 60 assert_equal 'hoge', `echo hoge`.chomp 61 assert_equal '3', `echo #{1 + 2}`.chomp 62 hoge = 'huga' 63 assert_equal 'huga', `echo #{hoge}`.chomp 64 end 65 66 def test_regexp 67 assert_equal(/test/, /test/) 68 assert_equal 'test', /test/.source 69 assert_equal 'TEST', /TEST/.source 70 assert_equal true, !!(/test/ =~ 'test') 71 assert_equal false, !!(/test/ =~ 'does not match') 72 73 re = /test/ 74 assert_equal re, re 75 assert_equal 'test', re.source 76 assert_equal true, !!(re =~ 'test') 77 assert_equal false, !!(re =~ 'does not match') 78 79 assert_equal(/x#{1+1}x/, /x#{1+1}x/) 80 s = "OK" 81 assert_equal(/x#{s}x/, /x#{s}x/) 82 assert_equal true, !!(/x#{s}x/ =~ "xOKx") 83 assert_equal false, !!(/x#{s}x/ =~ "does not match") 84 85 s = "OK" 86 prev = nil 87 3.times do 88 re = /#{s}/o 89 assert_same prev, re if prev 90 prev = re 91 end 92 end 93 94 def test_array 95 assert_equal [], [] 96 assert_equal 0, [].size 97 assert_equal [1, 2, 3], [1, 2, 3] 98 assert_equal [3, 7, 11], [1+2, 3+4, 5+6] 99 assert_equal [[1], [2], [3]], [[1], [2], [3]] 100 101 a = [1, 2, 3] 102 assert_equal 1, a[0] 103 assert_equal 2, a[1] 104 assert_equal 3, a[2] 105 assert_nil a[3] 106 107 a = %w( a b c ) 108 assert_equal 'a', a[0] 109 assert_equal 'b', a[1] 110 assert_equal 'c', a[2] 111 assert_nil a[3] 112 end 113 114 def test_hash 115 assert_equal({}, {}) 116 assert_equal({1=>2}, {1=>2}) 117 assert_equal({1=>2, 3=>4}, {1=>2, 3=>4}) 118 assert_equal({1=>2, 3=>4}, {3=>4, 1=>2}) 119 # assert_equal({1=>2, 3=>4}, {1,2, 3,4}) # 1.9 doesn't support 120 assert_equal({"key"=>"val"}, {"key"=>"val"}) 121 end 122 123 def test_range 124 assert_equal((1..3), (1..3)) 125 assert_equal((1...3), (1...3)) 126 assert_not_equal((1...3), (1..3)) 127 assert_not_equal((1..3), (1...3)) 128 assert_equal((1..3), (1..2+1)) 129 assert_equal((1...3), (1...2+1)) 130 assert_equal(('a'..'z'), ('a'..'z')) 131 end 132 133 def test_not 134 assert_equal true, !nil 135 assert_equal true, !false 136 assert_equal false, !true 137 assert_equal false, !3 138 assert_equal false, !(1+1) 139 140 assert_equal false, !!nil 141 assert_equal false, !!false 142 assert_equal true, !!true 143 assert_equal true, !!3 144 assert_equal true, !!(1+1) 145 146 assert_equal true, (not nil) 147 assert_equal true, (not false) 148 assert_equal false, (not true) 149 assert_equal false, (not 3) 150 assert_equal false, (not (1 + 1)) 151 152 assert_equal false, (not not nil) 153 assert_equal false, (not not false) 154 assert_equal true, (not not true) 155 assert_equal true, (not not 3) 156 assert_equal true, (not not (1+1)) 157 end 158 159 def test_local_variable 160 a = 7 161 assert_equal 7, a 162 assert_equal a, a 163 b = 17 164 assert_equal 7, a 165 assert_equal 17, b 166 assert_equal a, a 167 assert_equal b, b 168 assert_not_equal a, b 169 assert_not_equal b, a 170 a = b 171 assert_equal 17, a 172 assert_equal 17, b 173 assert_equal a, a 174 assert_equal b, b 175 assert_equal a, b 176 assert_equal b, a 177 c = 28 178 assert_equal 17, a 179 assert_equal 17, b 180 assert_equal 28, c 181 assert_equal a, a 182 assert_equal b, b 183 assert_equal a, b 184 assert_equal c, c 185 assert_not_equal a, c 186 assert_not_equal b, c 187 a = b = c 188 assert_equal 28, a 189 assert_equal 28, b 190 assert_equal 28, c 191 assert_equal a, a 192 assert_equal b, b 193 assert_equal a, b 194 assert_equal b, a 195 assert_equal a, c 196 assert_equal c, a 197 assert_equal b, c 198 assert_equal c, b 199 200 a = 1 201 b = 2 202 c = 3 203 set_lvar_in_another_method 204 assert_equal 1, a 205 assert_equal 2, b 206 assert_equal 3, c 207 end 208 209 def set_lvar_in_another_method 210 assert_raise(NameError) { a } 211 assert_raise(NameError) { b } 212 assert_raise(NameError) { c } 213 a = "NOT OK" 214 b = "NOT OK" 215 c = "NOT OK" 216 end 217 218 class Const 219 $Const = self 220 C = 'Const::C' 221 def self.c() C end 222 def c() C end 223 224 class A 225 C = 'Const::A::C' 226 def self.c() C end 227 def c() C end 228 CC = 'Const::A::CC' 229 def self.cc() CC end 230 def cc() CC end 231 232 class B 233 C = 'Const::A::B::C' 234 def self.c() C end 235 def c() C end 236 def self.cc() CC end 237 def cc() CC end 238 end 239 end 240 241 class AA < A 242 def self.cc() CC end 243 def cc() CC end 244 end 245 246 class AAA < AA 247 def self.cc() CC end 248 def cc() CC end 249 end 250 end 251 C = 0 252 253 def test_const_path 254 do_test_const_path 255 do_test_const_path 256 do_test_const_path 257 end 258 259 def do_test_const_path 260 assert_equal 0, C 261 assert_equal 0, C 262 assert_equal 3, ::ConstTest 263 assert_equal 3, ::ConstTest 264 assert_equal $Const, Const 265 266 assert_equal 'Const::C', Const::C 267 assert_equal 'Const::C', Const::C 268 assert_equal 'Const::A::C', Const::A::C 269 assert_equal 'Const::A::C', Const::A::C 270 assert_equal 'Const::A::B::C', Const::A::B::C 271 assert_equal 'Const::A::B::C', Const::A::B::C 272 273 Const::A::B._remove_const :C 274 assert_equal 'Const::C', Const::C 275 assert_equal 'Const::A::C', Const::A::C 276 assert_raise(NameError) { Const::A::B::C } 277 278 Const::A._remove_const :C 279 assert_equal 'Const::C', Const::C 280 assert_raise(NameError) { Const::A::C } 281 assert_raise(NameError) { Const::A::B::C } 282 283 Const._remove_const :C 284 assert_raise(NameError) { Const::C } 285 assert_raise(NameError) { Const::A::C } 286 assert_raise(NameError) { Const::A::B::C } 287 288 Const::A.const_set :C, 'Const::A::C' 289 assert_raise(NameError) { Const::C } 290 assert_equal 'Const::A::C', Const::A::C 291 assert_raise(NameError) { Const::A::B::C } 292 293 Const::A::B.const_set :C, 'Const::A::B::C' 294 assert_raise(NameError) { Const::C } 295 assert_equal 'Const::A::C', Const::A::C 296 assert_equal 'Const::A::B::C', Const::A::B::C 297 298 Const.const_set :C, 'Const::C' 299 assert_equal 'Const::C', Const::C 300 assert_equal 'Const::A::C', Const::A::C 301 assert_equal 'Const::A::B::C', Const::A::B::C 302 end 303 304 def test_const_cref 305 do_test_const_cref 306 do_test_const_cref 307 do_test_const_cref 308 end 309 310 def do_test_const_cref 311 assert_equal 'Const::C', Const.new.c 312 assert_equal 'Const::A::C', Const::A.new.c 313 assert_equal 'Const::A::B::C', Const::A::B.new.c 314 315 assert_equal 'Const::C', Const.c 316 assert_equal 'Const::A::C', Const::A.c 317 assert_equal 'Const::A::B::C', Const::A::B.c 318 319 Const::A::B._remove_const :C 320 assert_equal 'Const::C', Const.c 321 assert_equal 'Const::A::C', Const::A.c 322 assert_equal 'Const::A::C', Const::A::B.c 323 assert_equal 'Const::C', Const.new.c 324 assert_equal 'Const::A::C', Const::A.new.c 325 assert_equal 'Const::A::C', Const::A::B.new.c 326 327 Const::A._remove_const :C 328 assert_equal 'Const::C', Const.c 329 assert_equal 'Const::C', Const::A.c 330 assert_equal 'Const::C', Const::A::B.c 331 assert_equal 'Const::C', Const.new.c 332 assert_equal 'Const::C', Const::A.new.c 333 assert_equal 'Const::C', Const::A::B.new.c 334 335 Const::A::B.const_set :C, 'Const::A::B::C' 336 assert_equal 'Const::C', Const.c 337 assert_equal 'Const::C', Const::A.c 338 assert_equal 'Const::A::B::C', Const::A::B.c 339 assert_equal 'Const::C', Const.new.c 340 assert_equal 'Const::C', Const::A.new.c 341 assert_equal 'Const::A::B::C', Const::A::B.new.c 342 343 Const::A.const_set :C, 'Const::A::C' 344 assert_equal 'Const::C', Const.c 345 assert_equal 'Const::A::C', Const::A.c 346 assert_equal 'Const::A::B::C', Const::A::B.c 347 assert_equal 'Const::C', Const.new.c 348 assert_equal 'Const::A::C', Const::A.new.c 349 assert_equal 'Const::A::B::C', Const::A::B.new.c 350 ensure 351 # reset 352 Const.const_set :C, 'Const::C' unless Const.const_defined?(:C) 353 Const::A.const_set :C, 'Const::A::C' unless Const::A.const_defined?(:C) 354 Const::A::B.const_set :C, 'Const::A::B::C' unless Const::A::B.const_defined?(:C) 355 end 356 357 def test_const_inherit 358 do_test_const_inherit 359 do_test_const_inherit 360 do_test_const_inherit 361 end 362 363 def do_test_const_inherit 364 assert_equal 'Const::A::CC', Const::A.cc 365 assert_equal 'Const::A::CC', Const::AA.cc 366 assert_equal 'Const::A::CC', Const::AAA.cc 367 assert_equal 'Const::A::CC', Const::A.new.cc 368 assert_equal 'Const::A::CC', Const::AA.new.cc 369 assert_equal 'Const::A::CC', Const::AAA.new.cc 370 371 Const::AA.const_set :CC, 'Const::AA::CC' 372 assert_equal 'Const::A::CC', Const::A.cc 373 assert_equal 'Const::AA::CC', Const::AA.cc 374 assert_equal 'Const::AA::CC', Const::AAA.cc 375 assert_equal 'Const::A::CC', Const::A.new.cc 376 assert_equal 'Const::AA::CC', Const::AA.new.cc 377 assert_equal 'Const::AA::CC', Const::AAA.new.cc 378 379 Const::AAA.const_set :CC, 'Const::AAA::CC' 380 assert_equal 'Const::A::CC', Const::A.cc 381 assert_equal 'Const::AA::CC', Const::AA.cc 382 assert_equal 'Const::AAA::CC', Const::AAA.cc 383 assert_equal 'Const::A::CC', Const::A.new.cc 384 assert_equal 'Const::AA::CC', Const::AA.new.cc 385 assert_equal 'Const::AAA::CC', Const::AAA.new.cc 386 387 Const::AA._remove_const :CC 388 assert_equal 'Const::A::CC', Const::A.cc 389 assert_equal 'Const::A::CC', Const::AA.cc 390 assert_equal 'Const::AAA::CC', Const::AAA.cc 391 assert_equal 'Const::A::CC', Const::A.new.cc 392 assert_equal 'Const::A::CC', Const::AA.new.cc 393 assert_equal 'Const::AAA::CC', Const::AAA.new.cc 394 395 Const::AAA._remove_const :CC 396 assert_equal 'Const::A::CC', Const::A.cc 397 assert_equal 'Const::A::CC', Const::AA.cc 398 assert_equal 'Const::A::CC', Const::AAA.cc 399 assert_equal 'Const::A::CC', Const::A.new.cc 400 assert_equal 'Const::A::CC', Const::AA.new.cc 401 assert_equal 'Const::A::CC', Const::AAA.new.cc 402 end 403 404 def test_global_variable 405 $gvar1 = 1 406 assert_equal 1, $gvar1 407 $gvar1 = 2 408 assert_equal 2, $gvar1 409 $gvar2 = 77 410 assert_equal 2, $gvar1 411 assert_equal 77, $gvar2 412 $gvar2 = $gvar1 413 assert_equal 2, $gvar1 414 assert_equal 2, $gvar2 415 $gvar1 = 1 416 assert_equal 1, $gvar1 417 assert_equal 2, $gvar2 418 set_gvar_in_another_method 419 assert_equal "OK1", $gvar1 420 assert_equal "OK2", $gvar2 421 end 422 423 def set_gvar_in_another_method 424 assert_equal 1, $gvar1 425 assert_equal 2, $gvar2 426 $gvar1 = "OK1" 427 $gvar2 = "OK2" 428 end 429 430 class CVarA 431 @@cv = 'CVarA@@cv' 432 def self.cv() @@cv end 433 def self.cv=(v) @@cv = v end 434 class << self 435 def cv2() @@cv end 436 end 437 def cv() @@cv end 438 def cv=(v) @@cv = v end 439 end 440 441 class CVarB < CVarA 442 def self.cvB() @@cv end 443 def self.cvB=(v) @@cv = v end 444 class << self 445 def cvB2() @@cv end 446 end 447 def cvB() @@cv end 448 def cvB=(v) @@cv = v end 449 end 450 451 def test_class_variable 452 assert_equal 'CVarA@@cv', CVarA.cv 453 assert_equal 'CVarA@@cv', CVarA.cv2 454 assert_equal 'CVarA@@cv', CVarA.new.cv 455 CVarA.cv = 'singleton' 456 assert_equal 'singleton', CVarA.cv 457 assert_equal 'singleton', CVarA.cv2 458 assert_equal 'singleton', CVarA.new.cv 459 CVarA.new.cv = 'instance' 460 assert_equal 'instance', CVarA.cv 461 assert_equal 'instance', CVarA.cv2 462 assert_equal 'instance', CVarA.new.cv 463 464 CVarA.cv = 'CVarA@@cv' 465 CVarB.cv = 'B/singleton' 466 assert_equal 'B/singleton', CVarB.cv 467 assert_equal 'B/singleton', CVarB.cv2 468 assert_equal 'B/singleton', CVarB.new.cv 469 assert_equal 'B/singleton', CVarA.cv 470 assert_equal 'B/singleton', CVarA.cv2 471 assert_equal 'B/singleton', CVarA.new.cv 472 CVarB.new.cv = 'B/instance' 473 assert_equal 'B/instance', CVarB.cv 474 assert_equal 'B/instance', CVarB.cv2 475 assert_equal 'B/instance', CVarB.new.cv 476 assert_equal 'B/instance', CVarA.cv 477 assert_equal 'B/instance', CVarA.cv2 478 assert_equal 'B/instance', CVarA.new.cv 479 480 CVarA.cv = 'CVarA@@cv' 481 assert_equal('CVarA@@cv', CVarB.cvB) 482 assert_equal('CVarA@@cv', CVarB.cvB2) 483 assert_equal('CVarA@@cv', CVarB.new.cvB) 484 CVarB.cvB = 'B/singleton' 485 assert_equal 'B/singleton', CVarB.cvB 486 assert_equal 'B/singleton', CVarB.cvB2 487 assert_equal 'B/singleton', CVarB.new.cvB 488 assert_equal 'B/singleton', CVarA.cv 489 assert_equal 'B/singleton', CVarA.cv2 490 assert_equal 'B/singleton', CVarA.new.cv 491 CVarB.new.cvB = 'B/instance' 492 assert_equal 'B/instance', CVarB.cvB 493 assert_equal 'B/instance', CVarB.cvB2 494 assert_equal 'B/instance', CVarB.new.cvB 495 assert_equal 'B/instance', CVarA.cv 496 assert_equal 'B/instance', CVarA.cv2 497 assert_equal 'B/instance', CVarA.new.cv 498 499 CVarA.cv = 'CVarA@@cv' 500 CVarB.cvB = 'CVarB@@cv' 501 end 502 503 class OP 504 attr_reader :x 505 attr_accessor :foo 506 def x=(x) 507 @x = x 508 :Bug1996 509 end 510 Bug1996 = '[ruby-dev:39163], [ruby-core:25143]' 511 def [](i) 512 @x 513 end 514 def []=(i, x) 515 @x = x 516 :Bug2050 517 end 518 Bug2050 = '[ruby-core:25387]' 519 end 520 521 def test_opassign2_1 522 x = nil 523 assert_equal 1, x ||= 1 524 assert_equal 1, x 525 assert_equal 2, x &&= 2 526 assert_equal 2, x 527 assert_equal 2, x ||= 3 528 assert_equal 2, x 529 assert_equal 4, x &&= 4 530 assert_equal 4, x 531 assert_equal 5, x += 1 532 assert_equal 5, x 533 assert_equal 4, x -= 1 534 assert_equal 4, x 535 end 536 537 def test_opassign2_2 538 y = OP.new 539 y.x = nil 540 assert_equal 1, y.x ||= 1, OP::Bug1996 541 assert_equal 1, y.x 542 assert_equal 2, y.x &&= 2, OP::Bug1996 543 assert_equal 2, y.x 544 assert_equal 2, y.x ||= 3 545 assert_equal 2, y.x 546 assert_equal 4, y.x &&= 4, OP::Bug1996 547 assert_equal 4, y.x 548 assert_equal 5, y.x += 1, OP::Bug1996 549 assert_equal 5, y.x 550 assert_equal 4, y.x -= 1, OP::Bug1996 551 assert_equal 4, y.x 552 end 553 554 def test_opassign2_3 555 z = OP.new 556 z.x = OP.new 557 z.x.x = nil 558 assert_equal 1, z.x.x ||= 1, OP::Bug1996 559 assert_equal 1, z.x.x 560 assert_equal 2, z.x.x &&= 2, OP::Bug1996 561 assert_equal 2, z.x.x 562 assert_equal 2, z.x.x ||= 3 563 assert_equal 2, z.x.x 564 assert_equal 4, z.x.x &&= 4, OP::Bug1996 565 assert_equal 4, z.x.x 566 assert_equal 5, z.x.x += 1, OP::Bug1996 567 assert_equal 5, z.x.x 568 assert_equal 4, z.x.x -= 1, OP::Bug1996 569 assert_equal 4, z.x.x 570 end 571 572 def test_opassign1_1 573 a = [] 574 a[0] = nil 575 assert_equal 1, a[0] ||= 1 576 assert_equal 1, a[0] 577 assert_equal 2, a[0] &&= 2 578 assert_equal 2, a[0] 579 assert_equal 2, a[0] ||= 3 580 assert_equal 2, a[0] 581 assert_equal 4, a[0] &&= 4 582 assert_equal 4, a[0] 583 assert_equal 5, a[0] += 1 584 assert_equal 5, a[0] 585 assert_equal 4, a[0] -= 1 586 assert_equal 4, a[0] 587 end 588 589 def test_opassign1_2 590 x = OP.new 591 x[0] = nil 592 assert_equal 1, x[0] ||= 1, OP::Bug2050 593 assert_equal 1, x[0] 594 assert_equal 2, x[0] &&= 2, OP::Bug2050 595 assert_equal 2, x[0] 596 assert_equal 2, x[0] ||= 3, OP::Bug2050 597 assert_equal 2, x[0] 598 assert_equal 4, x[0] &&= 4, OP::Bug2050 599 assert_equal 4, x[0] 600 assert_equal 5, x[0] += 1, OP::Bug2050 601 assert_equal 5, x[0] 602 assert_equal 4, x[0] -= 1, OP::Bug2050 603 assert_equal 4, x[0] 604 end 605 606 def test_send_opassign 607 return if defined?(RUBY_ENGINE) and RUBY_ENGINE != "ruby" 608 609 bug7773 = '[ruby-core:51821]' 610 x = OP.new 611 assert_equal 42, x.foo = 42, bug7773 612 assert_equal 42, x.foo, bug7773 613 assert_equal -6, x.send(:foo=, -6), bug7773 614 assert_equal -6, x.foo, bug7773 615 assert_equal :Bug1996, x.send(:x=, :case_when_setter_returns_other_value), bug7773 616 assert_equal :case_when_setter_returns_other_value, x.x, bug7773 617 end 618 619 def test_backref 620 /re/ =~ 'not match' 621 assert_nil $~ 622 assert_nil $` 623 assert_nil $& 624 assert_nil $' 625 assert_nil $+ 626 assert_nil $1 627 assert_nil $2 628 assert_nil $3 629 assert_nil $4 630 assert_nil $5 631 assert_nil $6 632 assert_nil $7 633 assert_nil $8 634 assert_nil $9 635 636 /(a)(b)(c)(d)(e)(f)(g)(h)(i)/ =~ 'xabcdefghiy' 637 assert_not_nil $~ 638 assert_instance_of MatchData, $~ 639 assert_equal 'abcdefghi', $~[0] 640 assert_equal 'a', $~[1] 641 assert_equal 'b', $~[2] 642 assert_equal 'c', $~[3] 643 assert_equal 'd', $~[4] 644 assert_equal 'e', $~[5] 645 assert_equal 'f', $~[6] 646 assert_equal 'g', $~[7] 647 assert_equal 'h', $~[8] 648 assert_equal 'i', $~[9] 649 assert_equal 'x', $` 650 assert_equal 'abcdefghi', $& 651 assert_equal "y", $' 652 assert_equal 'i', $+ 653 assert_equal 'a', $1 654 assert_equal 'b', $2 655 assert_equal 'c', $3 656 assert_equal 'd', $4 657 assert_equal 'e', $5 658 assert_equal 'f', $6 659 assert_equal 'g', $7 660 assert_equal 'h', $8 661 assert_equal 'i', $9 662 663 /re/ =~ 'not match' 664 assert_nil $~ 665 assert_nil $` 666 assert_nil $& 667 assert_nil $' 668 assert_nil $+ 669 assert_nil $1 670 assert_nil $2 671 assert_nil $3 672 assert_nil $4 673 assert_nil $5 674 assert_nil $6 675 assert_nil $7 676 assert_nil $8 677 assert_nil $9 678 end 679 680 def test_array_splat 681 feature1125 = '[ruby-core:21901]' 682 683 a = [] 684 assert_equal [], [*a] 685 assert_equal [1], [1, *a] 686 assert_not_same(a, [*a], feature1125) 687 a = [2] 688 assert_equal [2], [*a] 689 assert_equal [1, 2], [1, *a] 690 assert_not_same(a, [*a], feature1125) 691 a = [2, 3] 692 assert_equal [2, 3], [*a] 693 assert_equal [1, 2, 3], [1, *a] 694 assert_not_same(a, [*a], feature1125) 695 696 a = nil 697 assert_equal [], [*a] 698 assert_equal [1], [1, *a] 699 end 700end 701