/projects/jruby-1.7.3/build.eclipse/rubicon/test_array.rb
https://gitlab.com/essere.lab.public/qualitas.class-corpus · Ruby · 1166 lines · 928 code · 201 blank · 37 comment · 63 complexity · 0b36d1b8ddc3082f08f8f29b7e4a2e94 MD5 · raw file
- require 'test/unit'
- class TestArray < Test::Unit::TestCase
- IS19 = RUBY_VERSION =~ /1\.9/
- def setup
- super
- @cls = Array
- end
- def test_00_new
- # no argument
- a = @cls.new()
- assert_instance_of(@cls, a)
- assert_equal(0, a.length)
- assert_nil(a[0])
- # a length argument
- a = @cls.new(3)
- assert_instance_of(@cls, a)
- assert_equal(3, a.length)
- assert_nil(a[0])
- assert_nil(a[1])
- assert_nil(a[2])
- # length and value arguments
- a = @cls.new(3, "value")
- assert_instance_of(@cls, a)
- assert_equal(3, a.length)
- assert_equal("value", a[0])
- assert_equal("value", a[1])
- assert_equal("value", a[2])
- # length and value arguments:
- # even same instance in all array entries
- v = ["some", "complex", "value"]
- a = @cls.new(3, v)
- assert_instance_of(@cls, a)
- assert_equal(3, a.length)
- assert_same(v, a[0])
- assert_same(v, a[1])
- assert_same(v, a[2])
- # one argument that is an array:
- # like a "replace"
- v = @cls["some", "array", "value"]
- a = @cls.new(v)
- assert_instance_of(@cls, a)
- assert_equal(3, a.length)
- assert_not_same(v, a)
- assert_same(v[0], a[0])
- assert_same(v[1], a[1])
- assert_same(v[2], a[2])
- # with a block
- a = @cls.new(3) {|i| [i + 10] }
- assert_instance_of(@cls, a)
- assert_equal(3, a.length)
- 3.times {|i| assert_equal([i + 10], a[i]) }
- # error cases
- assert_raise(ArgumentError) { @cls.new(-10) }
-
- end
- def test_01_square_brackets
- a = @cls[ 5, 4, 3, 2, 1 ]
- assert_instance_of(@cls, a)
- assert_equal(5, a.length)
- 5.times { |i| assert_equal(5-i, a[i]) }
- assert_nil(a[6])
- a = @cls[]
- assert_instance_of(@cls, a)
- assert_equal(0, a.length)
- end
- def test_AND # '&'
- assert_equal(@cls[1, 3], @cls[ 1, 1, 3, 5 ] & @cls[ 1, 2, 3 ])
- assert_equal(@cls[1, 3], @cls[ 1, 1, 3, 5 ] & @cls[ 3, 2, 1 ])
- assert_equal(@cls[1, 3], @cls[ 1, 1, 3, 5 ] & @cls[ 3, 3, 2, 1 ])
- assert_equal(@cls[], @cls[ 1, 1, 3, 5 ] & @cls[ ])
- assert_equal(@cls[], @cls[ ] & @cls[ 1, 2, 3 ])
- assert_equal(@cls[], @cls[ 1, 2, 3 ] & @cls[ 4, 5, 6 ])
- # == is not used
- a1 = 1
- a2 = 1.0
- assert_equal(true, a1 == a2)
- assert_equal(false, a1.eql?(a2))
- assert_equal(@cls[2], @cls[ a1, 2, 3 ] & @cls[ a2, 2, 4 ])
- # eql? is used
- a1 = [1,2]
- a2 = [1,2]
- assert_equal(true, a1 == a2)
- assert_equal(true, a1.eql?(a2))
- assert_equal(@cls[[1,2], 2], @cls[ a1, 2, 3 ] & @cls[ a2, 2, 4 ])
- # error case
- assert_raise(TypeError) { @cls[ 1, 1, 3, 5 ] & Object.new }
- end
- def test_MUL # '*'
- assert_equal(@cls[], @cls[]*3)
- assert_equal(@cls[1, 1, 1], @cls[1]*3)
- assert_equal(@cls[1, 2, 1, 2, 1, 2], @cls[1, 2]*3)
- assert_equal(@cls[], @cls[1, 2, 3] * 0)
- assert_raise(ArgumentError) { @cls[1, 2]*(-3) }
- assert_raise(TypeError) { @cls[1, 2]*(Object.new) }
- assert_equal('1-2-3-4-5', @cls[1, 2, 3, 4, 5] * '-')
- assert_equal('12345', @cls[1, 2, 3, 4, 5] * '')
- end
- def test_PLUS # '+'
- assert_equal(@cls[], @cls[] + @cls[])
- assert_equal(@cls[1], @cls[1] + @cls[])
- assert_equal(@cls[1], @cls[] + @cls[1])
- assert_equal(@cls[1, 1], @cls[1] + @cls[1])
- assert_equal(@cls['cat', 'dog', 1, 2, 3], %w(cat dog) + (1..3).to_a)
- end
- def test_MINUS # '-'
- assert_equal(@cls[], @cls[1] - @cls[1])
- assert_equal(@cls[1], @cls[1, 2, 3, 4, 5] - @cls[2, 3, 4, 5])
- assert_equal(@cls[1,1,1,1], @cls[1, 2, 1, 3, 1, 4, 1, 5] - @cls[2, 3, 4, 5])
- a = @cls[]
- to_contrast = @cls[]
- 1000.times { a << 1 }
- 1000.times { to_contrast << 1}
- assert_equal(1000, a.length)
- assert_equal(to_contrast, a - @cls[2])
- assert_equal(@cls[1,1], @cls[ 1, 2, 1] - @cls[2])
- assert_equal(@cls[1, 2, 3], @cls[1, 2, 3] - @cls[4, 5, 6])
- end
- def test_LSHIFT # '<<'
- a = @cls[]
- res = a << 1
- assert_equal(@cls[1], a)
- assert_same(a, res)
- res = a << 2 << 3
- assert_equal(@cls[1, 2, 3], a)
- assert_same(a, res)
- res = a << nil << 'cat'
- assert_equal(@cls[1, 2, 3, nil, 'cat'], a)
- assert_same(a, res)
- res = a << a
- assert_equal(@cls[1, 2, 3, nil, 'cat', a], a)
- assert_same(a, res)
- end
- def test_CMP # '<=>'
- assert_equal(0, @cls[] <=> @cls[])
- assert_equal(0, @cls[1] <=> @cls[1])
- assert_equal(0, @cls[1, 2, 3, 'cat'] <=> @cls[1, 2, 3, 'cat'])
- assert_equal(-1, @cls[] <=> @cls[1])
- assert_equal(1, @cls[1] <=> @cls[])
- assert_equal(-1, @cls[1, 2, 3] <=> @cls[1, 2, 3, 'cat'])
- assert_equal(1, @cls[1, 2, 3, 'cat'] <=> @cls[1, 2, 3])
- assert_equal(-1, @cls[1, 2, 3, 'cat'] <=> @cls[1, 2, 3, 'dog'])
- assert_equal(1, @cls[1, 2, 3, 'dog'] <=> @cls[1, 2, 3, 'cat'])
- assert_equal(0, @cls[1] <=> @cls[1.000])
- assert_equal(-1, @cls[1] <=> @cls[1.001])
- assert_equal(1, @cls[1] <=> @cls[0.999])
- # nested arrays
- assert_equal(0, @cls[1, @cls[0, 3], 5] <=> @cls[1, @cls[0, 3], 5])
- assert_equal(1, @cls[1, @cls[0, 3], 5] <=> @cls[1, @cls[0, 2], 5])
- assert_equal(-1, @cls[1, @cls[0, 3], 5] <=> @cls[1, @cls[0, 4], 5])
- assert_equal(1, @cls[1, @cls[0, 3], 5] <=> @cls[1, @cls[0, 3], 4])
- assert_equal(-1, @cls[1, @cls[0, 3], 5] <=> @cls[1, @cls[0, 3], 6])
- # error cases
- assert_equal(nil, @cls[1,2,3] <=> @cls[1, "two", 3])
- # FIXME: JRUBY-1354 SystemStackError is untestable, because it is unpredictable
- #a = @cls[1,2,3]
- #a.push(a)
- #assert_raise(SystemStackError) { a <=> a }
- end
- def test_EQUAL # '=='
- assert_equal(true, @cls[] == @cls[])
- assert_equal(false, @cls[] == @cls[nil])
- assert_equal(false, @cls[] == @cls[9])
- assert_equal(false, @cls[8] == @cls[9])
- assert_equal(false, @cls[8] == @cls[])
- assert_equal(false, @cls[nil] == @cls[])
- assert_equal(true, @cls[1] == @cls[1])
- assert_equal(false, @cls[1] == Object.new)
- assert_equal(true, @cls[1, 1, 2, 2] == @cls[1, 1, 2, 2])
- assert_equal(false, @cls[1, 9, 2, 2] == @cls[1, 1, 2, 2])
- assert_equal(false, @cls[1, 1, 2, 2] == @cls[1, 1, 2, 2, 9])
- assert_equal(false, @cls[1, 1, 2, 2] == @cls[1, 1, 2])
- # elements are compared with ==
- assert_equal(true, @cls[1] == @cls[1.000])
- assert_equal(false, @cls[1] == @cls[1.001])
- assert_equal(true, @cls[1.0, 1.0, 2.0, 2.0] == @cls[1, 1, 2, 2])
- assert_equal(false, @cls[1.0, 1.0, 2.001, 2.0] == @cls[1, 1, 2, 2])
- # nested arrays
- assert_equal(true, @cls[11,@cls[22,33],44] == @cls[11,@cls[22,33],44])
- assert_equal(true, @cls[11,@cls[22,33],44] == @cls[11,@cls[22,33.0],44])
- assert_equal(false, @cls[11,@cls[22,33],44] == @cls[11,@cls[22,99],44])
- assert_equal(false, @cls[11,@cls[22,33],44] == @cls[11,@cls[22,33,99],44])
- end
- def test_VERY_EQUAL # '==='
- # === is the same as == for arrays, so the tests below are
- # copies of the ones in test_EQUAL
- assert_equal(true, @cls[] == @cls[])
- assert_equal(false, @cls[] == @cls[nil])
- assert_equal(false, @cls[] == @cls[9])
- assert_equal(false, @cls[8] == @cls[9])
- assert_equal(false, @cls[8] == @cls[])
- assert_equal(false, @cls[nil] == @cls[])
- assert_equal(true, @cls[1] == @cls[1])
- assert_equal(false, @cls[1] == Object.new)
- assert_equal(true, @cls[1, 1, 2, 2] == @cls[1, 1, 2, 2])
- assert_equal(false, @cls[1, 9, 2, 2] == @cls[1, 1, 2, 2])
- assert_equal(false, @cls[1, 1, 2, 2] == @cls[1, 1, 2, 2, 9])
- assert_equal(false, @cls[1, 1, 2, 2] == @cls[1, 1, 2])
- # elements are compared with ==
- assert_equal(true, @cls[1] == @cls[1.000])
- assert_equal(false, @cls[1] == @cls[1.001])
- assert_equal(true, @cls[1.0, 1.0, 2.0, 2.0] == @cls[1, 1, 2, 2])
- assert_equal(false, @cls[1.0, 1.0, 2.001, 2.0] == @cls[1, 1, 2, 2])
- # nested arrays
- assert_equal(true, @cls[11,@cls[22,33],44] == @cls[11,@cls[22,33],44])
- assert_equal(true, @cls[11,@cls[22,33],44] == @cls[11,@cls[22,33.0],44])
- assert_equal(false, @cls[11,@cls[22,33],44] == @cls[11,@cls[22,99],44])
- assert_equal(false, @cls[11,@cls[22,33],44] == @cls[11,@cls[22,33,99],44])
- end
- def test_AREF # '[]'
- a = @cls[*(1..100).to_a]
- assert_equal(1, a[0])
- assert_equal(100, a[99])
- assert_nil(a[100])
- assert_equal(100, a[-1])
- assert_equal(99, a[-2])
- assert_equal(1, a[-100])
- assert_nil(a[-101])
- assert_nil(a[-101,0])
- assert_nil(a[-101,1])
- assert_nil(a[-101,-1])
- assert_nil(a[10,-1])
- assert_equal(@cls[1], a[0,1])
- assert_equal(@cls[100], a[99,1])
- assert_equal(@cls[], a[100,1])
- assert_equal(@cls[100], a[99,100])
- assert_equal(@cls[100], a[-1,1])
- assert_equal(@cls[99], a[-2,1])
- assert_equal(@cls[], a[-100,0])
- assert_equal(@cls[1], a[-100,1])
- assert_equal(@cls[10, 11, 12], a[9, 3])
- assert_equal(@cls[10, 11, 12], a[-91, 3])
- assert_equal(@cls[1], a[0..0])
- assert_equal(@cls[100], a[99..99])
- assert_equal(@cls[], a[100..100])
- assert_equal(@cls[100], a[99..200])
- assert_equal(@cls[100], a[-1..-1])
- assert_equal(@cls[99], a[-2..-2])
- assert_equal(@cls[10, 11, 12], a[9..11])
- assert_equal(@cls[10, 11, 12], a[-91..-89])
-
- assert_nil(a[10, -3])
- assert_equal([], a[10..7])
- assert_raise(TypeError) {a['cat']}
- end
- def test_ASET # '[]='
- a = @cls[*(0..99).to_a]
- assert_equal(0, a[0] = 0)
- assert_equal(@cls[0] + @cls[*(1..99).to_a], a)
- a = @cls[*(0..99).to_a]
- assert_equal(0, a[10,10] = 0)
- assert_equal(@cls[*(0..9).to_a] + @cls[0] + @cls[*(20..99).to_a], a)
- a = @cls[*(0..99).to_a]
- assert_equal(0, a[-1] = 0)
- assert_equal(@cls[*(0..98).to_a] + @cls[0], a)
- a = @cls[*(0..99).to_a]
- assert_equal(0, a[-10, 10] = 0)
- assert_equal(@cls[*(0..89).to_a] + @cls[0], a)
- a = @cls[*(0..99).to_a]
- assert_equal(0, a[0,1000] = 0)
- assert_equal(@cls[0] , a)
- a = @cls[*(0..99).to_a]
- assert_equal(0, a[10..19] = 0)
- assert_equal(@cls[*(0..9).to_a] + @cls[0] + @cls[*(20..99).to_a], a)
- b = @cls[*%w( a b c )]
- a = @cls[*(0..99).to_a]
- assert_equal(b, a[0,1] = b)
- assert_equal(b + @cls[*(1..99).to_a], a)
- a = @cls[*(0..99).to_a]
- assert_equal(b, a[10,10] = b)
- assert_equal(@cls[*(0..9).to_a] + b + @cls[*(20..99).to_a], a)
- a = @cls[*(0..99).to_a]
- assert_equal(b, a[-1, 1] = b)
- assert_equal(@cls[*(0..98).to_a] + b, a)
- a = @cls[*(0..99).to_a]
- assert_equal(b, a[-10, 10] = b)
- assert_equal(@cls[*(0..89).to_a] + b, a)
- a = @cls[*(0..99).to_a]
- assert_equal(b, a[0,1000] = b)
- assert_equal(b , a)
- a = @cls[*(0..99).to_a]
- assert_equal(b, a[10..19] = b)
- assert_equal(@cls[*(0..9).to_a] + b + @cls[*(20..99).to_a], a)
- a = @cls[*(0..99).to_a]
- assert_equal(nil, a[0,1] = nil)
- if IS19
- assert_equal(@cls[nil, *(1..99).to_a], a)
- else
- assert_equal(@cls[*(1..99).to_a], a)
- end
- a = @cls[*(0..99).to_a]
- assert_equal(nil, a[10,10] = nil)
- if IS19
- assert_equal(@cls[*(0..9).to_a] + @cls[nil, *(20..99).to_a], a)
- else
- assert_equal(@cls[*(0..9).to_a] + @cls[*(20..99).to_a], a)
- end
- a = @cls[*(0..99).to_a]
- assert_equal(nil, a[-1, 1] = nil)
- if IS19
- assert_equal(@cls[*(0..98).to_a] + [nil], a)
- else
- assert_equal(@cls[*(0..98).to_a], a)
- end
- a = @cls[*(0..99).to_a]
- assert_equal(nil, a[-10, 10] = nil)
- if IS19
- assert_equal(@cls[*(0..89).to_a] + [nil], a)
- else
- assert_equal(@cls[*(0..89).to_a], a)
- end
- a = @cls[*(0..99).to_a]
- assert_equal(nil, a[0,1000] = nil)
- if IS19
- assert_equal(@cls[nil] , a)
- else
- assert_equal(@cls[] , a)
- end
- a = @cls[*(0..99).to_a]
- assert_equal(nil, a[10..19] = nil)
- if IS19
- assert_equal(@cls[*(0..9).to_a] + @cls[nil, *(20..99).to_a], a)
- else
- assert_equal(@cls[*(0..9).to_a] + @cls[*(20..99).to_a], a)
- end
- a = @cls[1, 2, 3]
- a[1, 0] = a
- assert_equal([1, 1, 2, 3, 2, 3], a)
- a = @cls[1, 2, 3]
- a[-1, 0] = a
- assert_equal([1, 2, 1, 2, 3, 3], a)
- end
- def test_assoc
- a1 = @cls[*%w( cat feline )]
- a2 = @cls[*%w( dog canine )]
- a3 = @cls[*%w( mule asinine )]
- a4 = @cls[*%w( mule asinine )]
- a = @cls[ a1, a2, a3, a4 ]
- assert_same(a1, a.assoc('cat'))
- assert_same(a3, a.assoc('mule'))
- assert_same(nil, a.assoc('asinine'))
- assert_same(nil, a.assoc('wombat'))
- assert_same(nil, a.assoc(1..2))
- end
- def test_at
- a = @cls[*(0..99).to_a]
- assert_equal(0, a.at(0))
- assert_equal(10, a.at(10))
- assert_equal(99, a.at(99))
- assert_equal(nil, a.at(100))
- assert_equal(99, a.at(-1))
- assert_equal(0, a.at(-100))
- assert_equal(nil, a.at(-101))
- assert_raise(TypeError) { a.at('cat') }
- end
- def test_clear
- a = @cls[1, 2, 3]
- b = a.clear
- assert_equal(@cls[], a)
- assert_equal(@cls[], b)
- assert_equal(a.__id__, b.__id__)
- end
- def test_clone
- for taint in [ false, true ]
- for frozen in [ false, true ]
- a = @cls[*(0..99).to_a]
- a.taint if taint
- a.freeze if frozen
- b = a.clone
- assert_equal(a, b)
- assert(a.__id__ != b.__id__)
- assert_equal(a.frozen?, b.frozen?)
- assert_equal(a.tainted?, b.tainted?)
- end
- end
- end
- def test_collect
- a = @cls[ 1, 'cat', 1..1 ]
- assert_equal([ Fixnum, String, Range], a.collect {|e| e.class} )
- assert_equal([ 99, 99, 99], a.collect { 99 } )
- assert_equal([], @cls[].collect { 99 })
- assert_equal([1, 2, 3], @cls[1, 2, 3].collect) unless IS19
- end
- def test_collect!
- generic_test_collect!(:collect!)
- end
- def generic_test_collect!(method)
- a = @cls[ 1, 'cat', 1..1 ]
- res = a.send(method) {|e| e.class}
- assert_equal([ Fixnum, String, Range], a)
- assert_same(a, res)
-
- a = @cls[ 1, 'cat', 1..1 ]
- res = a.send(method) { 99 }
- assert_equal([ 99, 99, 99], a)
- assert_equal(a, res)
- a = @cls[ ]
- res = a.send(method) { 99 }
- assert_equal([], a)
- assert_equal(a, res)
- end
- def test_compact
- a = @cls[ 1, nil, nil, 2, 3, nil, 4 ]
- assert_equal(@cls[1, 2, 3, 4], a.compact)
- a = @cls[ nil, 1, nil, 2, 3, nil, 4 ]
- assert_equal(@cls[1, 2, 3, 4], a.compact)
- a = @cls[ 1, nil, nil, 2, 3, nil, 4, nil ]
- assert_equal(@cls[1, 2, 3, 4], a.compact)
- a = @cls[ 1, 2, 3, 4 ]
- assert_equal(@cls[1, 2, 3, 4], a.compact)
- end
- def test_compact!
- a = @cls[ 1, nil, nil, 2, 3, nil, 4 ]
- assert_equal(@cls[1, 2, 3, 4], a.compact!)
- assert_equal(@cls[1, 2, 3, 4], a)
- a = @cls[ nil, 1, nil, 2, 3, nil, 4 ]
- assert_equal(@cls[1, 2, 3, 4], a.compact!)
- assert_equal(@cls[1, 2, 3, 4], a)
- a = @cls[ 1, nil, nil, 2, 3, nil, 4, nil ]
- assert_equal(@cls[1, 2, 3, 4], a.compact!)
- assert_equal(@cls[1, 2, 3, 4], a)
- a = @cls[ 1, 2, 3, 4 ]
- assert_equal(nil, a.compact!)
- assert_equal(@cls[1, 2, 3, 4], a)
- end
- def test_concat
- assert_equal(@cls[1, 2, 3, 4], @cls[1, 2].concat(@cls[3, 4]))
- assert_equal(@cls[1, 2, 3, 4], @cls[].concat(@cls[1, 2, 3, 4]))
- assert_equal(@cls[1, 2, 3, 4], @cls[1, 2, 3, 4].concat(@cls[]))
- assert_equal(@cls[], @cls[].concat(@cls[]))
- assert_equal(@cls[@cls[1, 2], @cls[3, 4]], @cls[@cls[1, 2]].concat(@cls[@cls[3, 4]]))
-
- a = @cls[1, 2, 3]
- a.concat(a)
- assert_equal([1, 2, 3, 1, 2, 3], a)
- end
- def test_delete
- a = @cls[*('cab'..'cat').to_a]
- assert_equal('cap', a.delete('cap'))
- assert_equal(@cls[*('cab'..'cao').to_a] + @cls[*('caq'..'cat').to_a], a)
- a = @cls[*('cab'..'cat').to_a]
- assert_equal('cab', a.delete('cab'))
- assert_equal(@cls[*('cac'..'cat').to_a], a)
- a = @cls[*('cab'..'cat').to_a]
- assert_equal('cat', a.delete('cat'))
- assert_equal(@cls[*('cab'..'cas').to_a], a)
- a = @cls[*('cab'..'cat').to_a]
- assert_equal(nil, a.delete('cup'))
- assert_equal(@cls[*('cab'..'cat').to_a], a)
- a = @cls[*('cab'..'cat').to_a]
- assert_equal(99, a.delete('cup') { 99 } )
- assert_equal(@cls[*('cab'..'cat').to_a], a)
- end
- def test_delete_at
- a = @cls[*(1..5).to_a]
- assert_equal(3, a.delete_at(2))
- assert_equal(@cls[1, 2, 4, 5], a)
- a = @cls[*(1..5).to_a]
- assert_equal(4, a.delete_at(-2))
- assert_equal(@cls[1, 2, 3, 5], a)
- a = @cls[*(1..5).to_a]
- assert_equal(nil, a.delete_at(5))
- assert_equal(@cls[1, 2, 3, 4, 5], a)
- a = @cls[*(1..5).to_a]
- assert_equal(nil, a.delete_at(-6))
- assert_equal(@cls[1, 2, 3, 4, 5], a)
- end
- # almost identical to reject!
- def test_delete_if
- a = @cls[ 1, 2, 3, 4, 5 ]
- assert_equal(a, a.delete_if { false }) # reject! returns nil here
- assert_equal(@cls[1, 2, 3, 4, 5], a)
- a = @cls[ 1, 2, 3, 4, 5 ]
- assert_equal(a, a.delete_if { true })
- assert_equal(@cls[], a)
- a = @cls[ 1, 2, 3, 4, 5 ]
- assert_equal(a, a.delete_if { |i| i > 3 })
- assert_equal(@cls[1, 2, 3], a)
- end
- def test_dup
- for taint in [ false, true ]
- for frozen in [ false, true ]
- a = @cls[*(0..99).to_a]
- a.taint if taint
- a.freeze if frozen
- b = a.dup
- assert_equal(a, b)
- assert(a.__id__ != b.__id__)
- assert_equal(false, b.frozen?)
- assert_equal(a.tainted?, b.tainted?)
- end
- end
- end
- def test_each
- a = @cls[*%w( ant bat cat dog )]
- i = 0
- a.each { |e|
- assert_equal(a[i], e)
- i += 1
- }
- assert_equal(4, i)
- a = @cls[]
- i = 0
- a.each { |e|
- assert_equal(a[i], e)
- i += 1
- }
- assert_equal(0, i)
- assert_equal(a, a.each {})
- end
- def test_each_index
- a = @cls[*%w( ant bat cat dog )]
- i = 0
- a.each_index { |ind|
- assert_equal(i, ind)
- i += 1
- }
- assert_equal(4, i)
- a = @cls[]
- i = 0
- a.each_index { |ind|
- assert_equal(i, ind)
- i += 1
- }
- assert_equal(0, i)
- assert_equal(a, a.each_index {})
- end
- def test_empty?
- assert(@cls[].empty?)
- assert(!@cls[1].empty?)
- end
- def test_eql?
- assert(@cls[].eql?(@cls[]))
- assert(@cls[1].eql?(@cls[1]))
- assert(@cls[1, 1, 2, 2].eql?(@cls[1, 1, 2, 2]))
- assert(!@cls[1.0, 1.0, 2.0, 2.0].eql?(@cls[1, 1, 2, 2]))
- end
- def test_fetch
- a = %w(a b c d)
- assert_equal('a', a.fetch(0))
- assert_equal('c', a.fetch(2))
- assert_raise(IndexError) { a.fetch(4) }
- assert_equal(8, a.fetch(4) {|k| k*2} )
- assert_equal('default', a.fetch(4, 'default'))
-
- assert_equal('d', a.fetch(-1))
- assert_equal('b', a.fetch(-3))
- assert_raise(IndexError) { a.fetch(-5) }
- assert_equal(-10, a.fetch(-5) {|k| k*2} )
- assert_equal('default', a.fetch(-5, 'default'))
- end
- def test_fill
- assert_equal(@cls[], @cls[].fill(99))
- assert_equal(@cls[], @cls[].fill(99, 0))
- assert_equal(@cls[99], @cls[].fill(99, 0, 1))
- assert_equal(@cls[99], @cls[].fill(99, 0..0))
- assert_equal(@cls[99], @cls[1].fill(99))
- assert_equal(@cls[99], @cls[1].fill(99, 0))
- assert_equal(@cls[99], @cls[1].fill(99, 0, 1))
- assert_equal(@cls[99], @cls[1].fill(99, 0..0))
- assert_equal(@cls[99, 99], @cls[1, 2].fill(99))
- assert_equal(@cls[99, 99], @cls[1, 2].fill(99, 0))
- assert_equal(@cls[99, 99], @cls[1, 2].fill(99, nil))
- assert_equal(@cls[1, 99], @cls[1, 2].fill(99, 1, nil))
- assert_equal(@cls[99, 2], @cls[1, 2].fill(99, 0, 1))
- assert_equal(@cls[99, 2], @cls[1, 2].fill(99, 0..0))
- # fill outside of original array
- assert_equal(@cls[1, 2, nil, nil, 88, 88, 88], @cls[1,2].fill(88, 4..6))
- # negative index counts from end
- assert_equal(@cls[1,2,77,77,77,77,77], @cls[1,2,3,4].fill(77, -2, 5))
- # with a block providing values
- arr = @cls[1,2].fill(4..6) {|i| 100 + i }
- assert_equal(@cls[1, 2, nil, nil, 104, 105, 106], arr)
- end
- def test_first
- assert_equal(3, @cls[3,4,5].first)
- assert_equal(4, @cls[4,5].first)
- assert_equal(5, @cls[5].first)
- assert_equal(nil, @cls[].first)
- # with argument
- assert_equal([], @cls[3,4,5].first(0))
- assert_equal([3], @cls[3,4,5].first(1))
- assert_equal([3,4], @cls[3,4,5].first(2))
- assert_equal([3,4,5], @cls[3,4,5].first(3))
- assert_equal([3,4,5], @cls[3,4,5].first(4))
- assert_equal([3,4,5], @cls[3,4,5].first(999))
- # error cases
- assert_raise(ArgumentError) { @cls[3,4,5].first(-1) }
- assert_raise(TypeError) { @cls[3,4,5].first(Object.new) }
- end
- def test_flatten
- a1 = @cls[ 1, 2, 3]
- a2 = @cls[ 5, 6 ]
- a3 = @cls[ 4, a2 ]
- a4 = @cls[ a1, a3 ]
- assert_equal(@cls[1, 2, 3, 4, 5, 6], a4.flatten)
- assert_equal(@cls[ a1, a3], a4)
- a5 = @cls[ a1, @cls[], a3 ]
- assert_equal(@cls[1, 2, 3, 4, 5, 6], a5.flatten)
- assert_equal(@cls[], @cls[].flatten)
- assert_equal(@cls[],
- @cls[@cls[@cls[@cls[],@cls[]],@cls[@cls[]],@cls[]],@cls[@cls[@cls[]]]].flatten)
- end
- def test_flatten!
- a1 = @cls[ 1, 2, 3]
- a2 = @cls[ 5, 6 ]
- a3 = @cls[ 4, a2 ]
- a4 = @cls[ a1, a3 ]
- assert_equal(@cls[1, 2, 3, 4, 5, 6], a4.flatten!)
- assert_equal(@cls[1, 2, 3, 4, 5, 6], a4)
- a5 = @cls[ a1, @cls[], a3 ]
- assert_equal(@cls[1, 2, 3, 4, 5, 6], a5.flatten!)
- assert_equal(@cls[1, 2, 3, 4, 5, 6], a5)
- assert_equal(@cls[], @cls[].flatten)
- assert_equal(@cls[],
- @cls[@cls[@cls[@cls[],@cls[]],@cls[@cls[]],@cls[]],@cls[@cls[@cls[]]]].flatten)
- end
- def test_hash
- a1 = @cls[ 'cat', 'dog' ]
- a2 = @cls[ 'cat', 'dog' ]
- a3 = @cls[ 'dog', 'cat' ]
- assert(a1.hash == a2.hash)
- assert(a1.hash != a3.hash)
- end
- def test_include?
- a = @cls[ 'cat', 99, /a/, @cls[ 1, 2, 3] ]
- assert(a.include?('cat'))
- assert(a.include?(99))
- assert(a.include?(/a/))
- assert(a.include?([1,2,3]))
- assert(!a.include?('ca'))
- assert(!a.include?([1,2]))
- end
- def test_index
- a = @cls[ 'cat', 99, /a/, 99, @cls[ 1, 2, 3] ]
- assert_equal(0, a.index('cat'))
- assert_equal(1, a.index(99))
- assert_equal(4, a.index([1,2,3]))
- assert_nil(a.index('ca'))
- assert_nil(a.index([1,2]))
- end
- # this clutters up the alphabetic ordering of methods
- def generic_index_test(symbol)
- a = @cls[*('a'..'j').to_a]
- assert_equal(@cls['a', 'c', 'e'], a.send(symbol,0, 2, 4))
- assert_equal(@cls['j', 'h', 'f'], a.send(symbol,-1, -3, -5))
- assert_equal(@cls['h', nil, 'a'], a.send(symbol,-3, 99, 0))
- end
- def test_insert
- x = %w(a b c)
- assert_equal(%w(a b c), x.insert(2))
- assert_equal(%w(a b x c), x.insert(2, 'x'))
- assert_equal(%w(a b x c), x)
- assert_equal(%w(a b x y z w c), x.insert(-2, 'y', 'z', 'w'))
- assert_equal(%w(a b x y z w c) + [nil, nil] + %w(Q), x.insert(9, 'Q'))
- assert_raise(IndexError) { x.insert(-12, 'Z') }
- end
- def test_join
- $, = ""
- a = @cls[]
- assert_equal("", a.join)
- assert_equal("", a.join(','))
- $, = ""
- a = @cls[1, 2]
- assert_equal("12", a.join)
- assert_equal("1,2", a.join(','))
- $, = ""
- a = @cls[1, 2, 3]
- assert_equal("123", a.join)
- assert_equal("1,2,3", a.join(','))
- $, = ":"
- a = @cls[1, 2, 3]
- assert_equal("1:2:3", a.join)
- assert_equal("1,2,3", a.join(','))
- $, = ""
- end
- def test_last
- assert_equal(5, @cls[3,4,5].last)
- assert_equal(4, @cls[3,4].last)
- assert_equal(3, @cls[3].last)
- assert_equal(nil, @cls[].last)
- # with argument
- assert_equal([], @cls[3,4,5].last(0))
- assert_equal([5], @cls[3,4,5].last(1))
- assert_equal([4,5], @cls[3,4,5].last(2))
- assert_equal([3,4,5], @cls[3,4,5].last(3))
- assert_equal([3,4,5], @cls[3,4,5].last(4))
- assert_equal([3,4,5], @cls[3,4,5].last(999))
- # error cases
- assert_raise(ArgumentError) { @cls[3,4,5].last(-1) }
- assert_raise(TypeError) { @cls[3,4,5].last(Object.new) }
- # misc
- assert_equal(nil, @cls[].last)
- assert_equal(1, @cls[1].last)
- assert_equal(99, @cls[*(3..99).to_a].last)
- end
- def test_length
- assert_equal(0, @cls[].length)
- assert_equal(1, @cls[1].length)
- assert_equal(2, @cls[1, nil].length)
- assert_equal(2, @cls[nil, 1].length)
- assert_equal(234, @cls[*(0..233).to_a].length)
- end
- def test_map!
- generic_test_collect!(:map!)
- end
- if !IS19
- def test_nitems
- assert_equal(0, @cls[].nitems)
- assert_equal(1, @cls[1].nitems)
- assert_equal(1, @cls[1, nil].nitems)
- assert_equal(1, @cls[nil, 1].nitems)
- assert_equal(3, @cls[1, nil, nil, 2, nil, 3, nil].nitems)
- end
- end
- def test_pop
- a = @cls[ 'cat', 'dog' ]
- assert_equal('dog', a.pop)
- assert_equal(@cls['cat'], a)
- assert_equal('cat', a.pop)
- assert_equal(@cls[], a)
- assert_nil(a.pop)
- assert_equal(@cls[], a)
- end
- def test_push
- a = @cls[1, 2, 3]
- assert_equal(@cls[1, 2, 3, 4, 5], a.push(4, 5))
- assert_equal(@cls[1, 2, 3, 4, 5], a.push())
- assert_equal(@cls[1, 2, 3, 4, 5, nil], a.push(nil))
- end
- def test_rassoc
- a1 = @cls[*%w( cat feline )]
- a2 = @cls[*%w( dog canine )]
- a3 = @cls[*%w( mule asinine )]
- a4 = @cls[*%w( mule asinine )]
- a = @cls[ a1, a2, a3, a4 ]
- assert_same(a1, a.rassoc('feline'))
- assert_same(a3, a.rassoc('asinine'))
- assert_same(nil, a.rassoc('dog'))
- assert_same(nil, a.rassoc('mule'))
- assert_same(nil, a.rassoc(1..2))
- end
- # almost identical to delete_if
- def test_reject!
- a = @cls[ 1, 2, 3, 4, 5 ]
- assert_equal(nil, a.reject! { false }) # delete_if returns a here
- assert_equal(@cls[1, 2, 3, 4, 5], a)
- a = @cls[ 1, 2, 3, 4, 5 ]
- assert_equal(a, a.reject! { true })
- assert_equal(@cls[], a)
- a = @cls[ 1, 2, 3, 4, 5 ]
- assert_equal(a, a.reject! { |i| i > 3 })
- assert_equal(@cls[1, 2, 3], a)
- end
- def test_replace
- a = @cls[ 1, 2, 3]
- a_id = a.__id__
- assert_equal(@cls[4, 5, 6], a.replace(@cls[4, 5, 6]))
- assert_equal(@cls[4, 5, 6], a)
- assert_equal(a_id, a.__id__)
- assert_equal(@cls[], a.replace(@cls[]))
- end
- def test_reverse
- a = @cls[*%w( dog cat bee ant )]
- assert_equal(@cls[*%w(ant bee cat dog)], a.reverse)
- assert_equal(@cls[*%w(dog cat bee ant)], a)
- assert_equal(@cls[], @cls[].reverse)
- end
- def test_reverse!
- a = @cls[*%w( dog cat bee ant )]
- assert_equal(@cls[*%w(ant bee cat dog)], a.reverse!)
- assert_equal(@cls[*%w(ant bee cat dog)], a)
- assert_equal(@cls[],@cls[].reverse!)
- end
- def test_reverse_each
- a = @cls[*%w( dog cat bee ant )]
- i = a.length
- a.reverse_each { |e|
- i -= 1
- assert_equal(a[i], e)
- }
- assert_equal(0, i)
- a = @cls[]
- i = 0
- a.reverse_each { |e|
- assert(false, "Never get here")
- }
- assert_equal(0, i)
- end
- def test_rindex
- a = @cls[ 'cat', 99, /a/, 99, [ 1, 2, 3] ]
- assert_equal(0, a.rindex('cat'))
- assert_equal(3, a.rindex(99))
- assert_equal(4, a.rindex([1,2,3]))
- assert_nil(a.rindex('ca'))
- assert_nil(a.rindex([1,2]))
- end
- def test_shift
- a = @cls[ 'cat', 'dog' ]
- assert_equal('cat', a.shift)
- assert_equal(@cls['dog'], a)
- assert_equal('dog', a.shift)
- assert_equal(@cls[], a)
- assert_nil(a.shift)
- assert_equal(@cls[], a)
- end
- def test_size
- assert_equal(0, @cls[].size)
- assert_equal(1, @cls[1].size)
- assert_equal(100, @cls[*(0..99).to_a].size)
- end
- def test_slice
- a = @cls[*(1..100).to_a]
- assert_equal(1, a.slice(0))
- assert_equal(100, a.slice(99))
- assert_nil(a.slice(100))
- assert_equal(100, a.slice(-1))
- assert_equal(99, a.slice(-2))
- assert_equal(1, a.slice(-100))
- assert_nil(a.slice(-101))
- assert_equal(@cls[1], a.slice(0,1))
- assert_equal(@cls[100], a.slice(99,1))
- assert_equal(@cls[], a.slice(100,1))
- assert_equal(@cls[100], a.slice(99,100))
- assert_equal(@cls[100], a.slice(-1,1))
- assert_equal(@cls[99], a.slice(-2,1))
- assert_equal(@cls[10, 11, 12], a.slice(9, 3))
- assert_equal(@cls[10, 11, 12], a.slice(-91, 3))
- assert_equal(@cls[1], a.slice(0..0))
- assert_equal(@cls[100], a.slice(99..99))
- assert_equal(@cls[], a.slice(100..100))
- assert_equal(@cls[100], a.slice(99..200))
- assert_equal(@cls[100], a.slice(-1..-1))
- assert_equal(@cls[99], a.slice(-2..-2))
- assert_equal(@cls[10, 11, 12], a.slice(9..11))
- assert_equal(@cls[10, 11, 12], a.slice(-91..-89))
-
- assert_nil(a.slice(10, -3))
- assert_equal([], a.slice(10..7))
- end
- def test_slice!
- a = @cls[1, 2, 3, 4, 5]
- assert_equal(3, a.slice!(2))
- assert_equal(@cls[1, 2, 4, 5], a)
- a = @cls[1, 2, 3, 4, 5]
- assert_equal(4, a.slice!(-2))
- assert_equal(@cls[1, 2, 3, 5], a)
- a = @cls[1, 2, 3, 4, 5]
- assert_equal(@cls[3,4], a.slice!(2,2))
- assert_equal(@cls[1, 2, 5], a)
- a = @cls[1, 2, 3, 4, 5]
- assert_equal(@cls[4,5], a.slice!(-2,2))
- assert_equal(@cls[1, 2, 3], a)
- a = @cls[1, 2, 3, 4, 5]
- assert_equal(@cls[3,4], a.slice!(2..3))
- assert_equal(@cls[1, 2, 5], a)
- a = @cls[1, 2, 3, 4, 5]
- assert_equal(nil, a.slice!(20))
- assert_equal(@cls[1, 2, 3, 4, 5], a)
- end
- def test_sort
- a = @cls[ 4, 1, 2, 3 ]
- assert_equal(@cls[1, 2, 3, 4], a.sort)
- assert_equal(@cls[4, 1, 2, 3], a)
- assert_equal(@cls[4, 3, 2, 1], a.sort { |x, y| y <=> x} )
- assert_equal(@cls[4, 1, 2, 3], a)
- a.fill(1)
- assert_equal(@cls[1, 1, 1, 1], a.sort)
-
- assert_equal(@cls[], @cls[].sort)
- end
- def test_sort!
- a = @cls[ 4, 1, 2, 3 ]
- assert_equal(@cls[1, 2, 3, 4], a.sort!)
- assert_equal(@cls[1, 2, 3, 4], a)
- assert_equal(@cls[4, 3, 2, 1], a.sort! { |x, y| y <=> x} )
- assert_equal(@cls[4, 3, 2, 1], a)
- a.fill(1)
- assert_equal(@cls[1, 1, 1, 1], a.sort!)
- end
- def test_to_a
- a = @cls[ 1, 2, 3 ]
- a_id = a.__id__
- assert_equal(a, a.to_a)
- assert_equal(a_id, a.to_a.__id__)
- end
- def test_to_ary
- a = [ 1, 2, 3 ]
- b = @cls[*a]
- a_id = a.__id__
- assert_equal(a, b.to_ary)
- if (@cls == Array)
- assert_equal(a_id, a.to_ary.__id__)
- end
- end
- def test_to_s
- $, = ""
- a = @cls[]
- assert_equal("", a.to_s) unless IS19
- $, = ""
- a = @cls[1, 2]
- assert_equal(IS19 ? "[1, 2]" : "12", a.to_s)
- $, = ""
- a = @cls[1, 2, 3]
- assert_equal(IS19 ? "[1, 2, 3]" : "123", a.to_s)
- $, = ":"
- a = @cls[1, 2, 3]
- assert_equal(IS19 ? "[1, 2, 3]" : "1:2:3", a.to_s)
- $, = ""
- end
- def test_transpose
- # normal case
- ary = [%w(a b c), %w(d e f), %w(g h i), %w(j k l)]
- exp = [%w(a d g j), %w(b e h k), %w(c f i l)]
- assert_equal(exp, ary.transpose)
- assert_equal(ary, ary.transpose.transpose)
- # the following happens in case of malformed data
- e = assert_raise(IndexError) { [%w(a b c), %w(d)].transpose }
- assert_match(/1 should be 3/, e.message)
- end
- def test_uniq
- a = @cls[ 1, 2, 3, 2, 1, 2, 3, 4, nil ]
- b = a.dup
- assert_equal(@cls[1, 2, 3, 4, nil], a.uniq)
- assert_equal(b, a)
- assert_equal(@cls[1, 2, 3], @cls[1, 2, 3].uniq)
- end
- def test_uniq!
- a = @cls[ 1, 2, 3, 2, 1, 2, 3, 4, nil ]
- assert_equal(@cls[1, 2, 3, 4, nil], a.uniq!)
- assert_equal(@cls[1, 2, 3, 4, nil], a)
- assert_nil(@cls[1, 2, 3].uniq!)
- end
- def test_unshift
- a = @cls[]
- assert_equal(@cls['cat'], a.unshift('cat'))
- assert_equal(@cls['dog', 'cat'], a.unshift('dog'))
- assert_equal(@cls[nil, 'dog', 'cat'], a.unshift(nil))
- assert_equal(@cls[@cls[1,2], nil, 'dog', 'cat'], a.unshift(@cls[1, 2]))
- end
- def test_values_at
- assert_equal([], %w(a b c d e).values_at)
- assert_equal(%w(c), %w(a b c d e).values_at(2))
- assert_equal(%w(b d), %w(a b c d e).values_at(1, 3))
- assert_equal([nil, nil], %w(a b c d e).values_at(5, 300))
- assert_equal(%w(e), %w(a b c d e).values_at(-1))
- assert_equal(%w(d b), %w(a b c d e).values_at(-2, -4))
- assert_equal([nil, nil], %w(a b c d e).values_at(-6, -500))
- assert_equal(%w(a c e), %w(a b c d e).values_at(0.0, 2.0, 4.0)) # float as index
- assert_equal(%w(b), %w(a b c d e).values_at(1.8)) # float as index
- assert_equal(%w(b c d), %w(a b c d e).values_at(1..3))
- assert_raise(TypeError) { %w(a b c).values_at(nil) }
- assert_raise(TypeError) { %w(a b c).values_at("x") }
- assert_raise(TypeError) { %w(a b c).values_at([]) }
- assert_raise(TypeError) { %w(a b c).values_at(true) }
- end
- def test_OR # '|'
- assert_equal(@cls[], @cls[] | @cls[])
- assert_equal(@cls[1], @cls[1] | @cls[])
- assert_equal(@cls[1], @cls[] | @cls[1])
- assert_equal(@cls[1], @cls[1] | @cls[1])
- assert_equal(@cls[1,2], @cls[1] | @cls[2])
- assert_equal(@cls[1,2], @cls[1, 1] | @cls[2, 2])
- assert_equal(@cls[1,2], @cls[1, 2] | @cls[1, 2])
- end
- def test_zip
- a = @cls[4, 5, 6]
- b = @cls[7, 8, 9]
- assert_equal([[1, 4, 7], [2, 5, 8], [3, 6, 9]], @cls[1, 2, 3].zip(a, b))
- assert_equal([[1, 4, 7], [2, 5, 8]], @cls[1, 2].zip(a, b))
- assert_equal([[4, 1, 8], [5, 2, nil], [6, nil, nil]], a.zip([1, 2], [8]))
- end
- end