source: EcnlProtoTool/trunk/mruby-1.2.0/mrbgems/mruby-array-ext/test/array.rb@ 270

Last change on this file since 270 was 270, checked in by coas-nagasima, 7 years ago

mruby版ECNLプロトタイピング・ツールを追加

  • Property svn:eol-style set to native
  • Property svn:mime-type set to text/x-ruby
File size: 8.6 KB
Line 
1##
2# Array(Ext) Test
3
4assert("Array#assoc") do
5 s1 = [ "colors", "red", "blue", "green" ]
6 s2 = [ "letters", "a", "b", "c" ]
7 s3 = "foo"
8 a = [ s1, s2, s3 ]
9
10 assert_equal [ "letters", "a", "b", "c" ], a.assoc("letters")
11 assert_nil a.assoc("foo")
12end
13
14assert("Array#at") do
15 a = [ "a", "b", "c", "d", "e" ]
16 assert_equal "a", a.at(0)
17 assert_equal "e", a.at(-1)
18end
19
20assert("Array#rassoc") do
21 a = [ [ 1, "one"], [2, "two"], [3, "three"], ["ii", "two"] ]
22
23 assert_equal [2, "two"], a.rassoc("two")
24 assert_nil a.rassoc("four")
25end
26
27assert("Array#uniq!") do
28 a = [1, 2, 3, 1]
29 a.uniq!
30 assert_equal [1, 2, 3], a
31
32 b = [ "a", "b", "c" ]
33 assert_nil b.uniq!
34
35 c = [["student","sam"], ["student","george"], ["teacher","matz"]]
36 assert_equal [["student", "sam"], ["teacher", "matz"]], c.uniq! { |s| s.first }
37
38 d = [["student","sam"], ["teacher","matz"]]
39 assert_nil d.uniq! { |s| s.first }
40end
41
42assert("Array#uniq") do
43 a = [1, 2, 3, 1]
44 assert_equal [1, 2, 3], a.uniq
45 assert_equal [1, 2, 3, 1], a
46
47 b = [["student","sam"], ["student","george"], ["teacher","matz"]]
48 assert_equal [["student", "sam"], ["teacher", "matz"]], b.uniq { |s| s.first }
49end
50
51assert("Array#-") do
52 a = [1, 2, 3, 1]
53 b = [1]
54 c = 1
55
56 assert_raise(TypeError) { a - c }
57 assert_equal [2, 3], (a - b)
58 assert_equal [1, 2, 3, 1], a
59end
60
61assert("Array#|") do
62 a = [1, 2, 3, 1]
63 b = [1, 4]
64 c = 1
65
66 assert_raise(TypeError) { a | c }
67 assert_equal [1, 2, 3, 4], (a | b)
68 assert_equal [1, 2, 3, 1], a
69end
70
71assert("Array#&") do
72 a = [1, 2, 3, 1]
73 b = [1, 4]
74 c = 1
75
76 assert_raise(TypeError) { a & c }
77 assert_equal [1], (a & b)
78 assert_equal [1, 2, 3, 1], a
79end
80
81assert("Array#flatten") do
82 assert_equal [1, 2, "3", {4=>5}, :'6'], [1, 2, "3", {4=>5}, :'6'].flatten
83 assert_equal [1, 2, 3, 4, 5, 6], [1, 2, [3, 4, 5], 6].flatten
84 assert_equal [1, 2, 3, 4, 5, 6], [1, 2, [3, [4, 5], 6]].flatten
85 assert_equal [1, [2, [3, [4, [5, [6]]]]]], [1, [2, [3, [4, [5, [6]]]]]].flatten(0)
86 assert_equal [1, 2, [3, [4, [5, [6]]]]], [1, [2, [3, [4, [5, [6]]]]]].flatten(1)
87 assert_equal [1, 2, 3, [4, [5, [6]]]], [1, [2, [3, [4, [5, [6]]]]]].flatten(2)
88 assert_equal [1, 2, 3, 4, [5, [6]]], [1, [2, [3, [4, [5, [6]]]]]].flatten(3)
89 assert_equal [1, 2, 3, 4, 5, [6]], [1, [2, [3, [4, [5, [6]]]]]].flatten(4)
90 assert_equal [1, 2, 3, 4, 5, 6], [1, [2, [3, [4, [5, [6]]]]]].flatten(5)
91end
92
93assert("Array#flatten!") do
94 assert_equal [1, 2, 3, 4, 5, 6], [1, 2, [3, [4, 5], 6]].flatten!
95end
96
97assert("Array#compact") do
98 a = [1, nil, "2", nil, :t, false, nil]
99 assert_equal [1, "2", :t, false], a.compact
100 assert_equal [1, nil, "2", nil, :t, false, nil], a
101end
102
103assert("Array#compact!") do
104 a = [1, nil, "2", nil, :t, false, nil]
105 a.compact!
106 assert_equal [1, "2", :t, false], a
107end
108
109assert("Array#fetch") do
110 a = [ 11, 22, 33, 44 ]
111 assert_equal 22, a.fetch(1)
112 assert_equal 44, a.fetch(-1)
113 assert_equal 'cat', a.fetch(4, 'cat')
114 ret = 0
115 a.fetch(100) { |i| ret = i }
116 assert_equal 100, ret
117 assert_raise(IndexError) { a.fetch(100) }
118end
119
120assert("Array#fill") do
121 a = [ "a", "b", "c", "d" ]
122 assert_equal ["x", "x", "x", "x"], a.fill("x")
123 assert_equal ["x", "x", "x", "w"], a.fill("w", -1)
124 assert_equal ["x", "x", "z", "z"], a.fill("z", 2, 2)
125 assert_equal ["y", "y", "z", "z"], a.fill("y", 0..1)
126 assert_equal [0, 1, 4, 9], a.fill { |i| i*i }
127 assert_equal [0, 1, 8, 27], a.fill(-2) { |i| i*i*i }
128 assert_equal [0, 2, 3, 27], a.fill(1, 2) { |i| i+1 }
129 assert_equal [1, 2, 3, 27], a.fill(0..1) { |i| i+1 }
130 assert_raise(ArgumentError) { a.fill }
131
132 assert_equal([0, 1, 2, 3, -1, 5], [0, 1, 2, 3, 4, 5].fill(-1, -2, 1))
133 assert_equal([0, 1, 2, 3, -1, -1, -1], [0, 1, 2, 3, 4, 5].fill(-1, -2, 3))
134 assert_equal([0, 1, 2, -1, -1, 5], [0, 1, 2, 3, 4, 5].fill(-1, 3..4))
135 assert_equal([0, 1, 2, -1, 4, 5], [0, 1, 2, 3, 4, 5].fill(-1, 3...4))
136 assert_equal([0, 1, -1, -1, -1, 5], [0, 1, 2, 3, 4, 5].fill(-1, 2..-2))
137 assert_equal([0, 1, -1, -1, 4, 5], [0, 1, 2, 3, 4, 5].fill(-1, 2...-2))
138 assert_equal([0, 1, 2, 13, 14, 5], [0, 1, 2, 3, 4, 5].fill(3..4){|i| i+10})
139 assert_equal([0, 1, 2, 13, 4, 5], [0, 1, 2, 3, 4, 5].fill(3...4){|i| i+10})
140 assert_equal([0, 1, 12, 13, 14, 5], [0, 1, 2, 3, 4, 5].fill(2..-2){|i| i+10})
141 assert_equal([0, 1, 12, 13, 4, 5], [0, 1, 2, 3, 4, 5].fill(2...-2){|i| i+10})
142
143 assert_equal [1, 2, 3, 4, 'x', 'x'], [1, 2, 3, 4, 5, 6].fill('x', -2..-1)
144 assert_equal [1, 2, 3, 4, 'x', 6], [1, 2, 3, 4, 5, 6].fill('x', -2...-1)
145 assert_equal [1, 2, 3, 4, 5, 6], [1, 2, 3, 4, 5, 6].fill('x', -2...-2)
146 assert_equal [1, 2, 3, 4, 'x', 6], [1, 2, 3, 4, 5, 6].fill('x', -2..-2)
147 assert_equal [1, 2, 3, 4, 5, 6], [1, 2, 3, 4, 5, 6].fill('x', -2..0)
148end
149
150assert("Array#reverse_each") do
151 a = [ "a", "b", "c", "d" ]
152 b = []
153 a.reverse_each do |i|
154 b << i
155 end
156 assert_equal [ "d", "c", "b", "a" ], b
157
158 if Object.const_defined?(:Enumerator)
159 assert_equal [ "d", "c", "b", "a" ], a.reverse_each.to_a
160 else
161 true
162 end
163end
164
165assert("Array#rotate") do
166 a = ["a", "b", "c", "d"]
167 assert_equal ["b", "c", "d", "a"], a.rotate
168 assert_equal ["a", "b", "c", "d"], a
169 assert_equal ["c", "d", "a", "b"], a.rotate(2)
170 assert_equal ["b", "c", "d", "a"], a.rotate(-3)
171 assert_equal ["c", "d", "a", "b"], a.rotate(10)
172 assert_equal [], [].rotate
173end
174
175assert("Array#rotate!") do
176 a = ["a", "b", "c", "d"]
177 assert_equal ["b", "c", "d", "a"], a.rotate!
178 assert_equal ["b", "c", "d", "a"], a
179 assert_equal ["d", "a", "b", "c"], a.rotate!(2)
180 assert_equal ["a", "b", "c", "d"], a.rotate!(-3)
181 assert_equal ["c", "d", "a", "b"], a.rotate(10)
182 assert_equal [], [].rotate!
183end
184
185assert("Array#delete_if") do
186 a = [1, 2, 3, 4, 5]
187 assert_equal [1, 2, 3, 4, 5], a.delete_if { false }
188 assert_equal [1, 2, 3, 4, 5], a
189
190 a = [1, 2, 3, 4, 5]
191 assert_equal [], a.delete_if { true }
192 assert_equal [], a
193
194 a = [1, 2, 3, 4, 5]
195 assert_equal [1, 2, 3], a.delete_if { |i| i > 3 }
196 assert_equal [1, 2, 3], a
197end
198
199assert("Array#reject!") do
200 a = [1, 2, 3, 4, 5]
201 assert_nil a.reject! { false }
202 assert_equal [1, 2, 3, 4, 5], a
203
204 a = [1, 2, 3, 4, 5]
205 assert_equal [], a.reject! { true }
206 assert_equal [], a
207
208 a = [1, 2, 3, 4, 5]
209 assert_equal [1, 2, 3], a.reject! { |val| val > 3 }
210 assert_equal [1, 2, 3], a
211end
212
213assert("Array#insert") do
214 a = ["a", "b", "c", "d"]
215 assert_equal ["a", "b", 99, "c", "d"], a.insert(2, 99)
216 assert_equal ["a", "b", 99, "c", 1, 2, 3, "d"], a.insert(-2, 1, 2, 3)
217
218 b = ["a", "b", "c", "d"]
219 assert_equal ["a", "b", "c", "d", nil, nil, 99], b.insert(6, 99)
220end
221
222assert("Array#bsearch") do
223 # Find minimum mode
224 a = [0, 4, 7, 10, 12]
225 assert_include [4, 7], a.bsearch {|x| x >= 4 }
226 assert_equal 7, a.bsearch {|x| x >= 6 }
227 assert_equal 0, a.bsearch {|x| x >= -1 }
228 assert_nil a.bsearch {|x| x >= 100 }
229
230 # Find any mode
231 a = [0, 4, 7, 10, 12]
232 assert_include [4, 7], a.bsearch {|x| 1 - (x / 4).truncate }
233 assert_nil a.bsearch {|x| 4 - (x / 2).truncate }
234 assert_equal(nil, a.bsearch {|x| 1 })
235 assert_equal(nil, a.bsearch {|x| -1 })
236end
237
238assert("Array#delete_if") do
239 a = [1, 2, 3, 4, 5]
240 assert_equal [1, 2, 3, 4, 5], a.delete_if { false }
241 assert_equal [1, 2, 3, 4, 5], a
242
243 a = [1, 2, 3, 4, 5]
244 assert_equal [], a.delete_if { true }
245 assert_equal [], a
246
247 a = [ 1, 2, 3, 4, 5 ]
248 assert_equal [1, 2, 3], a.delete_if { |val| val > 3 }
249end
250
251assert("Array#keep_if") do
252 a = [1, 2, 3, 4, 5]
253 assert_equal [1, 2, 3, 4, 5], a.keep_if { true }
254 assert_equal [1, 2, 3, 4, 5], a
255
256 a = [1, 2, 3, 4, 5]
257 assert_equal [], a.keep_if { false }
258 assert_equal [], a
259
260 a = [1, 2, 3, 4, 5]
261 assert_equal [4, 5], a.keep_if { |val| val > 3 }
262 assert_equal [4, 5], a
263end
264
265assert("Array#select!") do
266 a = [1, 2, 3, 4, 5]
267 assert_nil a.select! { true }
268 assert_equal [1, 2, 3, 4, 5], a
269
270 a = [1, 2, 3, 4, 5]
271 assert_equal [], a.select! { false }
272 assert_equal [], a
273
274 a = [1, 2, 3, 4, 5]
275 assert_equal [4, 5], a.select! { |val| val > 3 }
276 assert_equal [4, 5], a
277end
278
279assert('Array#values_at') do
280 a = %w{red green purple white none}
281
282 assert_equal %w{red purple none}, a.values_at(0, 2, 4)
283 assert_equal ['green', 'white', nil, nil], a.values_at(1, 3, 5, 7)
284 assert_equal ['none', 'white', 'white', nil], a.values_at(-1, -2, -2, -7)
285 assert_equal ['none', nil, nil, 'red', 'green', 'purple'], a.values_at(4..6, 0...3)
286 assert_raise(TypeError) { a.values_at 'tt' }
287end
288
289assert('Array#to_h') do
290 assert_equal({}, [].to_h)
291 assert_equal({a: 1, b:2}, [[:a, 1], [:b, 2]].to_h)
292
293 assert_raise(TypeError) { [1].to_h }
294 assert_raise(ArgumentError) { [[1]].to_h }
295end
296
297assert("Array#index (block)") do
298 assert_nil (1..10).to_a.index { |i| i % 5 == 0 and i % 7 == 0 }
299 assert_equal 34, (1..100).to_a.index { |i| i % 5 == 0 and i % 7 == 0 }
300end
Note: See TracBrowser for help on using the repository browser.