source: EcnlProtoTool/trunk/mruby-1.3.0/test/t/hash.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: 7.5 KB
Line 
1##
2# Hash ISO Test
3
4assert('Hash', '15.2.13') do
5 assert_equal Class, Hash.class
6end
7
8assert('Hash#==', '15.2.13.4.1') do
9 assert_true({ 'abc' => 'abc' } == { 'abc' => 'abc' })
10 assert_false({ 'abc' => 'abc' } == { 'cba' => 'cba' })
11 assert_true({ :equal => 1 } == { :equal => 1.0 })
12 assert_false({ :a => 1 } == true)
13end
14
15assert('Hash#[]', '15.2.13.4.2') do
16 a = { 'abc' => 'abc' }
17
18 assert_equal 'abc', a['abc']
19
20 # Hash#[] should call #default (#3272)
21 hash = {}
22 def hash.default(k); self[k] = 1; end
23 hash[:foo] += 1
24
25 assert_equal 2, hash[:foo]
26end
27
28assert('Hash#[]=', '15.2.13.4.3') do
29 a = Hash.new
30 a['abc'] = 'abc'
31
32 assert_equal 'abc', a['abc']
33end
34
35assert('Hash#clear', '15.2.13.4.4') do
36 a = { 'abc' => 'abc' }
37 a.clear
38
39 assert_equal({ }, a)
40end
41
42assert('Hash#dup') do
43 a = { 'a' => 1 }
44 b = a.dup
45 a['a'] = 2
46 assert_equal({'a' => 1}, b)
47
48 c = Hash.new { |h, k| h[k] = k.upcase }
49 d = c.dup
50 assert_equal("FOO", d["foo"])
51end
52
53assert('Hash#default', '15.2.13.4.5') do
54 a = Hash.new
55 b = Hash.new('abc')
56 c = Hash.new {|s,k| s[k] = k}
57
58 assert_nil a.default
59 assert_equal 'abc', b.default
60 assert_nil c.default
61 assert_equal 'abc', c.default('abc')
62end
63
64assert('Hash#default=', '15.2.13.4.6') do
65 a = { 'abc' => 'abc' }
66 a.default = 'cba'
67
68 assert_equal 'abc', a['abc']
69 assert_equal 'cba', a['notexist']
70end
71
72assert('Hash#default_proc', '15.2.13.4.7') do
73 a = Hash.new
74 b = Hash.new {|s,k| s[k] = k + k}
75 c = b[2]
76 d = b['cat']
77
78 assert_nil a.default_proc
79 assert_equal Proc, b.default_proc.class
80 assert_equal 4, c
81 assert_equal 'catcat', d
82end
83
84assert('Hash#delete', '15.2.13.4.8') do
85 a = { 'abc' => 'abc' }
86 b = { 'abc' => 'abc' }
87 b_tmp_1 = false
88 b_tmp_2 = false
89
90 a.delete('abc')
91 b.delete('abc') do |k|
92 b_tmp_1 = true
93 end
94 b.delete('abc') do |k|
95 b_tmp_2 = true
96 end
97
98 assert_nil a.delete('cba')
99 assert_false a.has_key?('abc')
100 assert_false b_tmp_1
101 assert_true b_tmp_2
102end
103
104assert('Hash#each', '15.2.13.4.9') do
105 a = { 'abc_key' => 'abc_value' }
106 key = nil
107 value = nil
108
109 a.each do |k,v|
110 key = k
111 value = v
112 end
113
114 assert_equal 'abc_key', key
115 assert_equal 'abc_value', value
116end
117
118assert('Hash#each_key', '15.2.13.4.10') do
119 a = { 'abc_key' => 'abc_value' }
120 key = nil
121
122 a.each_key do |k|
123 key = k
124 end
125
126 assert_equal 'abc_key', key
127end
128
129assert('Hash#each_value', '15.2.13.4.11') do
130 a = { 'abc_key' => 'abc_value' }
131 value = nil
132
133 a.each_value do |v|
134 value = v
135 end
136
137 assert_equal 'abc_value', value
138end
139
140assert('Hash#empty?', '15.2.13.4.12') do
141 a = { 'abc_key' => 'abc_value' }
142 b = Hash.new
143
144 assert_false a.empty?
145 assert_true b.empty?
146end
147
148assert('Hash#has_key?', '15.2.13.4.13') do
149 a = { 'abc_key' => 'abc_value' }
150 b = Hash.new
151
152 assert_true a.has_key?('abc_key')
153 assert_false b.has_key?('cba')
154end
155
156assert('Hash#has_value?', '15.2.13.4.14') do
157 a = { 'abc_key' => 'abc_value' }
158 b = Hash.new
159
160 assert_true a.has_value?('abc_value')
161 assert_false b.has_value?('cba')
162end
163
164assert('Hash#include?', '15.2.13.4.15') do
165 a = { 'abc_key' => 'abc_value' }
166 b = Hash.new
167
168 assert_true a.include?('abc_key')
169 assert_false b.include?('cba')
170end
171
172assert('Hash#initialize', '15.2.13.4.16') do
173 # Testing initialize by new.
174 h = Hash.new
175 h2 = Hash.new(:not_found)
176
177 assert_true h.is_a? Hash
178 assert_equal({ }, h)
179 assert_nil h["hello"]
180 assert_equal :not_found, h2["hello"]
181end
182
183assert('Hash#initialize_copy', '15.2.13.4.17') do
184 a = { 'abc_key' => 'abc_value' }
185 b = Hash.new.initialize_copy(a)
186
187 assert_equal({ 'abc_key' => 'abc_value' }, b)
188end
189
190assert('Hash#key?', '15.2.13.4.18') do
191 a = { 'abc_key' => 'abc_value' }
192 b = Hash.new
193
194 assert_true a.key?('abc_key')
195 assert_false b.key?('cba')
196end
197
198assert('Hash#keys', '15.2.13.4.19') do
199 a = { 'abc_key' => 'abc_value' }
200
201 assert_equal ['abc_key'], a.keys
202end
203
204assert('Hash#length', '15.2.13.4.20') do
205 a = { 'abc_key' => 'abc_value' }
206 b = Hash.new
207
208 assert_equal 1, a.length
209 assert_equal 0, b.length
210end
211
212assert('Hash#member?', '15.2.13.4.21') do
213 a = { 'abc_key' => 'abc_value' }
214 b = Hash.new
215
216 assert_true a.member?('abc_key')
217 assert_false b.member?('cba')
218end
219
220assert('Hash#merge', '15.2.13.4.22') do
221 a = { 'abc_key' => 'abc_value', 'cba_key' => 'cba_value' }
222 b = { 'cba_key' => 'XXX', 'xyz_key' => 'xyz_value' }
223
224 result_1 = a.merge b
225 result_2 = a.merge(b) do |key, original, new|
226 original
227 end
228
229 assert_equal({'abc_key' => 'abc_value', 'cba_key' => 'XXX',
230 'xyz_key' => 'xyz_value' }, result_1)
231 assert_equal({'abc_key' => 'abc_value', 'cba_key' => 'cba_value',
232 'xyz_key' => 'xyz_value' }, result_2)
233
234 assert_raise(TypeError) do
235 { 'abc_key' => 'abc_value' }.merge "a"
236 end
237end
238
239assert('Hash#replace', '15.2.13.4.23') do
240 a = { 'abc_key' => 'abc_value' }
241 b = Hash.new.replace(a)
242
243 assert_equal({ 'abc_key' => 'abc_value' }, b)
244
245 a = Hash.new(42)
246 b = {}
247 b.replace(a)
248 assert_equal(42, b[1])
249
250 a = Hash.new{|h,x| x}
251 b.replace(a)
252 assert_equal(127, b[127])
253
254 assert_raise(TypeError) do
255 { 'abc_key' => 'abc_value' }.replace "a"
256 end
257end
258
259assert('Hash#shift', '15.2.13.4.24') do
260 a = { 'abc_key' => 'abc_value', 'cba_key' => 'cba_value' }
261 b = a.shift
262
263 assert_equal Array, b.class
264 assert_equal 2, b.size
265 assert_equal 1, a.size
266
267 b = a.shift
268
269 assert_equal Array, b.class
270 assert_equal 2, b.size
271 assert_equal 0, a.size
272end
273
274assert('Hash#size', '15.2.13.4.25') do
275 a = { 'abc_key' => 'abc_value' }
276 b = Hash.new
277
278 assert_equal 1, a.size
279 assert_equal 0, b.size
280end
281
282assert('Hash#store', '15.2.13.4.26') do
283 a = Hash.new
284 a.store('abc', 'abc')
285
286 assert_equal 'abc', a['abc']
287end
288
289assert('Hash#value?', '15.2.13.4.27') do
290 a = { 'abc_key' => 'abc_value' }
291 b = Hash.new
292
293 assert_true a.value?('abc_value')
294 assert_false b.value?('cba')
295end
296
297assert('Hash#values', '15.2.13.4.28') do
298 a = { 'abc_key' => 'abc_value' }
299
300 assert_equal ['abc_value'], a.values
301end
302
303# Not ISO specified
304
305assert('Hash#eql?') do
306 a = { 'a' => 1, 'b' => 2, 'c' => 3 }
307 b = { 'a' => 1, 'b' => 2, 'c' => 3 }
308 c = { 'a' => 1.0, 'b' => 2, 'c' => 3 }
309 assert_true(a.eql?(b))
310 assert_false(a.eql?(c))
311 assert_false(a.eql?(true))
312end
313
314assert('Hash#reject') do
315 h = {:one => 1, :two => 2, :three => 3, :four => 4}
316 ret = h.reject do |k,v|
317 v % 2 == 0
318 end
319 assert_equal({:one => 1, :three => 3}, ret)
320 assert_equal({:one => 1, :two => 2, :three => 3, :four => 4}, h)
321end
322
323assert('Hash#reject!') do
324 h = {:one => 1, :two => 2, :three => 3, :four => 4}
325 ret = h.reject! do |k,v|
326 v % 2 == 0
327 end
328 assert_equal({:one => 1, :three => 3}, ret)
329 assert_equal({:one => 1, :three => 3}, h)
330end
331
332assert('Hash#select') do
333 h = {:one => 1, :two => 2, :three => 3, :four => 4}
334 ret = h.select do |k,v|
335 v % 2 == 0
336 end
337 assert_equal({:two => 2, :four => 4}, ret)
338 assert_equal({:one => 1, :two => 2, :three => 3, :four => 4}, h)
339end
340
341assert('Hash#select!') do
342 h = {:one => 1, :two => 2, :three => 3, :four => 4}
343 ret = h.select! do |k,v|
344 v % 2 == 0
345 end
346 assert_equal({:two => 2, :four => 4}, ret)
347 assert_equal({:two => 2, :four => 4}, h)
348end
349
350# Not ISO specified
351
352assert('Hash#inspect') do
353 h = { "c" => 300, "a" => 100, "d" => 400, "c" => 300 }
354 ret = h.to_s
355
356 assert_include ret, '"c"=>300'
357 assert_include ret, '"a"=>100'
358 assert_include ret, '"d"=>400'
359end
360
361assert('Hash#rehash') do
362 h = {[:a] => "b"}
363 # hash key modified
364 h.keys[0][0] = :b
365 # h[[:b]] => nil
366 h.rehash
367 assert_equal("b", h[[:b]])
368end
369
370assert('Hash#freeze') do
371 h = {}.freeze
372 assert_raise(RuntimeError) do
373 h[:a] = 'b'
374 end
375end
Note: See TracBrowser for help on using the repository browser.