From d736eded9d4cb7ab5ddc693059d55f8d1e369c98 Mon Sep 17 00:00:00 2001 From: knu Date: Mon, 16 Nov 2015 06:43:43 +0000 Subject: * lib/set.rb (#>=, #>, #<=, #<): Make use of Hash#>=, #>, #<, and #<= when comparing against an instance of the same kind. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52586 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- lib/set.rb | 44 ++++++++++++++++++++++++++++++++------------ 1 file changed, 32 insertions(+), 12 deletions(-) (limited to 'lib/set.rb') diff --git a/lib/set.rb b/lib/set.rb index d612fdcb92..17775b07ea 100644 --- a/lib/set.rb +++ b/lib/set.rb @@ -220,33 +220,53 @@ class Set # Returns true if the set is a superset of the given set. def superset?(set) - set.is_a?(Set) or raise ArgumentError, "value must be a set" - return false if size < set.size - set.all? { |o| include?(o) } + case + when set.instance_of?(self.class) + @hash >= set.instance_variable_get(:@hash) + when set.is_a?(Set) + size >= set.size && set.all? { |o| include?(o) } + else + raise ArgumentError, "value must be a set" + end end alias >= superset? # Returns true if the set is a proper superset of the given set. def proper_superset?(set) - set.is_a?(Set) or raise ArgumentError, "value must be a set" - return false if size <= set.size - set.all? { |o| include?(o) } + case + when set.instance_of?(self.class) + @hash > set.instance_variable_get(:@hash) + when set.is_a?(Set) + size > set.size && set.all? { |o| include?(o) } + else + raise ArgumentError, "value must be a set" + end end alias > proper_superset? # Returns true if the set is a subset of the given set. def subset?(set) - set.is_a?(Set) or raise ArgumentError, "value must be a set" - return false if set.size < size - all? { |o| set.include?(o) } + case + when set.instance_of?(self.class) + @hash <= set.instance_variable_get(:@hash) + when set.is_a?(Set) + size <= set.size && all? { |o| set.include?(o) } + else + raise ArgumentError, "value must be a set" + end end alias <= subset? # Returns true if the set is a proper subset of the given set. def proper_subset?(set) - set.is_a?(Set) or raise ArgumentError, "value must be a set" - return false if set.size <= size - all? { |o| set.include?(o) } + case + when set.instance_of?(self.class) + @hash < set.instance_variable_get(:@hash) + when set.is_a?(Set) + size < set.size && all? { |o| set.include?(o) } + else + raise ArgumentError, "value must be a set" + end end alias < proper_subset? -- cgit v1.2.3