diff options
Diffstat (limited to 'spec/ruby/core/set')
62 files changed, 468 insertions, 490 deletions
diff --git a/spec/ruby/core/set/add_spec.rb b/spec/ruby/core/set/add_spec.rb index 0fe1a0926c..1a018b186a 100644 --- a/spec/ruby/core/set/add_spec.rb +++ b/spec/ruby/core/set/add_spec.rb @@ -1,8 +1,18 @@ require_relative '../../spec_helper' -require_relative 'shared/add' describe "Set#add" do - it_behaves_like :set_add, :add + before :each do + @set = Set.new + end + + it "adds the passed Object to self" do + @set.add("dog") + @set.should.include?("dog") + end + + it "returns self" do + @set.add("dog").should.equal?(@set) + end end describe "Set#add?" do @@ -12,22 +22,22 @@ describe "Set#add?" do it "adds the passed Object to self" do @set.add?("cat") - @set.should include("cat") + @set.should.include?("cat") end it "returns self when the Object has not yet been added to self" do - @set.add?("cat").should equal(@set) + @set.add?("cat").should.equal?(@set) end it "returns nil when the Object has already been added to self" do @set.add?("cat") - @set.add?("cat").should be_nil + @set.add?("cat").should == nil end it "raises RuntimeError when called during iteration" do set = Set[:a, :b, :c, :d, :e, :f] set.each do |_m| - -> { set << 1 }.should raise_error(RuntimeError, /iteration/) + -> { set << 1 }.should.raise(RuntimeError, /iteration/) end set.should == Set[:a, :b, :c, :d, :e, :f] end diff --git a/spec/ruby/core/set/append_spec.rb b/spec/ruby/core/set/append_spec.rb index 82d34d9130..4f4e2351e2 100644 --- a/spec/ruby/core/set/append_spec.rb +++ b/spec/ruby/core/set/append_spec.rb @@ -1,6 +1,7 @@ require_relative '../../spec_helper' -require_relative 'shared/add' describe "Set#<<" do - it_behaves_like :set_add, :<< + it "is an alias of Set#add" do + Set.instance_method(:<<).should == Set.instance_method(:add) + end end diff --git a/spec/ruby/core/set/case_compare_spec.rb b/spec/ruby/core/set/case_compare_spec.rb index 3781b1b963..6fe749c79b 100644 --- a/spec/ruby/core/set/case_compare_spec.rb +++ b/spec/ruby/core/set/case_compare_spec.rb @@ -1,11 +1,7 @@ require_relative '../../spec_helper' -require_relative 'shared/include' describe "Set#===" do - it_behaves_like :set_include, :=== - - it "is an alias for include?" do - set = Set.new - set.method(:===).should == set.method(:include?) + it "is an alias of Set#include?" do + Set.instance_method(:===).should == Set.instance_method(:include?) end end diff --git a/spec/ruby/core/set/case_equality_spec.rb b/spec/ruby/core/set/case_equality_spec.rb deleted file mode 100644 index 19c1fb6b9c..0000000000 --- a/spec/ruby/core/set/case_equality_spec.rb +++ /dev/null @@ -1,6 +0,0 @@ -require_relative '../../spec_helper' -require_relative 'shared/include' - -describe "Set#===" do - it_behaves_like :set_include, :=== -end diff --git a/spec/ruby/core/set/classify_spec.rb b/spec/ruby/core/set/classify_spec.rb index d86ea2722d..a225ab7cbb 100644 --- a/spec/ruby/core/set/classify_spec.rb +++ b/spec/ruby/core/set/classify_spec.rb @@ -13,7 +13,7 @@ describe "Set#classify" do it "returns an Enumerator when passed no block" do enum = @set.classify - enum.should be_an_instance_of(Enumerator) + enum.should.instance_of?(Enumerator) classified = enum.each { |x| x.length } classified.should == { 3 => Set["one", "two"], 4 => Set["four"], 5 => Set["three"] } diff --git a/spec/ruby/core/set/clear_spec.rb b/spec/ruby/core/set/clear_spec.rb index ebeac211d3..c61a0d78f2 100644 --- a/spec/ruby/core/set/clear_spec.rb +++ b/spec/ruby/core/set/clear_spec.rb @@ -7,10 +7,10 @@ describe "Set#clear" do it "removes all elements from self" do @set.clear - @set.should be_empty + @set.should.empty? end it "returns self" do - @set.clear.should equal(@set) + @set.clear.should.equal?(@set) end end diff --git a/spec/ruby/core/set/collect_spec.rb b/spec/ruby/core/set/collect_spec.rb index d186f1a0d9..b78ee493d4 100644 --- a/spec/ruby/core/set/collect_spec.rb +++ b/spec/ruby/core/set/collect_spec.rb @@ -1,6 +1,7 @@ require_relative '../../spec_helper' -require_relative 'shared/collect' describe "Set#collect!" do - it_behaves_like :set_collect_bang, :collect! + it "is an alias of Set#map!" do + Set.instance_method(:collect!).should == Set.instance_method(:map!) + end end diff --git a/spec/ruby/core/set/compare_by_identity_spec.rb b/spec/ruby/core/set/compare_by_identity_spec.rb index 0dda6d79f0..458e760da0 100644 --- a/spec/ruby/core/set/compare_by_identity_spec.rb +++ b/spec/ruby/core/set/compare_by_identity_spec.rb @@ -16,9 +16,9 @@ describe "Set#compare_by_identity" do elt = [1] set = Set.new set << elt - set.member?(elt.dup).should be_true + set.member?(elt.dup).should == true set.compare_by_identity - set.member?(elt.dup).should be_false + set.member?(elt.dup).should == false end it "rehashes internally so that old members can be looked up" do @@ -28,19 +28,19 @@ describe "Set#compare_by_identity" do def o.hash; 123; end set << o set.compare_by_identity - set.member?(o).should be_true + set.member?(o).should == true end it "returns self" do set = Set.new result = set.compare_by_identity - result.should equal(set) + result.should.equal?(set) end it "is idempotent and has no effect on an already compare_by_identity set" do set = Set.new.compare_by_identity set << :foo - set.compare_by_identity.should equal(set) + set.compare_by_identity.should.equal?(set) set.should.compare_by_identity? set.to_a.should == [:foo] end @@ -69,7 +69,7 @@ describe "Set#compare_by_identity" do elt.should_not_receive(:hash) set = Set.new.compare_by_identity set << elt - set.member?(elt).should be_true + set.member?(elt).should == true end it "regards #dup'd objects as having different identities" do @@ -90,21 +90,21 @@ describe "Set#compare_by_identity" do set.to_a.sort.should == [a1, a2].sort end - ruby_version_is "3.5" do + ruby_version_is "4.0" do it "raises a FrozenError on frozen sets" do set = Set.new.freeze -> { set.compare_by_identity - }.should raise_error(FrozenError, /can't modify frozen Set: (#<)?Set(\[|: {)[\]}]>?/) + }.should.raise(FrozenError, /can't modify frozen Set: (#<)?Set(\[|: {)[\]}]>?/) end end - ruby_version_is ""..."3.5" do + ruby_version_is ""..."4.0" do it "raises a FrozenError on frozen sets" do set = Set.new.freeze -> { set.compare_by_identity - }.should raise_error(FrozenError, /frozen Hash/) + }.should.raise(FrozenError, /frozen Hash/) end end diff --git a/spec/ruby/core/set/comparison_spec.rb b/spec/ruby/core/set/comparison_spec.rb index 62059b70b3..eb18a198e5 100644 --- a/spec/ruby/core/set/comparison_spec.rb +++ b/spec/ruby/core/set/comparison_spec.rb @@ -17,10 +17,10 @@ describe "Set#<=>" do end it "returns nil if the set has unique elements" do - (Set[1, 2, 3] <=> Set[:a, :b, :c]).should be_nil + (Set[1, 2, 3] <=> Set[:a, :b, :c]).should == nil end it "returns nil when the argument is not set-like" do - (Set[] <=> false).should be_nil + (Set[] <=> false).should == nil end end diff --git a/spec/ruby/core/set/constructor_spec.rb b/spec/ruby/core/set/constructor_spec.rb index 365081ad39..11138f3a5b 100644 --- a/spec/ruby/core/set/constructor_spec.rb +++ b/spec/ruby/core/set/constructor_spec.rb @@ -4,11 +4,11 @@ describe "Set[]" do it "returns a new Set populated with the passed Objects" do set = Set[1, 2, 3] - set.instance_of?(Set).should be_true - set.size.should eql(3) + set.instance_of?(Set).should == true + set.size.should.eql?(3) - set.should include(1) - set.should include(2) - set.should include(3) + set.should.include?(1) + set.should.include?(2) + set.should.include?(3) end end diff --git a/spec/ruby/core/set/delete_if_spec.rb b/spec/ruby/core/set/delete_if_spec.rb index beda73a5e5..b231dff50d 100644 --- a/spec/ruby/core/set/delete_if_spec.rb +++ b/spec/ruby/core/set/delete_if_spec.rb @@ -13,25 +13,25 @@ describe "Set#delete_if" do it "deletes every element from self for which the passed block returns true" do @set.delete_if { |x| x.size == 3 } - @set.size.should eql(1) + @set.size.should.eql?(1) - @set.should_not include("one") - @set.should_not include("two") - @set.should include("three") + @set.should_not.include?("one") + @set.should_not.include?("two") + @set.should.include?("three") end it "returns self" do - @set.delete_if { |x| x }.should equal(@set) + @set.delete_if { |x| x }.should.equal?(@set) end it "returns an Enumerator when passed no block" do enum = @set.delete_if - enum.should be_an_instance_of(Enumerator) + enum.should.instance_of?(Enumerator) enum.each { |x| x.size == 3 } - @set.should_not include("one") - @set.should_not include("two") - @set.should include("three") + @set.should_not.include?("one") + @set.should_not.include?("two") + @set.should.include?("three") end end diff --git a/spec/ruby/core/set/delete_spec.rb b/spec/ruby/core/set/delete_spec.rb index a2543ecbee..cdc6dd7b36 100644 --- a/spec/ruby/core/set/delete_spec.rb +++ b/spec/ruby/core/set/delete_spec.rb @@ -7,12 +7,12 @@ describe "Set#delete" do it "deletes the passed Object from self" do @set.delete("a") - @set.should_not include("a") + @set.should_not.include?("a") end it "returns self" do - @set.delete("a").should equal(@set) - @set.delete("x").should equal(@set) + @set.delete("a").should.equal?(@set) + @set.delete("x").should.equal?(@set) end end @@ -23,14 +23,14 @@ describe "Set#delete?" do it "deletes the passed Object from self" do @set.delete?("a") - @set.should_not include("a") + @set.should_not.include?("a") end it "returns self when the passed Object is in self" do - @set.delete?("a").should equal(@set) + @set.delete?("a").should.equal?(@set) end it "returns nil when the passed Object is not in self" do - @set.delete?("x").should be_nil + @set.delete?("x").should == nil end end diff --git a/spec/ruby/core/set/difference_spec.rb b/spec/ruby/core/set/difference_spec.rb index 149f946592..22d89973a8 100644 --- a/spec/ruby/core/set/difference_spec.rb +++ b/spec/ruby/core/set/difference_spec.rb @@ -1,6 +1,7 @@ require_relative '../../spec_helper' -require_relative 'shared/difference' describe "Set#difference" do - it_behaves_like :set_difference, :difference + it "is an alias of Set#-" do + Set.instance_method(:difference).should == Set.instance_method(:-) + end end diff --git a/spec/ruby/core/set/disjoint_spec.rb b/spec/ruby/core/set/disjoint_spec.rb index 89a3c4b157..d415c21045 100644 --- a/spec/ruby/core/set/disjoint_spec.rb +++ b/spec/ruby/core/set/disjoint_spec.rb @@ -12,11 +12,11 @@ describe "Set#disjoint?" do context "when comparing to a Set-like object" do it "returns false when a Set has at least one element in common with a Set-like object" do - Set[1, 2].disjoint?(SetSpecs::SetLike.new([2, 3])).should be_false + Set[1, 2].disjoint?(SetSpecs::SetLike.new([2, 3])).should == false end it "returns true when a Set has no element in common with a Set-like object" do - Set[1, 2].disjoint?(SetSpecs::SetLike.new([3, 4])).should be_true + Set[1, 2].disjoint?(SetSpecs::SetLike.new([3, 4])).should == true end end end diff --git a/spec/ruby/core/set/divide_spec.rb b/spec/ruby/core/set/divide_spec.rb index cbe0042f16..409a22df75 100644 --- a/spec/ruby/core/set/divide_spec.rb +++ b/spec/ruby/core/set/divide_spec.rb @@ -14,7 +14,7 @@ describe "Set#divide" do it "returns an enumerator when not passed a block" do ret = Set[1, 2, 3, 4].divide - ret.should be_kind_of(Enumerator) + ret.should.is_a?(Enumerator) ret.each(&:even?).should == Set[Set[1, 3], Set[2, 4]] end end @@ -25,7 +25,7 @@ describe "Set#divide when passed a block with an arity of 2" do set.map{ |x| x.to_a.sort }.sort.should == [[1], [3, 4], [6], [9, 10, 11]] end - ruby_version_is "3.5" do + ruby_version_is "4.0" do it "yields each two Object to the block" do ret = [] Set[1, 2].divide { |x, y| ret << [x, y] } @@ -33,7 +33,7 @@ describe "Set#divide when passed a block with an arity of 2" do end end - ruby_version_is ""..."3.5" do + ruby_version_is ""..."4.0" do it "yields each two Object to the block" do ret = [] Set[1, 2].divide { |x, y| ret << [x, y] } @@ -43,7 +43,7 @@ describe "Set#divide when passed a block with an arity of 2" do it "returns an enumerator when not passed a block" do ret = Set[1, 2, 3, 4].divide - ret.should be_kind_of(Enumerator) + ret.should.is_a?(Enumerator) ret.each { |a, b| (a + b).even? }.should == Set[Set[1, 3], Set[2, 4]] end end @@ -51,8 +51,8 @@ end describe "Set#divide when passed a block with an arity of > 2" do it "only uses the first element if the arity > 2" do set = Set["one", "two", "three", "four", "five"].divide do |x, y, z| - y.should be_nil - z.should be_nil + y.should == nil + z.should == nil x.length end set.map { |x| x.to_a.sort }.sort.should == [["five", "four"], ["one", "two"], ["three"]] diff --git a/spec/ruby/core/set/each_spec.rb b/spec/ruby/core/set/each_spec.rb index 3d9cdc2d46..bdafc99571 100644 --- a/spec/ruby/core/set/each_spec.rb +++ b/spec/ruby/core/set/each_spec.rb @@ -12,12 +12,12 @@ describe "Set#each" do end it "returns self" do - @set.each { |x| x }.should equal(@set) + @set.each { |x| x }.should.equal?(@set) end it "returns an Enumerator when not passed a block" do enum = @set.each - enum.should be_an_instance_of(Enumerator) + enum.should.instance_of?(Enumerator) ret = [] enum.each { |x| ret << x } diff --git a/spec/ruby/core/set/empty_spec.rb b/spec/ruby/core/set/empty_spec.rb index 4b55658e20..c71f2ce18d 100644 --- a/spec/ruby/core/set/empty_spec.rb +++ b/spec/ruby/core/set/empty_spec.rb @@ -2,8 +2,8 @@ require_relative '../../spec_helper' describe "Set#empty?" do it "returns true if self is empty" do - Set[].empty?.should be_true - Set[1].empty?.should be_false - Set[1,2,3].empty?.should be_false + Set[].empty?.should == true + Set[1].empty?.should == false + Set[1,2,3].empty?.should == false end end diff --git a/spec/ruby/core/set/eql_spec.rb b/spec/ruby/core/set/eql_spec.rb index 4ad5c3aa5a..e7eacf2999 100644 --- a/spec/ruby/core/set/eql_spec.rb +++ b/spec/ruby/core/set/eql_spec.rb @@ -1,14 +1,22 @@ require_relative '../../spec_helper' describe "Set#eql?" do - it "returns true when the passed argument is a Set and contains the same elements" do - Set[].should eql(Set[]) - Set[1, 2, 3].should eql(Set[1, 2, 3]) - Set[1, 2, 3].should eql(Set[3, 2, 1]) - Set["a", :b, ?c].should eql(Set[?c, :b, "a"]) + ruby_version_is ""..."4.0" do + it "returns true when the passed argument is a Set and contains the same elements" do + Set[].should.eql?(Set[]) + Set[1, 2, 3].should.eql?(Set[1, 2, 3]) + Set[1, 2, 3].should.eql?(Set[3, 2, 1]) + Set["a", :b, ?c].should.eql?(Set[?c, :b, "a"]) - Set[1, 2, 3].should_not eql(Set[1.0, 2, 3]) - Set[1, 2, 3].should_not eql(Set[2, 3]) - Set[1, 2, 3].should_not eql(Set[]) + Set[1, 2, 3].should_not.eql?(Set[1.0, 2, 3]) + Set[1, 2, 3].should_not.eql?(Set[2, 3]) + Set[1, 2, 3].should_not.eql?(Set[]) + end + end + + ruby_version_is "4.0" do + it "is an alias of Set#==" do + Set.instance_method(:eql?).should == Set.instance_method(:==) + end end end diff --git a/spec/ruby/core/set/equal_value_spec.rb b/spec/ruby/core/set/equal_value_spec.rb index e3514928c8..721a79a3f1 100644 --- a/spec/ruby/core/set/equal_value_spec.rb +++ b/spec/ruby/core/set/equal_value_spec.rb @@ -24,7 +24,7 @@ describe "Set#==" do set1.should == set2 end - ruby_version_is ""..."3.5" do + ruby_version_is ""..."4.0" do context "when comparing to a Set-like object" do it "returns true when a Set and a Set-like object contain the same elements" do Set[1, 2, 3].should == SetSpecs::SetLike.new([1, 2, 3]) diff --git a/spec/ruby/core/set/exclusion_spec.rb b/spec/ruby/core/set/exclusion_spec.rb index bbc29afa95..52ee34fe78 100644 --- a/spec/ruby/core/set/exclusion_spec.rb +++ b/spec/ruby/core/set/exclusion_spec.rb @@ -11,7 +11,7 @@ describe "Set#^" do end it "raises an ArgumentError when passed a non-Enumerable" do - -> { @set ^ 3 }.should raise_error(ArgumentError) - -> { @set ^ Object.new }.should raise_error(ArgumentError) + -> { @set ^ 3 }.should.raise(ArgumentError) + -> { @set ^ Object.new }.should.raise(ArgumentError) end end diff --git a/spec/ruby/core/set/filter_spec.rb b/spec/ruby/core/set/filter_spec.rb index 779254ad68..d0c294c27f 100644 --- a/spec/ruby/core/set/filter_spec.rb +++ b/spec/ruby/core/set/filter_spec.rb @@ -1,6 +1,7 @@ require_relative '../../spec_helper' -require_relative 'shared/select' describe "Set#filter!" do - it_behaves_like :set_select_bang, :filter! + it "is an alias of Set#select!" do + Set.instance_method(:filter!).should == Set.instance_method(:select!) + end end diff --git a/spec/ruby/core/set/flatten_merge_spec.rb b/spec/ruby/core/set/flatten_merge_spec.rb index d7c2b30657..3904d969ae 100644 --- a/spec/ruby/core/set/flatten_merge_spec.rb +++ b/spec/ruby/core/set/flatten_merge_spec.rb @@ -1,9 +1,9 @@ require_relative '../../spec_helper' describe "Set#flatten_merge" do - ruby_version_is ""..."3.5" do + ruby_version_is ""..."4.0" do it "is protected" do - Set.should have_protected_instance_method("flatten_merge") + Set.protected_instance_methods(false).should.include?(:flatten_merge) end it "flattens the passed Set and merges it into self" do @@ -18,7 +18,7 @@ describe "Set#flatten_merge" do set2 = Set[5, 6, 7] set2 << set2 - -> { set1.send(:flatten_merge, set2) }.should raise_error(ArgumentError) + -> { set1.send(:flatten_merge, set2) }.should.raise(ArgumentError) end end end diff --git a/spec/ruby/core/set/flatten_spec.rb b/spec/ruby/core/set/flatten_spec.rb index 870eccc2f1..ca6323fac8 100644 --- a/spec/ruby/core/set/flatten_spec.rb +++ b/spec/ruby/core/set/flatten_spec.rb @@ -7,16 +7,16 @@ describe "Set#flatten" do set = Set[1, 2, Set[3, 4, Set[5, 6, Set[7, 8]]], 9, 10] flattened_set = set.flatten - flattened_set.should_not equal(set) + flattened_set.should_not.equal?(set) flattened_set.should == Set[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] end it "raises an ArgumentError when self is recursive" do (set = Set[]) << set - -> { set.flatten }.should raise_error(ArgumentError) + -> { set.flatten }.should.raise(ArgumentError) end - ruby_version_is ""..."3.5" do + ruby_version_is ""..."4.0" do context "when Set contains a Set-like object" do it "returns a copy of self with each included Set-like object flattened" do Set[SetSpecs::SetLike.new([1])].flatten.should == Set[1] @@ -34,26 +34,16 @@ describe "Set#flatten!" do it "returns self when self was modified" do set = Set[1, 2, Set[3, 4]] - set.flatten!.should equal(set) + set.flatten!.should.equal?(set) end it "returns nil when self was not modified" do set = Set[1, 2, 3, 4] - set.flatten!.should be_nil + set.flatten!.should == nil end it "raises an ArgumentError when self is recursive" do (set = Set[]) << set - -> { set.flatten! }.should raise_error(ArgumentError) - end - - version_is(set_version, ""..."1.1.0") do #ruby_version_is ""..."3.3" do - ruby_version_is ""..."3.5" do - context "when Set contains a Set-like object" do - it "flattens self, including Set-like objects" do - Set[SetSpecs::SetLike.new([1])].flatten!.should == Set[1] - end - end - end + -> { set.flatten! }.should.raise(ArgumentError) end end diff --git a/spec/ruby/core/set/gt_spec.rb b/spec/ruby/core/set/gt_spec.rb new file mode 100644 index 0000000000..8a7e421e40 --- /dev/null +++ b/spec/ruby/core/set/gt_spec.rb @@ -0,0 +1,7 @@ +require_relative '../../spec_helper' + +describe "Set#>" do + it "is an alias of Set#proper_superset?" do + Set.instance_method(:>).should == Set.instance_method(:proper_superset?) + end +end diff --git a/spec/ruby/core/set/gte_spec.rb b/spec/ruby/core/set/gte_spec.rb new file mode 100644 index 0000000000..e98c3cb1e2 --- /dev/null +++ b/spec/ruby/core/set/gte_spec.rb @@ -0,0 +1,7 @@ +require_relative '../../spec_helper' + +describe "Set#>=" do + it "is an alias of Set#superset?" do + Set.instance_method(:>=).should == Set.instance_method(:superset?) + end +end diff --git a/spec/ruby/core/set/hash_spec.rb b/spec/ruby/core/set/hash_spec.rb index 4b4696e34c..63a0aa66a5 100644 --- a/spec/ruby/core/set/hash_spec.rb +++ b/spec/ruby/core/set/hash_spec.rb @@ -10,7 +10,7 @@ describe "Set#hash" do Set[1, 2, 3].hash.should_not == Set[:a, "b", ?c].hash end - ruby_version_is ""..."3.5" do + ruby_version_is ""..."4.0" do # see https://github.com/jruby/jruby/issues/8393 it "is equal to nil.hash for an uninitialized Set" do Set.allocate.hash.should == nil.hash diff --git a/spec/ruby/core/set/include_spec.rb b/spec/ruby/core/set/include_spec.rb index dd33bbc3bd..92a6ca04e6 100644 --- a/spec/ruby/core/set/include_spec.rb +++ b/spec/ruby/core/set/include_spec.rb @@ -1,6 +1,31 @@ require_relative '../../spec_helper' -require_relative 'shared/include' describe "Set#include?" do - it_behaves_like :set_include, :include? + it "returns true when self contains the passed Object" do + set = Set[:a, :b, :c] + set.include?(:a).should == true + set.include?(:e).should == false + end + + describe "member equality" do + it "is checked using both #hash and #eql?" do + obj = Object.new + obj_another = Object.new + + def obj.hash; 42 end + def obj_another.hash; 42 end + def obj_another.eql?(o) hash == o.hash end + + set = Set["a", "b", "c", obj] + set.include?(obj_another).should == true + end + + it "is not checked using #==" do + obj = Object.new + set = Set["a", "b", "c"] + + obj.should_not_receive(:==) + set.include?(obj) + end + end end diff --git a/spec/ruby/core/set/initialize_spec.rb b/spec/ruby/core/set/initialize_spec.rb index ad9e1bd8c9..45538b38fb 100644 --- a/spec/ruby/core/set/initialize_spec.rb +++ b/spec/ruby/core/set/initialize_spec.rb @@ -2,71 +2,87 @@ require_relative '../../spec_helper' describe "Set#initialize" do it "is private" do - Set.should have_private_instance_method(:initialize) + Set.private_instance_methods(false).should.include?(:initialize) end it "adds all elements of the passed Enumerable to self" do s = Set.new([1, 2, 3]) - s.size.should eql(3) - s.should include(1) - s.should include(2) - s.should include(3) + s.size.should.eql?(3) + s.should.include?(1) + s.should.include?(2) + s.should.include?(3) end it "uses #each_entry on the provided Enumerable" do enumerable = MockObject.new('mock-enumerable') enumerable.should_receive(:each_entry).and_yield(1).and_yield(2).and_yield(3) s = Set.new(enumerable) - s.size.should eql(3) - s.should include(1) - s.should include(2) - s.should include(3) + s.size.should.eql?(3) + s.should.include?(1) + s.should.include?(2) + s.should.include?(3) end it "uses #each on the provided Enumerable if it does not respond to #each_entry" do enumerable = MockObject.new('mock-enumerable') enumerable.should_receive(:each).and_yield(1).and_yield(2).and_yield(3) s = Set.new(enumerable) - s.size.should eql(3) - s.should include(1) - s.should include(2) - s.should include(3) + s.size.should.eql?(3) + s.should.include?(1) + s.should.include?(2) + s.should.include?(3) end it "raises if the provided Enumerable does not respond to #each_entry or #each" do enumerable = MockObject.new('mock-enumerable') - -> { Set.new(enumerable) }.should raise_error(ArgumentError, "value must be enumerable") + -> { Set.new(enumerable) }.should.raise(ArgumentError, "value must be enumerable") end it "should initialize with empty array and set" do s = Set.new([]) - s.size.should eql(0) + s.size.should.eql?(0) s = Set.new({}) - s.size.should eql(0) + s.size.should.eql?(0) end it "preprocesses all elements by a passed block before adding to self" do s = Set.new([1, 2, 3]) { |x| x * x } - s.size.should eql(3) - s.should include(1) - s.should include(4) - s.should include(9) + s.size.should.eql?(3) + s.should.include?(1) + s.should.include?(4) + s.should.include?(9) end it "should initialize with empty array and block" do s = Set.new([]) { |x| x * x } - s.size.should eql(0) + s.size.should.eql?(0) end it "should initialize with empty set and block" do s = Set.new(Set.new) { |x| x * x } - s.size.should eql(0) + s.size.should.eql?(0) + end + + it "should initialize with set" do + o = Set.new([1, 2]) + s = Set.new(o) + s.size.should.eql?(2) + s.should.include?(1) + s.should.include?(2) + end + + it "should initialize with set and block" do + o = Set.new([1, 2]) + s = Set.new(o) { |e| e + 2 } + s.size.should.eql?(2) + s.should.include?(3) + s.should.include?(4) end it "should initialize with just block" do s = Set.new { |x| x * x } - s.size.should eql(0) - s.should eql(Set.new) + s.size.should.eql?(0) + s.should.eql?(Set.new) end end diff --git a/spec/ruby/core/set/inspect_spec.rb b/spec/ruby/core/set/inspect_spec.rb index 0dcce83eb6..45aeed280e 100644 --- a/spec/ruby/core/set/inspect_spec.rb +++ b/spec/ruby/core/set/inspect_spec.rb @@ -1,6 +1,7 @@ require_relative '../../spec_helper' -require_relative 'shared/inspect' describe "Set#inspect" do - it_behaves_like :set_inspect, :inspect + it "is an alias of Set#to_s" do + Set.instance_method(:inspect).should == Set.instance_method(:to_s) + end end diff --git a/spec/ruby/core/set/intersect_spec.rb b/spec/ruby/core/set/intersect_spec.rb index 0736dea5fd..d04a1af441 100644 --- a/spec/ruby/core/set/intersect_spec.rb +++ b/spec/ruby/core/set/intersect_spec.rb @@ -12,11 +12,11 @@ describe "Set#intersect?" do context "when comparing to a Set-like object" do it "returns true when a Set has at least one element in common with a Set-like object" do - Set[1, 2].intersect?(SetSpecs::SetLike.new([2, 3])).should be_true + Set[1, 2].intersect?(SetSpecs::SetLike.new([2, 3])).should == true end it "returns false when a Set has no element in common with a Set-like object" do - Set[1, 2].intersect?(SetSpecs::SetLike.new([3, 4])).should be_false + Set[1, 2].intersect?(SetSpecs::SetLike.new([3, 4])).should == false end end end diff --git a/spec/ruby/core/set/intersection_spec.rb b/spec/ruby/core/set/intersection_spec.rb index 136b886775..c14e1f62ad 100644 --- a/spec/ruby/core/set/intersection_spec.rb +++ b/spec/ruby/core/set/intersection_spec.rb @@ -1,10 +1,23 @@ require_relative '../../spec_helper' -require_relative 'shared/intersection' describe "Set#intersection" do - it_behaves_like :set_intersection, :intersection + it "is an alias of Set#&" do + Set.instance_method(:intersection).should == Set.instance_method(:&) + end end describe "Set#&" do - it_behaves_like :set_intersection, :& + before :each do + @set = Set[:a, :b, :c] + end + + it "returns a new Set containing only elements shared by self and the passed Enumerable" do + (@set & Set[:b, :c, :d, :e]).should == Set[:b, :c] + (@set & [:b, :c, :d]).should == Set[:b, :c] + end + + it "raises an ArgumentError when passed a non-Enumerable" do + -> { @set & 1 }.should.raise(ArgumentError) + -> { @set & Object.new }.should.raise(ArgumentError) + end end diff --git a/spec/ruby/core/set/join_spec.rb b/spec/ruby/core/set/join_spec.rb index cdb593597d..1c1e8a8af8 100644 --- a/spec/ruby/core/set/join_spec.rb +++ b/spec/ruby/core/set/join_spec.rb @@ -20,7 +20,7 @@ describe "Set#join" do set.join(' | ').should == "a | b | c" end - ruby_version_is ""..."3.5" do + ruby_version_is ""..."4.0" do it "calls #to_a to convert the Set in to an Array" do set = Set[:a, :b, :c] set.should_receive(:to_a).and_return([:a, :b, :c]) diff --git a/spec/ruby/core/set/keep_if_spec.rb b/spec/ruby/core/set/keep_if_spec.rb index d6abdd6adc..7ca5d0cd43 100644 --- a/spec/ruby/core/set/keep_if_spec.rb +++ b/spec/ruby/core/set/keep_if_spec.rb @@ -13,25 +13,25 @@ describe "Set#keep_if" do it "keeps every element from self for which the passed block returns true" do @set.keep_if { |x| x.size != 3 } - @set.size.should eql(1) + @set.size.should.eql?(1) - @set.should_not include("one") - @set.should_not include("two") - @set.should include("three") + @set.should_not.include?("one") + @set.should_not.include?("two") + @set.should.include?("three") end it "returns self" do - @set.keep_if {}.should equal(@set) + @set.keep_if {}.should.equal?(@set) end it "returns an Enumerator when passed no block" do enum = @set.keep_if - enum.should be_an_instance_of(Enumerator) + enum.should.instance_of?(Enumerator) enum.each { |x| x.size != 3 } - @set.should_not include("one") - @set.should_not include("two") - @set.should include("three") + @set.should_not.include?("one") + @set.should_not.include?("two") + @set.should.include?("three") end end diff --git a/spec/ruby/core/set/length_spec.rb b/spec/ruby/core/set/length_spec.rb index 6bb697b4ca..9b0d3622b8 100644 --- a/spec/ruby/core/set/length_spec.rb +++ b/spec/ruby/core/set/length_spec.rb @@ -1,6 +1,7 @@ require_relative '../../spec_helper' -require_relative 'shared/length' describe "Set#length" do - it_behaves_like :set_length, :length + it "is an alias of Set#size" do + Set.instance_method(:length).should == Set.instance_method(:size) + end end diff --git a/spec/ruby/core/set/lt_spec.rb b/spec/ruby/core/set/lt_spec.rb new file mode 100644 index 0000000000..0f5bc9c642 --- /dev/null +++ b/spec/ruby/core/set/lt_spec.rb @@ -0,0 +1,7 @@ +require_relative '../../spec_helper' + +describe "Set#<" do + it "is an alias of Set#proper_subset?" do + Set.instance_method(:<).should == Set.instance_method(:proper_subset?) + end +end diff --git a/spec/ruby/core/set/lte_spec.rb b/spec/ruby/core/set/lte_spec.rb new file mode 100644 index 0000000000..291d582240 --- /dev/null +++ b/spec/ruby/core/set/lte_spec.rb @@ -0,0 +1,7 @@ +require_relative '../../spec_helper' + +describe "Set#<=" do + it "is an alias of Set#subset?" do + Set.instance_method(:<=).should == Set.instance_method(:subset?) + end +end diff --git a/spec/ruby/core/set/map_spec.rb b/spec/ruby/core/set/map_spec.rb index 996191b0a8..fd04a8bde1 100644 --- a/spec/ruby/core/set/map_spec.rb +++ b/spec/ruby/core/set/map_spec.rb @@ -1,6 +1,22 @@ require_relative '../../spec_helper' -require_relative 'shared/collect' describe "Set#map!" do - it_behaves_like :set_collect_bang, :map! + before :each do + @set = Set[1, 2, 3, 4, 5] + end + + it "yields each Object in self" do + res = [] + @set.map! { |x| res << x } + res.sort.should == [1, 2, 3, 4, 5].sort + end + + it "returns self" do + @set.map! { |x| x }.should.equal?(@set) + end + + it "replaces self with the return values of the block" do + @set.map! { |x| x * 2 } + @set.should == Set[2, 4, 6, 8, 10] + end end diff --git a/spec/ruby/core/set/member_spec.rb b/spec/ruby/core/set/member_spec.rb index 5c82e8f826..a36308eec7 100644 --- a/spec/ruby/core/set/member_spec.rb +++ b/spec/ruby/core/set/member_spec.rb @@ -1,6 +1,7 @@ require_relative '../../spec_helper' -require_relative 'shared/include' describe "Set#member?" do - it_behaves_like :set_include, :member? + it "is an alias of Set#include?" do + Set.instance_method(:member?).should == Set.instance_method(:include?) + end end diff --git a/spec/ruby/core/set/merge_spec.rb b/spec/ruby/core/set/merge_spec.rb index 0c6ed27670..a2c1a7e706 100644 --- a/spec/ruby/core/set/merge_spec.rb +++ b/spec/ruby/core/set/merge_spec.rb @@ -8,30 +8,22 @@ describe "Set#merge" do it "returns self" do set = Set[1, 2] - set.merge([3, 4]).should equal(set) + set.merge([3, 4]).should.equal?(set) end it "raises an ArgumentError when passed a non-Enumerable" do - -> { Set[1, 2].merge(1) }.should raise_error(ArgumentError) - -> { Set[1, 2].merge(Object.new) }.should raise_error(ArgumentError) + -> { Set[1, 2].merge(1) }.should.raise(ArgumentError) + -> { Set[1, 2].merge(Object.new) }.should.raise(ArgumentError) end it "raises RuntimeError when called during iteration" do set = Set[:a, :b] set.each do |_m| - -> { set.merge([1, 2]) }.should raise_error(RuntimeError, /iteration/) + -> { set.merge([1, 2]) }.should.raise(RuntimeError, /iteration/) end end - ruby_version_is ""..."3.3" do - it "accepts only a single argument" do - -> { Set[].merge([], []) }.should raise_error(ArgumentError, "wrong number of arguments (given 2, expected 1)") - end - end - - ruby_version_is "3.3" do - it "accepts multiple arguments" do - Set[:a, :b].merge(Set[:b, :c], [:d]).should == Set[:a, :b, :c, :d] - end + it "accepts multiple arguments" do + Set[:a, :b].merge(Set[:b, :c], [:d]).should == Set[:a, :b, :c, :d] end end diff --git a/spec/ruby/core/set/minus_spec.rb b/spec/ruby/core/set/minus_spec.rb index 72f98f985e..8574708559 100644 --- a/spec/ruby/core/set/minus_spec.rb +++ b/spec/ruby/core/set/minus_spec.rb @@ -1,6 +1,17 @@ require_relative '../../spec_helper' -require_relative 'shared/difference' describe "Set#-" do - it_behaves_like :set_difference, :- + before :each do + @set = Set[:a, :b, :c] + end + + it "returns a new Set containing self's elements excluding the elements in the passed Enumerable" do + (@set - Set[:a, :b]).should == Set[:c] + (@set - [:b, :c]).should == Set[:a] + end + + it "raises an ArgumentError when passed a non-Enumerable" do + -> { @set - 1 }.should.raise(ArgumentError) + -> { @set - Object.new }.should.raise(ArgumentError) + end end diff --git a/spec/ruby/core/set/plus_spec.rb b/spec/ruby/core/set/plus_spec.rb index 7e44ff0b7e..839f77fc39 100644 --- a/spec/ruby/core/set/plus_spec.rb +++ b/spec/ruby/core/set/plus_spec.rb @@ -1,6 +1,7 @@ require_relative '../../spec_helper' -require_relative 'shared/union' describe "Set#+" do - it_behaves_like :set_union, :+ + it "is an alias of Set#|" do + Set.instance_method(:+).should == Set.instance_method(:|) + end end diff --git a/spec/ruby/core/set/pretty_print_cycle_spec.rb b/spec/ruby/core/set/pretty_print_cycle_spec.rb index c3b383fe80..7e6017c112 100644 --- a/spec/ruby/core/set/pretty_print_cycle_spec.rb +++ b/spec/ruby/core/set/pretty_print_cycle_spec.rb @@ -3,7 +3,12 @@ require_relative '../../spec_helper' describe "Set#pretty_print_cycle" do it "passes the 'pretty print' representation of a self-referencing Set to the pretty print writer" do pp = mock("PrettyPrint") - pp.should_receive(:text).with("#<Set: {...}>") + ruby_version_is(""..."4.0") do + pp.should_receive(:text).with("#<Set: {...}>") + end + ruby_version_is("4.0") do + pp.should_receive(:text).with("Set[...]") + end Set[1, 2, 3].pretty_print_cycle(pp) end end diff --git a/spec/ruby/core/set/proper_subset_spec.rb b/spec/ruby/core/set/proper_subset_spec.rb index a84c4197c2..3fd27da131 100644 --- a/spec/ruby/core/set/proper_subset_spec.rb +++ b/spec/ruby/core/set/proper_subset_spec.rb @@ -8,38 +8,28 @@ describe "Set#proper_subset?" do end it "returns true if passed a Set that self is a proper subset of" do - Set[].proper_subset?(@set).should be_true - Set[].proper_subset?(Set[1, 2, 3]).should be_true - Set[].proper_subset?(Set["a", :b, ?c]).should be_true + Set[].proper_subset?(@set).should == true + Set[].proper_subset?(Set[1, 2, 3]).should == true + Set[].proper_subset?(Set["a", :b, ?c]).should == true - Set[1, 2, 3].proper_subset?(@set).should be_true - Set[1, 3].proper_subset?(@set).should be_true - Set[1, 2].proper_subset?(@set).should be_true - Set[1].proper_subset?(@set).should be_true + Set[1, 2, 3].proper_subset?(@set).should == true + Set[1, 3].proper_subset?(@set).should == true + Set[1, 2].proper_subset?(@set).should == true + Set[1].proper_subset?(@set).should == true - Set[5].proper_subset?(@set).should be_false - Set[1, 5].proper_subset?(@set).should be_false - Set[nil].proper_subset?(@set).should be_false - Set["test"].proper_subset?(@set).should be_false + Set[5].proper_subset?(@set).should == false + Set[1, 5].proper_subset?(@set).should == false + Set[nil].proper_subset?(@set).should == false + Set["test"].proper_subset?(@set).should == false - @set.proper_subset?(@set).should be_false - Set[].proper_subset?(Set[]).should be_false + @set.proper_subset?(@set).should == false + Set[].proper_subset?(Set[]).should == false end it "raises an ArgumentError when passed a non-Set" do - -> { Set[].proper_subset?([]) }.should raise_error(ArgumentError) - -> { Set[].proper_subset?(1) }.should raise_error(ArgumentError) - -> { Set[].proper_subset?("test") }.should raise_error(ArgumentError) - -> { Set[].proper_subset?(Object.new) }.should raise_error(ArgumentError) - end - - version_is(set_version, ""..."1.1.0") do #ruby_version_is ""..."3.3" do - ruby_version_is ""..."3.5" do - context "when comparing to a Set-like object" do - it "returns true if passed a Set-like object that self is a proper subset of" do - Set[1, 2, 3].proper_subset?(SetSpecs::SetLike.new([1, 2, 3, 4])).should be_true - end - end - end + -> { Set[].proper_subset?([]) }.should.raise(ArgumentError) + -> { Set[].proper_subset?(1) }.should.raise(ArgumentError) + -> { Set[].proper_subset?("test") }.should.raise(ArgumentError) + -> { Set[].proper_subset?(Object.new) }.should.raise(ArgumentError) end end diff --git a/spec/ruby/core/set/proper_superset_spec.rb b/spec/ruby/core/set/proper_superset_spec.rb index 653411f6b2..e95c67ef0e 100644 --- a/spec/ruby/core/set/proper_superset_spec.rb +++ b/spec/ruby/core/set/proper_superset_spec.rb @@ -7,35 +7,35 @@ describe "Set#proper_superset?" do end it "returns true if passed a Set that self is a proper superset of" do - @set.proper_superset?(Set[]).should be_true - Set[1, 2, 3].proper_superset?(Set[]).should be_true - Set["a", :b, ?c].proper_superset?(Set[]).should be_true + @set.proper_superset?(Set[]).should == true + Set[1, 2, 3].proper_superset?(Set[]).should == true + Set["a", :b, ?c].proper_superset?(Set[]).should == true - @set.proper_superset?(Set[1, 2, 3]).should be_true - @set.proper_superset?(Set[1, 3]).should be_true - @set.proper_superset?(Set[1, 2]).should be_true - @set.proper_superset?(Set[1]).should be_true + @set.proper_superset?(Set[1, 2, 3]).should == true + @set.proper_superset?(Set[1, 3]).should == true + @set.proper_superset?(Set[1, 2]).should == true + @set.proper_superset?(Set[1]).should == true - @set.proper_superset?(Set[5]).should be_false - @set.proper_superset?(Set[1, 5]).should be_false - @set.proper_superset?(Set[nil]).should be_false - @set.proper_superset?(Set["test"]).should be_false + @set.proper_superset?(Set[5]).should == false + @set.proper_superset?(Set[1, 5]).should == false + @set.proper_superset?(Set[nil]).should == false + @set.proper_superset?(Set["test"]).should == false - @set.proper_superset?(@set).should be_false - Set[].proper_superset?(Set[]).should be_false + @set.proper_superset?(@set).should == false + Set[].proper_superset?(Set[]).should == false end it "raises an ArgumentError when passed a non-Set" do - -> { Set[].proper_superset?([]) }.should raise_error(ArgumentError) - -> { Set[].proper_superset?(1) }.should raise_error(ArgumentError) - -> { Set[].proper_superset?("test") }.should raise_error(ArgumentError) - -> { Set[].proper_superset?(Object.new) }.should raise_error(ArgumentError) + -> { Set[].proper_superset?([]) }.should.raise(ArgumentError) + -> { Set[].proper_superset?(1) }.should.raise(ArgumentError) + -> { Set[].proper_superset?("test") }.should.raise(ArgumentError) + -> { Set[].proper_superset?(Object.new) }.should.raise(ArgumentError) end - ruby_version_is ""..."3.5" do + ruby_version_is ""..."4.0" do context "when comparing to a Set-like object" do it "returns true if passed a Set-like object that self is a proper superset of" do - Set[1, 2, 3, 4].proper_superset?(SetSpecs::SetLike.new([1, 2, 3])).should be_true + Set[1, 2, 3, 4].proper_superset?(SetSpecs::SetLike.new([1, 2, 3])).should == true end end end diff --git a/spec/ruby/core/set/reject_spec.rb b/spec/ruby/core/set/reject_spec.rb index 91d0293415..b00a36812b 100644 --- a/spec/ruby/core/set/reject_spec.rb +++ b/spec/ruby/core/set/reject_spec.rb @@ -13,29 +13,29 @@ describe "Set#reject!" do it "deletes every element from self for which the passed block returns true" do @set.reject! { |x| x.size == 3 } - @set.size.should eql(1) + @set.size.should.eql?(1) - @set.should_not include("one") - @set.should_not include("two") - @set.should include("three") + @set.should_not.include?("one") + @set.should_not.include?("two") + @set.should.include?("three") end it "returns self when self was modified" do - @set.reject! { |x| true }.should equal(@set) + @set.reject! { |x| true }.should.equal?(@set) end it "returns nil when self was not modified" do - @set.reject! { |x| false }.should be_nil + @set.reject! { |x| false }.should == nil end it "returns an Enumerator when passed no block" do enum = @set.reject! - enum.should be_an_instance_of(Enumerator) + enum.should.instance_of?(Enumerator) enum.each { |x| x.size == 3 } - @set.should_not include("one") - @set.should_not include("two") - @set.should include("three") + @set.should_not.include?("one") + @set.should_not.include?("two") + @set.should.include?("three") end end diff --git a/spec/ruby/core/set/replace_spec.rb b/spec/ruby/core/set/replace_spec.rb index c66a2d0ec3..2a51a024dc 100644 --- a/spec/ruby/core/set/replace_spec.rb +++ b/spec/ruby/core/set/replace_spec.rb @@ -13,7 +13,7 @@ describe "Set#replace" do it "raises RuntimeError when called during iteration" do set = Set[:a, :b, :c, :d, :e, :f] set.each do |_m| - -> { set.replace(Set[1, 2, 3]) }.should raise_error(RuntimeError, /iteration/) + -> { set.replace(Set[1, 2, 3]) }.should.raise(RuntimeError, /iteration/) end set.should == Set[:a, :b, :c, :d, :e, :f] end diff --git a/spec/ruby/core/set/select_spec.rb b/spec/ruby/core/set/select_spec.rb index b458ffacaa..619194605b 100644 --- a/spec/ruby/core/set/select_spec.rb +++ b/spec/ruby/core/set/select_spec.rb @@ -1,6 +1,41 @@ require_relative '../../spec_helper' -require_relative 'shared/select' describe "Set#select!" do - it_behaves_like :set_select_bang, :select! + before :each do + @set = Set["one", "two", "three"] + end + + it "yields every element of self" do + ret = [] + @set.select! { |x| ret << x } + ret.sort.should == ["one", "two", "three"].sort + end + + it "keeps every element from self for which the passed block returns true" do + @set.select! { |x| x.size != 3 } + @set.size.should.eql?(1) + + @set.should_not.include?("one") + @set.should_not.include?("two") + @set.should.include?("three") + end + + it "returns self when self was modified" do + @set.select! { false }.should.equal?(@set) + end + + it "returns nil when self was not modified" do + @set.select! { true }.should == nil + end + + it "returns an Enumerator when passed no block" do + enum = @set.select! + enum.should.instance_of?(Enumerator) + + enum.each { |x| x.size != 3 } + + @set.should_not.include?("one") + @set.should_not.include?("two") + @set.should.include?("three") + end end diff --git a/spec/ruby/core/set/shared/add.rb b/spec/ruby/core/set/shared/add.rb deleted file mode 100644 index 9e797f5df9..0000000000 --- a/spec/ruby/core/set/shared/add.rb +++ /dev/null @@ -1,14 +0,0 @@ -describe :set_add, shared: true do - before :each do - @set = Set.new - end - - it "adds the passed Object to self" do - @set.send(@method, "dog") - @set.should include("dog") - end - - it "returns self" do - @set.send(@method, "dog").should equal(@set) - end -end diff --git a/spec/ruby/core/set/shared/collect.rb b/spec/ruby/core/set/shared/collect.rb deleted file mode 100644 index bc58c231be..0000000000 --- a/spec/ruby/core/set/shared/collect.rb +++ /dev/null @@ -1,20 +0,0 @@ -describe :set_collect_bang, shared: true do - before :each do - @set = Set[1, 2, 3, 4, 5] - end - - it "yields each Object in self" do - res = [] - @set.send(@method) { |x| res << x } - res.sort.should == [1, 2, 3, 4, 5].sort - end - - it "returns self" do - @set.send(@method) { |x| x }.should equal(@set) - end - - it "replaces self with the return values of the block" do - @set.send(@method) { |x| x * 2 } - @set.should == Set[2, 4, 6, 8, 10] - end -end diff --git a/spec/ruby/core/set/shared/difference.rb b/spec/ruby/core/set/shared/difference.rb deleted file mode 100644 index f88987ed2a..0000000000 --- a/spec/ruby/core/set/shared/difference.rb +++ /dev/null @@ -1,15 +0,0 @@ -describe :set_difference, shared: true do - before :each do - @set = Set[:a, :b, :c] - end - - it "returns a new Set containing self's elements excluding the elements in the passed Enumerable" do - @set.send(@method, Set[:a, :b]).should == Set[:c] - @set.send(@method, [:b, :c]).should == Set[:a] - end - - it "raises an ArgumentError when passed a non-Enumerable" do - -> { @set.send(@method, 1) }.should raise_error(ArgumentError) - -> { @set.send(@method, Object.new) }.should raise_error(ArgumentError) - end -end diff --git a/spec/ruby/core/set/shared/include.rb b/spec/ruby/core/set/shared/include.rb deleted file mode 100644 index b4d95cde24..0000000000 --- a/spec/ruby/core/set/shared/include.rb +++ /dev/null @@ -1,29 +0,0 @@ -describe :set_include, shared: true do - it "returns true when self contains the passed Object" do - set = Set[:a, :b, :c] - set.send(@method, :a).should be_true - set.send(@method, :e).should be_false - end - - describe "member equality" do - it "is checked using both #hash and #eql?" do - obj = Object.new - obj_another = Object.new - - def obj.hash; 42 end - def obj_another.hash; 42 end - def obj_another.eql?(o) hash == o.hash end - - set = Set["a", "b", "c", obj] - set.send(@method, obj_another).should == true - end - - it "is not checked using #==" do - obj = Object.new - set = Set["a", "b", "c"] - - obj.should_not_receive(:==) - set.send(@method, obj) - end - end -end diff --git a/spec/ruby/core/set/shared/inspect.rb b/spec/ruby/core/set/shared/inspect.rb deleted file mode 100644 index fbc7486acd..0000000000 --- a/spec/ruby/core/set/shared/inspect.rb +++ /dev/null @@ -1,45 +0,0 @@ -describe :set_inspect, shared: true do - it "returns a String representation of self" do - Set[].send(@method).should be_kind_of(String) - Set[nil, false, true].send(@method).should be_kind_of(String) - Set[1, 2, 3].send(@method).should be_kind_of(String) - Set["1", "2", "3"].send(@method).should be_kind_of(String) - Set[:a, "b", Set[?c]].send(@method).should be_kind_of(String) - end - - ruby_version_is "3.5" do - it "does include the elements of the set" do - Set["1"].send(@method).should == 'Set["1"]' - end - end - - ruby_version_is ""..."3.5" do - it "does include the elements of the set" do - Set["1"].send(@method).should == '#<Set: {"1"}>' - end - end - - it "puts spaces between the elements" do - Set["1", "2"].send(@method).should include('", "') - end - - ruby_version_is "3.5" do - it "correctly handles cyclic-references" do - set1 = Set[] - set2 = Set[set1] - set1 << set2 - set1.send(@method).should be_kind_of(String) - set1.send(@method).should include("Set[...]") - end - end - - ruby_version_is ""..."3.5" do - it "correctly handles cyclic-references" do - set1 = Set[] - set2 = Set[set1] - set1 << set2 - set1.send(@method).should be_kind_of(String) - set1.send(@method).should include("#<Set: {...}>") - end - end -end diff --git a/spec/ruby/core/set/shared/intersection.rb b/spec/ruby/core/set/shared/intersection.rb deleted file mode 100644 index 5ae4199c94..0000000000 --- a/spec/ruby/core/set/shared/intersection.rb +++ /dev/null @@ -1,15 +0,0 @@ -describe :set_intersection, shared: true do - before :each do - @set = Set[:a, :b, :c] - end - - it "returns a new Set containing only elements shared by self and the passed Enumerable" do - @set.send(@method, Set[:b, :c, :d, :e]).should == Set[:b, :c] - @set.send(@method, [:b, :c, :d]).should == Set[:b, :c] - end - - it "raises an ArgumentError when passed a non-Enumerable" do - -> { @set.send(@method, 1) }.should raise_error(ArgumentError) - -> { @set.send(@method, Object.new) }.should raise_error(ArgumentError) - end -end diff --git a/spec/ruby/core/set/shared/length.rb b/spec/ruby/core/set/shared/length.rb deleted file mode 100644 index a8fcee9f39..0000000000 --- a/spec/ruby/core/set/shared/length.rb +++ /dev/null @@ -1,6 +0,0 @@ -describe :set_length, shared: true do - it "returns the number of elements in the set" do - set = Set[:a, :b, :c] - set.send(@method).should == 3 - end -end diff --git a/spec/ruby/core/set/shared/select.rb b/spec/ruby/core/set/shared/select.rb deleted file mode 100644 index 467b236ed3..0000000000 --- a/spec/ruby/core/set/shared/select.rb +++ /dev/null @@ -1,41 +0,0 @@ -require_relative '../../../spec_helper' - -describe :set_select_bang, shared: true do - before :each do - @set = Set["one", "two", "three"] - end - - it "yields every element of self" do - ret = [] - @set.send(@method) { |x| ret << x } - ret.sort.should == ["one", "two", "three"].sort - end - - it "keeps every element from self for which the passed block returns true" do - @set.send(@method) { |x| x.size != 3 } - @set.size.should eql(1) - - @set.should_not include("one") - @set.should_not include("two") - @set.should include("three") - end - - it "returns self when self was modified" do - @set.send(@method) { false }.should equal(@set) - end - - it "returns nil when self was not modified" do - @set.send(@method) { true }.should be_nil - end - - it "returns an Enumerator when passed no block" do - enum = @set.send(@method) - enum.should be_an_instance_of(Enumerator) - - enum.each { |x| x.size != 3 } - - @set.should_not include("one") - @set.should_not include("two") - @set.should include("three") - end -end diff --git a/spec/ruby/core/set/shared/union.rb b/spec/ruby/core/set/shared/union.rb deleted file mode 100644 index 314f0e852d..0000000000 --- a/spec/ruby/core/set/shared/union.rb +++ /dev/null @@ -1,15 +0,0 @@ -describe :set_union, shared: true do - before :each do - @set = Set[:a, :b, :c] - end - - it "returns a new Set containing all elements of self and the passed Enumerable" do - @set.send(@method, Set[:b, :d, :e]).should == Set[:a, :b, :c, :d, :e] - @set.send(@method, [:b, :e]).should == Set[:a, :b, :c, :e] - end - - it "raises an ArgumentError when passed a non-Enumerable" do - -> { @set.send(@method, 1) }.should raise_error(ArgumentError) - -> { @set.send(@method, Object.new) }.should raise_error(ArgumentError) - end -end diff --git a/spec/ruby/core/set/size_spec.rb b/spec/ruby/core/set/size_spec.rb index 4ae22c5f0a..c57272a235 100644 --- a/spec/ruby/core/set/size_spec.rb +++ b/spec/ruby/core/set/size_spec.rb @@ -1,6 +1,8 @@ require_relative '../../spec_helper' -require_relative 'shared/length' describe "Set#size" do - it_behaves_like :set_length, :size + it "returns the number of elements in the set" do + set = Set[:a, :b, :c] + set.size.should == 3 + end end diff --git a/spec/ruby/core/set/sortedset/sortedset_spec.rb b/spec/ruby/core/set/sortedset/sortedset_spec.rb index 41f010e011..c8f65f0851 100644 --- a/spec/ruby/core/set/sortedset/sortedset_spec.rb +++ b/spec/ruby/core/set/sortedset/sortedset_spec.rb @@ -1,11 +1,11 @@ require_relative '../../../spec_helper' describe "SortedSet" do - ruby_version_is ""..."3.5" do + ruby_version_is ""..."4.0" do it "raises error including message that it has been extracted from the set stdlib" do -> { SortedSet - }.should raise_error(RuntimeError) { |e| + }.should.raise(RuntimeError) { |e| e.message.should.include?("The `SortedSet` class has been extracted from the `set` library") } end diff --git a/spec/ruby/core/set/subset_spec.rb b/spec/ruby/core/set/subset_spec.rb index cde61d7cd7..81869d4993 100644 --- a/spec/ruby/core/set/subset_spec.rb +++ b/spec/ruby/core/set/subset_spec.rb @@ -8,38 +8,28 @@ describe "Set#subset?" do end it "returns true if passed a Set that is equal to self or self is a subset of" do - @set.subset?(@set).should be_true - Set[].subset?(Set[]).should be_true + @set.subset?(@set).should == true + Set[].subset?(Set[]).should == true - Set[].subset?(@set).should be_true - Set[].subset?(Set[1, 2, 3]).should be_true - Set[].subset?(Set["a", :b, ?c]).should be_true + Set[].subset?(@set).should == true + Set[].subset?(Set[1, 2, 3]).should == true + Set[].subset?(Set["a", :b, ?c]).should == true - Set[1, 2, 3].subset?(@set).should be_true - Set[1, 3].subset?(@set).should be_true - Set[1, 2].subset?(@set).should be_true - Set[1].subset?(@set).should be_true + Set[1, 2, 3].subset?(@set).should == true + Set[1, 3].subset?(@set).should == true + Set[1, 2].subset?(@set).should == true + Set[1].subset?(@set).should == true - Set[5].subset?(@set).should be_false - Set[1, 5].subset?(@set).should be_false - Set[nil].subset?(@set).should be_false - Set["test"].subset?(@set).should be_false + Set[5].subset?(@set).should == false + Set[1, 5].subset?(@set).should == false + Set[nil].subset?(@set).should == false + Set["test"].subset?(@set).should == false end it "raises an ArgumentError when passed a non-Set" do - -> { Set[].subset?([]) }.should raise_error(ArgumentError) - -> { Set[].subset?(1) }.should raise_error(ArgumentError) - -> { Set[].subset?("test") }.should raise_error(ArgumentError) - -> { Set[].subset?(Object.new) }.should raise_error(ArgumentError) - end - - version_is(set_version, ""..."1.1.0") do #ruby_version_is ""..."3.3" do - ruby_version_is ""..."3.5" do - context "when comparing to a Set-like object" do - it "returns true if passed a Set-like object that self is a subset of" do - Set[1, 2, 3].subset?(SetSpecs::SetLike.new([1, 2, 3, 4])).should be_true - end - end - end + -> { Set[].subset?([]) }.should.raise(ArgumentError) + -> { Set[].subset?(1) }.should.raise(ArgumentError) + -> { Set[].subset?("test") }.should.raise(ArgumentError) + -> { Set[].subset?(Object.new) }.should.raise(ArgumentError) end end diff --git a/spec/ruby/core/set/superset_spec.rb b/spec/ruby/core/set/superset_spec.rb index 9d7bab964a..7e7db2b179 100644 --- a/spec/ruby/core/set/superset_spec.rb +++ b/spec/ruby/core/set/superset_spec.rb @@ -7,35 +7,35 @@ describe "Set#superset?" do end it "returns true if passed a Set that equals self or self is a proper superset of" do - @set.superset?(@set).should be_true - Set[].superset?(Set[]).should be_true + @set.superset?(@set).should == true + Set[].superset?(Set[]).should == true - @set.superset?(Set[]).should be_true - Set[1, 2, 3].superset?(Set[]).should be_true - Set["a", :b, ?c].superset?(Set[]).should be_true + @set.superset?(Set[]).should == true + Set[1, 2, 3].superset?(Set[]).should == true + Set["a", :b, ?c].superset?(Set[]).should == true - @set.superset?(Set[1, 2, 3]).should be_true - @set.superset?(Set[1, 3]).should be_true - @set.superset?(Set[1, 2]).should be_true - @set.superset?(Set[1]).should be_true + @set.superset?(Set[1, 2, 3]).should == true + @set.superset?(Set[1, 3]).should == true + @set.superset?(Set[1, 2]).should == true + @set.superset?(Set[1]).should == true - @set.superset?(Set[5]).should be_false - @set.superset?(Set[1, 5]).should be_false - @set.superset?(Set[nil]).should be_false - @set.superset?(Set["test"]).should be_false + @set.superset?(Set[5]).should == false + @set.superset?(Set[1, 5]).should == false + @set.superset?(Set[nil]).should == false + @set.superset?(Set["test"]).should == false end it "raises an ArgumentError when passed a non-Set" do - -> { Set[].superset?([]) }.should raise_error(ArgumentError) - -> { Set[].superset?(1) }.should raise_error(ArgumentError) - -> { Set[].superset?("test") }.should raise_error(ArgumentError) - -> { Set[].superset?(Object.new) }.should raise_error(ArgumentError) + -> { Set[].superset?([]) }.should.raise(ArgumentError) + -> { Set[].superset?(1) }.should.raise(ArgumentError) + -> { Set[].superset?("test") }.should.raise(ArgumentError) + -> { Set[].superset?(Object.new) }.should.raise(ArgumentError) end - ruby_version_is ""..."3.5" do + ruby_version_is ""..."4.0" do context "when comparing to a Set-like object" do it "returns true if passed a Set-like object that self is a superset of" do - Set[1, 2, 3, 4].superset?(SetSpecs::SetLike.new([1, 2, 3])).should be_true + Set[1, 2, 3, 4].superset?(SetSpecs::SetLike.new([1, 2, 3])).should == true end end end diff --git a/spec/ruby/core/set/to_s_spec.rb b/spec/ruby/core/set/to_s_spec.rb index 55b8bfd9b2..7f768bdcbf 100644 --- a/spec/ruby/core/set/to_s_spec.rb +++ b/spec/ruby/core/set/to_s_spec.rb @@ -1,11 +1,47 @@ require_relative "../../spec_helper" -require_relative 'shared/inspect' describe "Set#to_s" do - it_behaves_like :set_inspect, :to_s + it "returns a String representation of self" do + Set[].to_s.should.is_a?(String) + Set[nil, false, true].to_s.should.is_a?(String) + Set[1, 2, 3].to_s.should.is_a?(String) + Set["1", "2", "3"].to_s.should.is_a?(String) + Set[:a, "b", Set[?c]].to_s.should.is_a?(String) + end + + ruby_version_is "4.0" do + it "does include the elements of the set" do + Set["1"].to_s.should == 'Set["1"]' + end + end + + ruby_version_is ""..."4.0" do + it "does include the elements of the set" do + Set["1"].to_s.should == '#<Set: {"1"}>' + end + end + + it "puts spaces between the elements" do + Set["1", "2"].to_s.should.include?('", "') + end + + ruby_version_is "4.0" do + it "correctly handles cyclic-references" do + set1 = Set[] + set2 = Set[set1] + set1 << set2 + set1.to_s.should.is_a?(String) + set1.to_s.should.include?("Set[...]") + end + end - it "is an alias of inspect" do - set = Set.new - set.method(:to_s).should == set.method(:inspect) + ruby_version_is ""..."4.0" do + it "correctly handles cyclic-references" do + set1 = Set[] + set2 = Set[set1] + set1 << set2 + set1.to_s.should.is_a?(String) + set1.to_s.should.include?("#<Set: {...}>") + end end end diff --git a/spec/ruby/core/set/union_spec.rb b/spec/ruby/core/set/union_spec.rb index 3e77022d4b..206535aae2 100644 --- a/spec/ruby/core/set/union_spec.rb +++ b/spec/ruby/core/set/union_spec.rb @@ -1,10 +1,23 @@ require_relative '../../spec_helper' -require_relative 'shared/union' describe "Set#union" do - it_behaves_like :set_union, :union + it "is an alias of Set#|" do + Set.instance_method(:union).should == Set.instance_method(:|) + end end describe "Set#|" do - it_behaves_like :set_union, :| + before :each do + @set = Set[:a, :b, :c] + end + + it "returns a new Set containing all elements of self and the passed Enumerable" do + (@set | Set[:b, :d, :e]).should == Set[:a, :b, :c, :d, :e] + (@set | [:b, :e]).should == Set[:a, :b, :c, :e] + end + + it "raises an ArgumentError when passed a non-Enumerable" do + -> { @set | 1 }.should.raise(ArgumentError) + -> { @set | Object.new }.should.raise(ArgumentError) + end end |
