Bug #11544 ยป 0001-lib-set.rb-use-args-of-Enumerable-to_set-Set-to_set.patch
lib/set.rb | ||
---|---|---|
# overridden.
|
||
def to_set(klass = Set, *args, &block)
|
||
return self if instance_of?(Set) && klass == Set && block.nil? && args.empty?
|
||
klass.new(self, *args, &block)
|
||
super
|
||
end
|
||
def flatten_merge(set, seen = Set.new) # :nodoc:
|
||
... | ... | |
# Makes a set from the enumerable object with given arguments.
|
||
# Needs to +require "set"+ to use this method.
|
||
def to_set(klass = Set, *args, &block)
|
||
klass.new(self, *args, &block)
|
||
if respond_to?(:<<)
|
||
klass.new(args.inject(dup) { |result, item| result << item }, &block)
|
||
else
|
||
args.inject(klass.new(self, &block)) { |result, item| result << (block ? block[item] : item) }
|
||
end
|
||
end
|
||
end
|
||
test/test_set.rb | ||
---|---|---|
set = ary.to_set(SortedSet) { |o| o * -2 }
|
||
assert_instance_of(SortedSet, set)
|
||
assert_equal([-10,-8,-6,-4,-2], set.sort)
|
||
set = ary.to_set(Set, 6, 7, 8)
|
||
assert_instance_of(Set, set)
|
||
assert_equal([1,2,3,4,5,6,7,8], set.sort)
|
||
set = ary.to_set(Set, 6, 7, 8) { |o| o * -2 }
|
||
assert_instance_of(Set, set)
|
||
assert_equal([-16,-14,-12,-10,-8,-6,-4,-2], set.sort)
|
||
set = ary.to_set
|
||
sorted_set = set.to_set(SortedSet, 6, -1, 4.3)
|
||
assert_instance_of(Set, set)
|
||
assert_instance_of(SortedSet, sorted_set)
|
||
assert_equal([1,2,3,4,5], set.sort)
|
||
assert_equal([-1,1,2,3,4,4.3,5,6], sorted_set.to_a)
|
||
set = sorted_set.to_set { |o| o * 2 }
|
||
assert_instance_of(Set, set)
|
||
assert_equal([-2,2,4,6,8,8.6,10,12], set.sort)
|
||
sorted_set = sorted_set.to_set(SortedSet, -1, -2) { |o| o * 2 }
|
||
assert_instance_of(SortedSet, sorted_set)
|
||
assert_equal([-4,-2,2,4,6,8,8.6,10,12], sorted_set.to_a)
|
||
hash = { 1 => 'Oh', 3 => 'Nagashima' }
|
||
set = hash.to_set
|
||
assert_equal(true, set.include?([1,'Oh']))
|
||
assert_equal(true, set.include?([3,'Nagashima']))
|
||
args = { 4 => 'Kurosawa', 14 => 'Sawamura', 16 => 'Kawakami' , 34 => 'Kaneda' }
|
||
set = hash.to_set(Set, *args)
|
||
assert_instance_of(Set, set)
|
||
assert_equal(true, set.include?([1,'Oh']))
|
||
assert_equal(true, set.include?([3,'Nagashima']))
|
||
assert_equal(true, set.include?([4,'Kurosawa']))
|
||
assert_equal(true, set.include?([14, 'Sawamura']))
|
||
assert_equal(true, set.include?([16, 'Kawakami']))
|
||
assert_equal(true, set.include?([34, 'Kaneda']))
|
||
set = hash.to_set(SortedSet, *args) { |o| o.last }
|
||
assert_instance_of(SortedSet, set)
|
||
assert_equal(['Kaneda','Kawakami','Kurosawa','Nagashima','Oh','Sawamura'], set.to_a)
|
||
end
|
||
end
|