diff --git a/lib/set.rb b/lib/set.rb index a8f4345..784d11c 100644 --- a/lib/set.rb +++ b/lib/set.rb @@ -87,7 +87,7 @@ class Set if block do_with_enum(enum) { |o| add(block[o]) } else - merge(enum) + merge!(enum) end end @@ -155,7 +155,7 @@ class Set else do_with_enum(enum) # make sure enum is enumerable before calling clear clear - merge(enum) + merge!(enum) end end @@ -379,9 +379,13 @@ class Set self if size != n end + def merge(enum) + dup.merge!(enum) + end + # Merges the elements of the given enumerable object to the set and # returns self. - def merge(enum) + def merge!(enum) if enum.instance_of?(self.class) @hash.update(enum.instance_variable_get(:@hash)) else @@ -401,7 +405,7 @@ class Set # Returns a new set built by merging the set and the elements of the # given enumerable object. def |(enum) - dup.merge(enum) + dup.merge!(enum) end alias + | ## alias union | ## diff --git a/test/test_set.rb b/test/test_set.rb index 66944f5..061d2d1 100644 --- a/test/test_set.rb +++ b/test/test_set.rb @@ -479,6 +479,14 @@ class TC_Set < Test::Unit::TestCase set = Set[1,2,3] ret = set.merge([2,4,6]) + assert_not_same(set, ret) + assert_equal(Set[1,2,3,4,6], ret) + end + + def test_merge! + set = Set[1,2,3] + + ret = set.merge!([2,4,6]) assert_same(set, ret) assert_equal(Set[1,2,3,4,6], set) end