Skip to content

Commit fa86026

Browse files
committed
move Hash comparison methods to mruby-hash-ext gem
1 parent 1fc9074 commit fa86026

File tree

4 files changed

+168
-168
lines changed

4 files changed

+168
-168
lines changed

mrbgems/mruby-hash-ext/mrblib/hash.rb

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -250,4 +250,100 @@ def key(val)
250250
def to_h
251251
self
252252
end
253+
254+
##
255+
# call-seq:
256+
# hash < other -> true or false
257+
#
258+
# Returns <code>true</code> if <i>hash</i> is subset of
259+
# <i>other</i>.
260+
#
261+
# h1 = {a:1, b:2}
262+
# h2 = {a:1, b:2, c:3}
263+
# h1 < h2 #=> true
264+
# h2 < h1 #=> false
265+
# h1 < h1 #=> false
266+
#
267+
def <(hash)
268+
begin
269+
hash = hash.to_hash
270+
rescue NoMethodError
271+
raise TypeError, "can't convert #{hash.class} to Hash"
272+
end
273+
size < hash.size and all? {|key, val|
274+
hash.key?(key) and hash[key] == val
275+
}
276+
end
277+
278+
##
279+
# call-seq:
280+
# hash <= other -> true or false
281+
#
282+
# Returns <code>true</code> if <i>hash</i> is subset of
283+
# <i>other</i> or equals to <i>other</i>.
284+
#
285+
# h1 = {a:1, b:2}
286+
# h2 = {a:1, b:2, c:3}
287+
# h1 <= h2 #=> true
288+
# h2 <= h1 #=> false
289+
# h1 <= h1 #=> true
290+
#
291+
def <=(hash)
292+
begin
293+
hash = hash.to_hash
294+
rescue NoMethodError
295+
raise TypeError, "can't convert #{hash.class} to Hash"
296+
end
297+
size <= hash.size and all? {|key, val|
298+
hash.key?(key) and hash[key] == val
299+
}
300+
end
301+
302+
##
303+
# call-seq:
304+
# hash > other -> true or false
305+
#
306+
# Returns <code>true</code> if <i>other</i> is subset of
307+
# <i>hash</i>.
308+
#
309+
# h1 = {a:1, b:2}
310+
# h2 = {a:1, b:2, c:3}
311+
# h1 > h2 #=> false
312+
# h2 > h1 #=> true
313+
# h1 > h1 #=> false
314+
#
315+
def >(hash)
316+
begin
317+
hash = hash.to_hash
318+
rescue NoMethodError
319+
raise TypeError, "can't convert #{hash.class} to Hash"
320+
end
321+
size > hash.size and hash.all? {|key, val|
322+
key?(key) and self[key] == val
323+
}
324+
end
325+
326+
##
327+
# call-seq:
328+
# hash >= other -> true or false
329+
#
330+
# Returns <code>true</code> if <i>other</i> is subset of
331+
# <i>hash</i> or equals to <i>hash</i>.
332+
#
333+
# h1 = {a:1, b:2}
334+
# h2 = {a:1, b:2, c:3}
335+
# h1 >= h2 #=> false
336+
# h2 >= h1 #=> true
337+
# h1 >= h1 #=> true
338+
#
339+
def >=(hash)
340+
begin
341+
hash = hash.to_hash
342+
rescue NoMethodError
343+
raise TypeError, "can't convert #{hash.class} to Hash"
344+
end
345+
size >= hash.size and hash.all? {|key, val|
346+
key?(key) and self[key] == val
347+
}
348+
end
253349
end

mrbgems/mruby-hash-ext/test/hash.rb

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,3 +158,75 @@
158158
assert_equal Hash, h.to_h.class
159159
assert_equal h, h.to_h
160160
end
161+
162+
assert('Hash#<') do
163+
h1 = {a:1, b:2}
164+
h2 = {a:1, b:2, c:3}
165+
166+
assert_false(h1 < h1)
167+
assert_true(h1 < h2)
168+
assert_false(h2 < h1)
169+
assert_false(h2 < h2)
170+
171+
h1 = {a:1}
172+
h2 = {a:2}
173+
174+
assert_false(h1 < h1)
175+
assert_false(h1 < h2)
176+
assert_false(h2 < h1)
177+
assert_false(h2 < h2)
178+
end
179+
180+
assert('Hash#<=') do
181+
h1 = {a:1, b:2}
182+
h2 = {a:1, b:2, c:3}
183+
184+
assert_true(h1 <= h1)
185+
assert_true(h1 <= h2)
186+
assert_false(h2 <= h1)
187+
assert_true(h2 <= h2)
188+
189+
h1 = {a:1}
190+
h2 = {a:2}
191+
192+
assert_true(h1 <= h1)
193+
assert_false(h1 <= h2)
194+
assert_false(h2 <= h1)
195+
assert_true(h2 <= h2)
196+
end
197+
198+
assert('Hash#>=') do
199+
h1 = {a:1, b:2}
200+
h2 = {a:1, b:2, c:3}
201+
202+
assert_true(h1 >= h1)
203+
assert_false(h1 >= h2)
204+
assert_true(h2 >= h1)
205+
assert_true(h2 >= h2)
206+
207+
h1 = {a:1}
208+
h2 = {a:2}
209+
210+
assert_true(h1 >= h1)
211+
assert_false(h1 >= h2)
212+
assert_false(h2 >= h1)
213+
assert_true(h2 >= h2)
214+
end
215+
216+
assert('Hash#>') do
217+
h1 = {a:1, b:2}
218+
h2 = {a:1, b:2, c:3}
219+
220+
assert_false(h1 > h1)
221+
assert_false(h1 > h2)
222+
assert_true(h2 > h1)
223+
assert_false(h2 > h2)
224+
225+
h1 = {a:1}
226+
h2 = {a:2}
227+
228+
assert_false(h1 > h1)
229+
assert_false(h1 > h2)
230+
assert_false(h2 > h1)
231+
assert_false(h2 > h2)
232+
end

mrblib/hash.rb

Lines changed: 0 additions & 96 deletions
Original file line numberDiff line numberDiff line change
@@ -346,102 +346,6 @@ def __update(h)
346346
h.each_key{|k| self[k] = h[k]}
347347
self
348348
end
349-
350-
##
351-
# call-seq:
352-
# hash < other -> true or false
353-
#
354-
# Returns <code>true</code> if <i>hash</i> is subset of
355-
# <i>other</i>.
356-
#
357-
# h1 = {a:1, b:2}
358-
# h2 = {a:1, b:2, c:3}
359-
# h1 < h2 #=> true
360-
# h2 < h1 #=> false
361-
# h1 < h1 #=> false
362-
#
363-
def <(hash)
364-
begin
365-
hash = hash.to_hash
366-
rescue NoMethodError
367-
raise TypeError, "can't convert #{hash.class} to Hash"
368-
end
369-
size < hash.size and all? {|key, val|
370-
hash.key?(key) and hash[key] == val
371-
}
372-
end
373-
374-
##
375-
# call-seq:
376-
# hash <= other -> true or false
377-
#
378-
# Returns <code>true</code> if <i>hash</i> is subset of
379-
# <i>other</i> or equals to <i>other</i>.
380-
#
381-
# h1 = {a:1, b:2}
382-
# h2 = {a:1, b:2, c:3}
383-
# h1 <= h2 #=> true
384-
# h2 <= h1 #=> false
385-
# h1 <= h1 #=> true
386-
#
387-
def <=(hash)
388-
begin
389-
hash = hash.to_hash
390-
rescue NoMethodError
391-
raise TypeError, "can't convert #{hash.class} to Hash"
392-
end
393-
size <= hash.size and all? {|key, val|
394-
hash.key?(key) and hash[key] == val
395-
}
396-
end
397-
398-
##
399-
# call-seq:
400-
# hash > other -> true or false
401-
#
402-
# Returns <code>true</code> if <i>other</i> is subset of
403-
# <i>hash</i>.
404-
#
405-
# h1 = {a:1, b:2}
406-
# h2 = {a:1, b:2, c:3}
407-
# h1 > h2 #=> false
408-
# h2 > h1 #=> true
409-
# h1 > h1 #=> false
410-
#
411-
def >(hash)
412-
begin
413-
hash = hash.to_hash
414-
rescue NoMethodError
415-
raise TypeError, "can't convert #{hash.class} to Hash"
416-
end
417-
size > hash.size and hash.all? {|key, val|
418-
key?(key) and self[key] == val
419-
}
420-
end
421-
422-
##
423-
# call-seq:
424-
# hash >= other -> true or false
425-
#
426-
# Returns <code>true</code> if <i>other</i> is subset of
427-
# <i>hash</i> or equals to <i>hash</i>.
428-
#
429-
# h1 = {a:1, b:2}
430-
# h2 = {a:1, b:2, c:3}
431-
# h1 >= h2 #=> false
432-
# h2 >= h1 #=> true
433-
# h1 >= h1 #=> true
434-
#
435-
def >=(hash)
436-
begin
437-
hash = hash.to_hash
438-
rescue NoMethodError
439-
raise TypeError, "can't convert #{hash.class} to Hash"
440-
end
441-
size >= hash.size and hash.all? {|key, val|
442-
key?(key) and self[key] == val
443-
}
444-
end
445349
end
446350

447351
##

test/t/hash.rb

Lines changed: 0 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -351,75 +351,3 @@
351351
h.rehash
352352
assert_equal("b", h[[:b]])
353353
end
354-
355-
assert('Hash#<') do
356-
h1 = {a:1, b:2}
357-
h2 = {a:1, b:2, c:3}
358-
359-
assert_false(h1 < h1)
360-
assert_true(h1 < h2)
361-
assert_false(h2 < h1)
362-
assert_false(h2 < h2)
363-
364-
h1 = {a:1}
365-
h2 = {a:2}
366-
367-
assert_false(h1 < h1)
368-
assert_false(h1 < h2)
369-
assert_false(h2 < h1)
370-
assert_false(h2 < h2)
371-
end
372-
373-
assert('Hash#<=') do
374-
h1 = {a:1, b:2}
375-
h2 = {a:1, b:2, c:3}
376-
377-
assert_true(h1 <= h1)
378-
assert_true(h1 <= h2)
379-
assert_false(h2 <= h1)
380-
assert_true(h2 <= h2)
381-
382-
h1 = {a:1}
383-
h2 = {a:2}
384-
385-
assert_true(h1 <= h1)
386-
assert_false(h1 <= h2)
387-
assert_false(h2 <= h1)
388-
assert_true(h2 <= h2)
389-
end
390-
391-
assert('Hash#>=') do
392-
h1 = {a:1, b:2}
393-
h2 = {a:1, b:2, c:3}
394-
395-
assert_true(h1 >= h1)
396-
assert_false(h1 >= h2)
397-
assert_true(h2 >= h1)
398-
assert_true(h2 >= h2)
399-
400-
h1 = {a:1}
401-
h2 = {a:2}
402-
403-
assert_true(h1 >= h1)
404-
assert_false(h1 >= h2)
405-
assert_false(h2 >= h1)
406-
assert_true(h2 >= h2)
407-
end
408-
409-
assert('Hash#>') do
410-
h1 = {a:1, b:2}
411-
h2 = {a:1, b:2, c:3}
412-
413-
assert_false(h1 > h1)
414-
assert_false(h1 > h2)
415-
assert_true(h2 > h1)
416-
assert_false(h2 > h2)
417-
418-
h1 = {a:1}
419-
h2 = {a:2}
420-
421-
assert_false(h1 > h1)
422-
assert_false(h1 > h2)
423-
assert_false(h2 > h1)
424-
assert_false(h2 > h2)
425-
end

0 commit comments

Comments
 (0)