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