summaryrefslogtreecommitdiff
path: root/test/ruby/test_array.rb
blob: bc2902f6ffc46027c1f73362557b7e223f391ad7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
require 'test/unit'

$KCODE = 'none'

class TestArray < Test::Unit::TestCase
  def test_array
    assert([1, 2] + [3, 4] == [1, 2, 3, 4])
    assert([1, 2] * 2 == [1, 2, 1, 2])
    assert([1, 2] * ":" == "1:2")
    
    assert([1, 2].hash == [1, 2].hash)
    
    assert([1,2,3] & [2,3,4] == [2,3])
    assert([1,2,3] | [2,3,4] == [1,2,3,4])
    assert([1,2,3] - [2,3] == [1])
    
    $x = [0, 1, 2, 3, 4, 5]
    assert($x[2] == 2)
    assert($x[1..3] == [1, 2, 3])
    assert($x[1,3] == [1, 2, 3])
    
    $x[0, 2] = 10
    assert($x[0] == 10 && $x[1] == 2)
      
    $x[0, 0] = -1
    assert($x[0] == -1 && $x[1] == 10)
    
    $x[-1, 1] = 20
    assert($x[-1] == 20 && $x.pop == 20)
  end

  def test_array_andor
    assert(([1,2,3]&[2,4,6]) == [2])
    assert(([1,2,3]|[2,4,6]) == [1,2,3,4,6])
  end
    
  def test_compact
    $x = [nil, 1, nil, nil, 5, nil, nil]
    $x.compact!
    assert($x == [1, 5])
  end

  def test_uniq
    $x = [1, 1, 4, 2, 5, 4, 5, 1, 2]
    $x.uniq!
    assert($x == [1, 4, 2, 5])
    
    # empty?
    assert(!$x.empty?)
    $x = []
    assert($x.empty?)
  end

  def test_sort
    $x = ["it", "came", "to", "pass", "that", "..."]
    $x = $x.sort.join(" ")
    assert($x == "... came it pass that to")
    $x = [2,5,3,1,7]
    $x.sort!{|a,b| a<=>b}		# sort with condition
    assert($x == [1,2,3,5,7])
    $x.sort!{|a,b| b-a}		# reverse sort
    assert($x == [7,5,3,2,1])
  end

  def test_split
    $x = "The Boassert of Mormon"
    assert($x.split(//).reverse!.join == $x.reverse)
    assert($x.reverse == $x.reverse!)
    assert("1 byte string".split(//).reverse.join(":") == "g:n:i:r:t:s: :e:t:y:b: :1")
    $x = "a b c  d"
    assert($x.split == ['a', 'b', 'c', 'd'])
    assert($x.split(' ') == ['a', 'b', 'c', 'd'])
  end

  def test_misc
    assert(defined? "a".chomp)
    assert("abc".scan(/./) == ["a", "b", "c"])
    assert("1a2b3c".scan(/(\d.)/) == [["1a"], ["2b"], ["3c"]])
    # non-greedy match
    assert("a=12;b=22".scan(/(.*?)=(\d*);?/) == [["a", "12"], ["b", "22"]])
    
    $x = [1]
    assert(($x * 5).join(":") == '1:1:1:1:1')
    assert(($x * 1).join(":") == '1')
    assert(($x * 0).join(":") == '')
    
    *$x = *(1..7).to_a
    assert($x.size == 7)
    assert($x == [1, 2, 3, 4, 5, 6, 7])
    
    $x = [1,2,3]
    $x[1,0] = $x
    assert($x == [1,1,2,3,2,3])
    
    $x = [1,2,3]
    $x[-1,0] = $x
    assert($x == [1,2,1,2,3,3])
    
    $x = [1,2,3]
    $x.concat($x)
    assert($x == [1,2,3,1,2,3])
  end
end