source: EcnlProtoTool/trunk/mruby-1.3.0/mrbgems/mruby-array-ext/test/array.rb@ 331

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

prototoolに関連するプロジェクトをnewlibからmuslを使うよう変更・更新
ntshellをnewlibの下位の実装から、muslのsyscallの実装に変更・更新
以下のOSSをアップデート
・mruby-1.3.0
・musl-1.1.18
・onigmo-6.1.3
・tcc-0.9.27
以下のOSSを追加
・openssl-1.1.0e
・curl-7.57.0
・zlib-1.2.11
以下のmrbgemsを追加
・iij/mruby-digest
・iij/mruby-env
・iij/mruby-errno
・iij/mruby-iijson
・iij/mruby-ipaddr
・iij/mruby-mock
・iij/mruby-require
・iij/mruby-tls-openssl

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