diff options
-rw-r--r-- | lib/set.rb | 9 | ||||
-rw-r--r-- | test/test_set.rb | 6 |
2 files changed, 13 insertions, 2 deletions
diff --git a/lib/set.rb b/lib/set.rb index 682cb74897..ec4dabdfca 100644 --- a/lib/set.rb +++ b/lib/set.rb @@ -474,7 +474,14 @@ class Set # Set[1, 2, 3].intersect? Set[4, 5] #=> false # Set[1, 2, 3].intersect? Set[3, 4] #=> true def intersect?(set) - set.is_a?(Set) or raise ArgumentError, "value must be a set" + case set + when Set + # nothing + when Array + Set.new(set) + else + raise ArgumentError, "value must be a set or array" + end if size < set.size any? { |o| set.include?(o) } else diff --git a/test/test_set.rb b/test/test_set.rb index af9806ed51..b92930a445 100644 --- a/test/test_set.rb +++ b/test/test_set.rb @@ -354,13 +354,17 @@ class TC_Set < Test::Unit::TestCase case expected when true assert_send([set, :intersect?, other]) + assert_send([set, :intersect?, other.to_a]) assert_send([other, :intersect?, set]) assert_not_send([set, :disjoint?, other]) + assert_not_send([set, :disjoint?, other.to_a]) assert_not_send([other, :disjoint?, set]) when false assert_not_send([set, :intersect?, other]) + assert_not_send([set, :intersect?, other.to_a]) assert_not_send([other, :intersect?, set]) assert_send([set, :disjoint?, other]) + assert_send([set, :disjoint?, other.to_a]) assert_send([other, :disjoint?, set]) when Class assert_raise(expected) { @@ -378,7 +382,7 @@ class TC_Set < Test::Unit::TestCase set = Set[3,4,5] assert_intersect(ArgumentError, set, 3) - assert_intersect(ArgumentError, set, [2,4,6]) + assert_intersect(true, set, Set[2,4,6]) assert_intersect(true, set, set) assert_intersect(true, set, Set[2,4]) |