зеркало из https://github.com/github/ruby.git
Revert "SortedSet was removed at a3db08d7b6ff119223f77e3df00b4f6deac971e2"
* This reverts commit b06ffce4ae
.
* Do not revert specs, wrap them with `ruby_version_is` (tool for that in next commit).
This commit is contained in:
Родитель
5e58a9033f
Коммит
d0bd43c332
|
@ -0,0 +1,39 @@
|
|||
require_relative '../../../spec_helper'
|
||||
require 'set'
|
||||
require_relative 'shared/add'
|
||||
|
||||
describe "SortedSet#add" do
|
||||
it_behaves_like :sorted_set_add, :add
|
||||
|
||||
it "takes only values which responds <=>" do
|
||||
obj = mock('no_comparison_operator')
|
||||
obj.stub!(:respond_to?).with(:<=>).and_return(false)
|
||||
-> { SortedSet["hello"].add(obj) }.should raise_error(ArgumentError)
|
||||
end
|
||||
|
||||
it "raises on incompatible <=> comparison" do
|
||||
# Use #to_a here as elements are sorted only when needed.
|
||||
# Therefore the <=> incompatibility is only noticed on sorting.
|
||||
-> { SortedSet['1', '2'].add(3).to_a }.should raise_error(ArgumentError)
|
||||
end
|
||||
end
|
||||
|
||||
describe "SortedSet#add?" do
|
||||
before :each do
|
||||
@set = SortedSet.new
|
||||
end
|
||||
|
||||
it "adds the passed Object to self" do
|
||||
@set.add?("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)
|
||||
end
|
||||
|
||||
it "returns nil when the Object has already been added to self" do
|
||||
@set.add?("cat")
|
||||
@set.add?("cat").should be_nil
|
||||
end
|
||||
end
|
|
@ -0,0 +1,7 @@
|
|||
require_relative '../../../spec_helper'
|
||||
require 'set'
|
||||
require_relative 'shared/add'
|
||||
|
||||
describe "SortedSet#<<" do
|
||||
it_behaves_like :sorted_set_add, :<<
|
||||
end
|
|
@ -0,0 +1,7 @@
|
|||
require_relative '../../../spec_helper'
|
||||
require_relative 'shared/include'
|
||||
require 'set'
|
||||
|
||||
describe "SortedSet#===" do
|
||||
it_behaves_like :sorted_set_include, :===
|
||||
end
|
|
@ -0,0 +1,27 @@
|
|||
require_relative '../../../spec_helper'
|
||||
require 'set'
|
||||
|
||||
describe "SortedSet#classify" do
|
||||
before :each do
|
||||
@set = SortedSet["one", "two", "three", "four"]
|
||||
end
|
||||
|
||||
it "yields each Object in self in sorted order" do
|
||||
res = []
|
||||
@set.classify { |x| res << x }
|
||||
res.should == ["one", "two", "three", "four"].sort
|
||||
end
|
||||
|
||||
it "returns an Enumerator when passed no block" do
|
||||
enum = @set.classify
|
||||
enum.should be_an_instance_of(Enumerator)
|
||||
|
||||
classified = enum.each { |x| x.length }
|
||||
classified.should == { 3 => SortedSet["one", "two"], 4 => SortedSet["four"], 5 => SortedSet["three"] }
|
||||
end
|
||||
|
||||
it "classifies the Objects in self based on the block's return value" do
|
||||
classified = @set.classify { |x| x.length }
|
||||
classified.should == { 3 => SortedSet["one", "two"], 4 => SortedSet["four"], 5 => SortedSet["three"] }
|
||||
end
|
||||
end
|
|
@ -0,0 +1,17 @@
|
|||
require_relative '../../../spec_helper'
|
||||
require 'set'
|
||||
|
||||
describe "SortedSet#clear" do
|
||||
before :each do
|
||||
@set = SortedSet["one", "two", "three", "four"]
|
||||
end
|
||||
|
||||
it "removes all elements from self" do
|
||||
@set.clear
|
||||
@set.should be_empty
|
||||
end
|
||||
|
||||
it "returns self" do
|
||||
@set.clear.should equal(@set)
|
||||
end
|
||||
end
|
|
@ -0,0 +1,7 @@
|
|||
require_relative '../../../spec_helper'
|
||||
require 'set'
|
||||
require_relative 'shared/collect'
|
||||
|
||||
describe "SortedSet#collect!" do
|
||||
it_behaves_like :sorted_set_collect_bang, :collect!
|
||||
end
|
|
@ -0,0 +1,15 @@
|
|||
require_relative '../../../spec_helper'
|
||||
require 'set'
|
||||
|
||||
describe "SortedSet[]" do
|
||||
it "returns a new SortedSet populated with the passed Objects" do
|
||||
set = SortedSet[1, 2, 3]
|
||||
|
||||
set.instance_of?(SortedSet).should be_true
|
||||
set.size.should eql(3)
|
||||
|
||||
set.should include(1)
|
||||
set.should include(2)
|
||||
set.should include(3)
|
||||
end
|
||||
end
|
|
@ -0,0 +1,38 @@
|
|||
require_relative '../../../spec_helper'
|
||||
require 'set'
|
||||
|
||||
describe "SortedSet#delete_if" do
|
||||
before :each do
|
||||
@set = SortedSet["one", "two", "three"]
|
||||
end
|
||||
|
||||
it "yields each Object in self in sorted order" do
|
||||
ret = []
|
||||
@set.delete_if { |x| ret << x }
|
||||
ret.should == ["one", "two", "three"].sort
|
||||
end
|
||||
|
||||
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.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)
|
||||
end
|
||||
|
||||
it "returns an Enumerator when passed no block" do
|
||||
enum = @set.delete_if
|
||||
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
|
|
@ -0,0 +1,37 @@
|
|||
require_relative '../../../spec_helper'
|
||||
require 'set'
|
||||
|
||||
describe "SortedSet#delete" do
|
||||
before :each do
|
||||
@set = SortedSet["a", "b", "c"]
|
||||
end
|
||||
|
||||
it "deletes the passed Object from self" do
|
||||
@set.delete("a")
|
||||
@set.should_not include("a")
|
||||
end
|
||||
|
||||
it "returns self" do
|
||||
@set.delete("a").should equal(@set)
|
||||
@set.delete("x").should equal(@set)
|
||||
end
|
||||
end
|
||||
|
||||
describe "SortedSet#delete?" do
|
||||
before :each do
|
||||
@set = SortedSet["a", "b", "c"]
|
||||
end
|
||||
|
||||
it "deletes the passed Object from self" do
|
||||
@set.delete?("a")
|
||||
@set.should_not include("a")
|
||||
end
|
||||
|
||||
it "returns self when the passed Object is in self" do
|
||||
@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
|
||||
end
|
||||
end
|
|
@ -0,0 +1,7 @@
|
|||
require_relative '../../../spec_helper'
|
||||
require 'set'
|
||||
require_relative 'shared/difference'
|
||||
|
||||
describe "SortedSet#difference" do
|
||||
it_behaves_like :sorted_set_difference, :difference
|
||||
end
|
|
@ -0,0 +1,34 @@
|
|||
require_relative '../../../spec_helper'
|
||||
require 'set'
|
||||
|
||||
describe "SortedSet#divide" do
|
||||
it "divides self into a set of subsets based on the blocks return values" do
|
||||
set = SortedSet["one", "two", "three", "four", "five"].divide { |x| x.length }
|
||||
set.map { |x| x.to_a }.to_a.sort.should == [["five", "four"], ["one", "two"], ["three"]]
|
||||
end
|
||||
|
||||
it "yields each Object in self in sorted order" do
|
||||
ret = []
|
||||
SortedSet["one", "two", "three", "four", "five"].divide { |x| ret << x }
|
||||
ret.should == ["one", "two", "three", "four", "five"].sort
|
||||
end
|
||||
|
||||
# BUG: Does not raise a LocalJumpError, but a NoMethodError
|
||||
#
|
||||
# it "raises a LocalJumpError when not passed a block" do
|
||||
# lambda { SortedSet[1].divide }.should raise_error(LocalJumpError)
|
||||
# end
|
||||
end
|
||||
|
||||
describe "SortedSet#divide when passed a block with an arity of 2" do
|
||||
it "divides self into a set of subsets based on the blocks return values" do
|
||||
set = SortedSet[1, 3, 4, 6, 9, 10, 11].divide { |x, y| (x - y).abs == 1 }
|
||||
set.map { |x| x.to_a }.to_a.sort.should == [[1], [3, 4], [6], [9, 10, 11]]
|
||||
end
|
||||
|
||||
it "yields each two Objects to the block" do
|
||||
ret = []
|
||||
SortedSet[1, 2].divide { |x, y| ret << [x, y] }
|
||||
ret.should == [[1, 1], [1, 2], [2, 1], [2, 2]]
|
||||
end
|
||||
end
|
|
@ -0,0 +1,26 @@
|
|||
require_relative '../../../spec_helper'
|
||||
require 'set'
|
||||
|
||||
describe "SortedSet#each" do
|
||||
before :each do
|
||||
@set = SortedSet[1, 2, 3]
|
||||
end
|
||||
|
||||
it "yields each Object in self in sorted order" do
|
||||
ret = []
|
||||
SortedSet["one", "two", "three"].each { |x| ret << x }
|
||||
ret.should == ["one", "two", "three"].sort
|
||||
end
|
||||
|
||||
it "returns self" do
|
||||
@set.each { |x| x }.should equal(@set)
|
||||
end
|
||||
|
||||
it "returns an Enumerator when not passed a block" do
|
||||
enum = @set.each
|
||||
|
||||
ret = []
|
||||
enum.each { |x| ret << x }
|
||||
ret.sort.should == [1, 2, 3]
|
||||
end
|
||||
end
|
|
@ -0,0 +1,10 @@
|
|||
require_relative '../../../spec_helper'
|
||||
require 'set'
|
||||
|
||||
describe "SortedSet#empty?" do
|
||||
it "returns true if self is empty" do
|
||||
SortedSet[].empty?.should be_true
|
||||
SortedSet[1].empty?.should be_false
|
||||
SortedSet[1,2,3].empty?.should be_false
|
||||
end
|
||||
end
|
|
@ -0,0 +1,16 @@
|
|||
require_relative '../../../spec_helper'
|
||||
require 'set'
|
||||
|
||||
describe "SortedSet#eql?" do
|
||||
it "returns true when the passed argument is a SortedSet and contains the same elements" do
|
||||
SortedSet[].should eql(SortedSet[])
|
||||
SortedSet[1, 2, 3].should eql(SortedSet[1, 2, 3])
|
||||
SortedSet[1, 2, 3].should eql(SortedSet[3, 2, 1])
|
||||
|
||||
# SortedSet["a", :b, ?c].should eql(SortedSet[?c, :b, "a"])
|
||||
|
||||
SortedSet[1, 2, 3].should_not eql(SortedSet[1.0, 2, 3])
|
||||
SortedSet[1, 2, 3].should_not eql(SortedSet[2, 3])
|
||||
SortedSet[1, 2, 3].should_not eql(SortedSet[])
|
||||
end
|
||||
end
|
|
@ -0,0 +1,13 @@
|
|||
require_relative '../../../spec_helper'
|
||||
require 'set'
|
||||
|
||||
describe "SortedSet#==" do
|
||||
it "returns true when the passed Object is a SortedSet and self and the Object contain the same elements" do
|
||||
SortedSet[].should == SortedSet[]
|
||||
SortedSet[1, 2, 3].should == SortedSet[1, 2, 3]
|
||||
SortedSet["1", "2", "3"].should == SortedSet["1", "2", "3"]
|
||||
|
||||
SortedSet[1, 2, 3].should_not == SortedSet[1.0, 2, 3]
|
||||
SortedSet[1, 2, 3].should_not == [1, 2, 3]
|
||||
end
|
||||
end
|
|
@ -0,0 +1,18 @@
|
|||
require_relative '../../../spec_helper'
|
||||
require 'set'
|
||||
|
||||
describe "SortedSet#^" do
|
||||
before :each do
|
||||
@set = SortedSet[1, 2, 3, 4]
|
||||
end
|
||||
|
||||
it "returns a new SortedSet containing elements that are not in both self and the passed Enumerable" do
|
||||
(@set ^ SortedSet[3, 4, 5]).should == SortedSet[1, 2, 5]
|
||||
(@set ^ [3, 4, 5]).should == SortedSet[1, 2, 5]
|
||||
end
|
||||
|
||||
it "raises an ArgumentError when passed a non-Enumerable" do
|
||||
-> { @set ^ 3 }.should raise_error(ArgumentError)
|
||||
-> { @set ^ Object.new }.should raise_error(ArgumentError)
|
||||
end
|
||||
end
|
|
@ -0,0 +1,9 @@
|
|||
require_relative '../../../spec_helper'
|
||||
require_relative 'shared/select'
|
||||
require 'set'
|
||||
|
||||
ruby_version_is "2.6" do
|
||||
describe "SortedSet#filter!" do
|
||||
it_behaves_like :sorted_set_select_bang, :filter!
|
||||
end
|
||||
end
|
|
@ -0,0 +1,8 @@
|
|||
require_relative '../../../spec_helper'
|
||||
require 'set'
|
||||
|
||||
describe "SortedSet#flatten_merge" do
|
||||
it "is protected" do
|
||||
SortedSet.should have_protected_instance_method("flatten_merge")
|
||||
end
|
||||
end
|
|
@ -0,0 +1,44 @@
|
|||
require_relative '../../../spec_helper'
|
||||
require 'set'
|
||||
|
||||
# Note: Flatten make little sens on sorted sets, because SortedSets are not (by default)
|
||||
# comparable. For a SortedSet to be both valid and nested, we need to define a comparison operator:
|
||||
module SortedSet_FlattenSpecs
|
||||
class ComparableSortedSet < SortedSet
|
||||
def <=>(other)
|
||||
return puts "#{other} vs #{self}" unless other.is_a?(ComparableSortedSet)
|
||||
to_a <=> other.to_a
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe "SortedSet#flatten" do
|
||||
it "returns a copy of self with each included SortedSet flattened" do
|
||||
klass = SortedSet_FlattenSpecs::ComparableSortedSet
|
||||
set = klass[klass[1,2], klass[3,4], klass[5,6,7], klass[8]]
|
||||
flattened_set = set.flatten
|
||||
|
||||
flattened_set.should_not equal(set)
|
||||
flattened_set.should == klass[1, 2, 3, 4, 5, 6, 7, 8]
|
||||
end
|
||||
end
|
||||
|
||||
describe "SortedSet#flatten!" do
|
||||
it "flattens self" do
|
||||
klass = SortedSet_FlattenSpecs::ComparableSortedSet
|
||||
set = klass[klass[1,2], klass[3,4], klass[5,6,7], klass[8]]
|
||||
set.flatten!
|
||||
set.should == klass[1, 2, 3, 4, 5, 6, 7, 8]
|
||||
end
|
||||
|
||||
it "returns self when self was modified" do
|
||||
klass = SortedSet_FlattenSpecs::ComparableSortedSet
|
||||
set = klass[klass[1,2], klass[3,4]]
|
||||
set.flatten!.should equal(set)
|
||||
end
|
||||
|
||||
it "returns nil when self was not modified" do
|
||||
set = SortedSet[1, 2, 3, 4]
|
||||
set.flatten!.should be_nil
|
||||
end
|
||||
end
|
|
@ -0,0 +1,13 @@
|
|||
require_relative '../../../spec_helper'
|
||||
require 'set'
|
||||
|
||||
describe "SortedSet#hash" do
|
||||
it "is static" do
|
||||
SortedSet[].hash.should == SortedSet[].hash
|
||||
SortedSet[1, 2, 3].hash.should == SortedSet[1, 2, 3].hash
|
||||
SortedSet["a", "b", "c"].hash.should == SortedSet["c", "b", "a"].hash
|
||||
|
||||
SortedSet[].hash.should_not == SortedSet[1, 2, 3].hash
|
||||
SortedSet[1, 2, 3].hash.should_not == SortedSet["a", "b", "c"].hash
|
||||
end
|
||||
end
|
|
@ -0,0 +1,7 @@
|
|||
require_relative '../../../spec_helper'
|
||||
require_relative 'shared/include'
|
||||
require 'set'
|
||||
|
||||
describe "SortedSet#include?" do
|
||||
it_behaves_like :sorted_set_include, :include?
|
||||
end
|
|
@ -0,0 +1,30 @@
|
|||
require_relative '../../../spec_helper'
|
||||
require 'set'
|
||||
|
||||
describe "SortedSet#initialize" do
|
||||
it "is private" do
|
||||
SortedSet.should have_private_instance_method("initialize")
|
||||
end
|
||||
|
||||
it "adds all elements of the passed Enumerable to self" do
|
||||
s = SortedSet.new([1, 2, 3])
|
||||
s.size.should eql(3)
|
||||
s.should include(1)
|
||||
s.should include(2)
|
||||
s.should include(3)
|
||||
end
|
||||
|
||||
it "preprocesses all elements by a passed block before adding to self" do
|
||||
s = SortedSet.new([1, 2, 3]) { |x| x * x }
|
||||
s.size.should eql(3)
|
||||
s.should include(1)
|
||||
s.should include(4)
|
||||
s.should include(9)
|
||||
end
|
||||
|
||||
it "raises on incompatible <=> comparison" do
|
||||
# Use #to_a here as elements are sorted only when needed.
|
||||
# Therefore the <=> incompatibility is only noticed on sorting.
|
||||
-> { SortedSet.new(['00', nil]).to_a }.should raise_error(ArgumentError)
|
||||
end
|
||||
end
|
|
@ -0,0 +1,10 @@
|
|||
require_relative '../../../spec_helper'
|
||||
require 'set'
|
||||
|
||||
describe "SortedSet#inspect" do
|
||||
it "returns a String representation of self" do
|
||||
SortedSet[].inspect.should be_kind_of(String)
|
||||
SortedSet[1, 2, 3].inspect.should be_kind_of(String)
|
||||
SortedSet["1", "2", "3"].inspect.should be_kind_of(String)
|
||||
end
|
||||
end
|
|
@ -0,0 +1,11 @@
|
|||
require_relative '../../../spec_helper'
|
||||
require_relative 'shared/intersection'
|
||||
require 'set'
|
||||
|
||||
describe "SortedSet#intersection" do
|
||||
it_behaves_like :sorted_set_intersection, :intersection
|
||||
end
|
||||
|
||||
describe "SortedSet#&" do
|
||||
it_behaves_like :sorted_set_intersection, :&
|
||||
end
|
|
@ -0,0 +1,31 @@
|
|||
require_relative '../../../spec_helper'
|
||||
require 'set'
|
||||
|
||||
describe "SortedSet#keep_if" do
|
||||
before :each do
|
||||
@set = SortedSet["one", "two", "three"]
|
||||
end
|
||||
|
||||
it "yields each Object in self in sorted order" do
|
||||
ret = []
|
||||
@set.keep_if { |x| ret << x }
|
||||
ret.should == ["one", "two", "three"].sort
|
||||
end
|
||||
|
||||
it "keeps every element from self for which the passed block returns true" do
|
||||
@set.keep_if { |x| x.size != 3 }
|
||||
@set.to_a.should == ["three"]
|
||||
end
|
||||
|
||||
it "returns self" do
|
||||
@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.each { |x| x.size != 3 }
|
||||
@set.to_a.should == ["three"]
|
||||
end
|
||||
end
|
|
@ -0,0 +1,7 @@
|
|||
require_relative '../../../spec_helper'
|
||||
require_relative 'shared/length'
|
||||
require 'set'
|
||||
|
||||
describe "SortedSet#length" do
|
||||
it_behaves_like :sorted_set_length, :length
|
||||
end
|
|
@ -0,0 +1,7 @@
|
|||
require_relative '../../../spec_helper'
|
||||
require 'set'
|
||||
require_relative 'shared/collect'
|
||||
|
||||
describe "SortedSet#map!" do
|
||||
it_behaves_like :sorted_set_collect_bang, :map!
|
||||
end
|
|
@ -0,0 +1,7 @@
|
|||
require_relative '../../../spec_helper'
|
||||
require_relative 'shared/include'
|
||||
require 'set'
|
||||
|
||||
describe "SortedSet#member?" do
|
||||
it_behaves_like :sorted_set_include, :member?
|
||||
end
|
|
@ -0,0 +1,19 @@
|
|||
require_relative '../../../spec_helper'
|
||||
require 'set'
|
||||
|
||||
describe "SortedSet#merge" do
|
||||
it "adds the elements of the passed Enumerable to self" do
|
||||
SortedSet["a", "b"].merge(SortedSet["b", "c", "d"]).should == SortedSet["a", "b", "c", "d"]
|
||||
SortedSet[1, 2].merge([3, 4]).should == SortedSet[1, 2, 3, 4]
|
||||
end
|
||||
|
||||
it "returns self" do
|
||||
set = SortedSet[1, 2]
|
||||
set.merge([3, 4]).should equal(set)
|
||||
end
|
||||
|
||||
it "raises an ArgumentError when passed a non-Enumerable" do
|
||||
-> { SortedSet[1, 2].merge(1) }.should raise_error(ArgumentError)
|
||||
-> { SortedSet[1, 2].merge(Object.new) }.should raise_error(ArgumentError)
|
||||
end
|
||||
end
|
|
@ -0,0 +1,7 @@
|
|||
require_relative '../../../spec_helper'
|
||||
require 'set'
|
||||
require_relative 'shared/difference'
|
||||
|
||||
describe "SortedSet#-" do
|
||||
it_behaves_like :sorted_set_difference, :-
|
||||
end
|
|
@ -0,0 +1,7 @@
|
|||
require_relative '../../../spec_helper'
|
||||
require_relative 'shared/union'
|
||||
require 'set'
|
||||
|
||||
describe "SortedSet#+" do
|
||||
it_behaves_like :sorted_set_union, :+
|
||||
end
|
|
@ -0,0 +1,10 @@
|
|||
require_relative '../../../spec_helper'
|
||||
require 'set'
|
||||
|
||||
describe "SortedSet#pretty_print_cycle" do
|
||||
it "passes the 'pretty print' representation of a self-referencing SortedSet to the pretty print writer" do
|
||||
pp = mock("PrettyPrint")
|
||||
pp.should_receive(:text).with("#<SortedSet: {...}>")
|
||||
SortedSet[1, 2, 3].pretty_print_cycle(pp)
|
||||
end
|
||||
end
|
|
@ -0,0 +1,17 @@
|
|||
require_relative '../../../spec_helper'
|
||||
require 'set'
|
||||
|
||||
describe "SortedSet#pretty_print" do
|
||||
it "passes the 'pretty print' representation of self to the pretty print writer" do
|
||||
pp = mock("PrettyPrint")
|
||||
set = SortedSet[1, 2, 3]
|
||||
|
||||
pp.should_receive(:text).with("#<SortedSet: {")
|
||||
pp.should_receive(:text).with("}>")
|
||||
|
||||
pp.should_receive(:nest).with(1).and_yield
|
||||
pp.should_receive(:seplist).with(set)
|
||||
|
||||
set.pretty_print(pp)
|
||||
end
|
||||
end
|
|
@ -0,0 +1,33 @@
|
|||
require_relative '../../../spec_helper'
|
||||
require 'set'
|
||||
|
||||
describe "SortedSet#proper_subset?" do
|
||||
before :each do
|
||||
@set = SortedSet[1, 2, 3, 4]
|
||||
end
|
||||
|
||||
it "returns true if passed a SortedSet that self is a proper subset of" do
|
||||
SortedSet[].proper_subset?(@set).should be_true
|
||||
SortedSet[].proper_subset?(SortedSet[1, 2, 3]).should be_true
|
||||
SortedSet[].proper_subset?(SortedSet["a", "b", "c"]).should be_true
|
||||
|
||||
SortedSet[1, 2, 3].proper_subset?(@set).should be_true
|
||||
SortedSet[1, 3].proper_subset?(@set).should be_true
|
||||
SortedSet[1, 2].proper_subset?(@set).should be_true
|
||||
SortedSet[1].proper_subset?(@set).should be_true
|
||||
|
||||
SortedSet[5].proper_subset?(@set).should be_false
|
||||
SortedSet[1, 5].proper_subset?(@set).should be_false
|
||||
SortedSet["test"].proper_subset?(@set).should be_false
|
||||
|
||||
@set.proper_subset?(@set).should be_false
|
||||
SortedSet[].proper_subset?(SortedSet[]).should be_false
|
||||
end
|
||||
|
||||
it "raises an ArgumentError when passed a non-SortedSet" do
|
||||
-> { SortedSet[].proper_subset?([]) }.should raise_error(ArgumentError)
|
||||
-> { SortedSet[].proper_subset?(1) }.should raise_error(ArgumentError)
|
||||
-> { SortedSet[].proper_subset?("test") }.should raise_error(ArgumentError)
|
||||
-> { SortedSet[].proper_subset?(Object.new) }.should raise_error(ArgumentError)
|
||||
end
|
||||
end
|
|
@ -0,0 +1,33 @@
|
|||
require_relative '../../../spec_helper'
|
||||
require 'set'
|
||||
|
||||
describe "SortedSet#proper_superset?" do
|
||||
before :each do
|
||||
@set = SortedSet[1, 2, 3, 4]
|
||||
end
|
||||
|
||||
it "returns true if passed a SortedSet that self is a proper superset of" do
|
||||
@set.proper_superset?(SortedSet[]).should be_true
|
||||
SortedSet[1, 2, 3].proper_superset?(SortedSet[]).should be_true
|
||||
SortedSet["a", "b", "c"].proper_superset?(SortedSet[]).should be_true
|
||||
|
||||
@set.proper_superset?(SortedSet[1, 2, 3]).should be_true
|
||||
@set.proper_superset?(SortedSet[1, 3]).should be_true
|
||||
@set.proper_superset?(SortedSet[1, 2]).should be_true
|
||||
@set.proper_superset?(SortedSet[1]).should be_true
|
||||
|
||||
@set.proper_superset?(SortedSet[5]).should be_false
|
||||
@set.proper_superset?(SortedSet[1, 5]).should be_false
|
||||
@set.proper_superset?(SortedSet["test"]).should be_false
|
||||
|
||||
@set.proper_superset?(@set).should be_false
|
||||
SortedSet[].proper_superset?(SortedSet[]).should be_false
|
||||
end
|
||||
|
||||
it "raises an ArgumentError when passed a non-SortedSet" do
|
||||
-> { SortedSet[].proper_superset?([]) }.should raise_error(ArgumentError)
|
||||
-> { SortedSet[].proper_superset?(1) }.should raise_error(ArgumentError)
|
||||
-> { SortedSet[].proper_superset?("test") }.should raise_error(ArgumentError)
|
||||
-> { SortedSet[].proper_superset?(Object.new) }.should raise_error(ArgumentError)
|
||||
end
|
||||
end
|
|
@ -0,0 +1,42 @@
|
|||
require_relative '../../../spec_helper'
|
||||
require 'set'
|
||||
|
||||
describe "SortedSet#reject!" do
|
||||
before :each do
|
||||
@set = SortedSet["one", "two", "three"]
|
||||
end
|
||||
|
||||
it "yields each Object in self in sorted order" do
|
||||
res = []
|
||||
@set.reject! { |x| res << x }
|
||||
res.should == ["one", "two", "three"].sort
|
||||
end
|
||||
|
||||
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.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)
|
||||
end
|
||||
|
||||
it "returns nil when self was not modified" do
|
||||
@set.reject! { |x| false }.should be_nil
|
||||
end
|
||||
|
||||
it "returns an Enumerator when passed no block" do
|
||||
enum = @set.reject!
|
||||
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
|
|
@ -0,0 +1,17 @@
|
|||
require_relative '../../../spec_helper'
|
||||
require 'set'
|
||||
|
||||
describe "SortedSet#replace" do
|
||||
before :each do
|
||||
@set = SortedSet["a", "b", "c"]
|
||||
end
|
||||
|
||||
it "replaces the contents with other and returns self" do
|
||||
@set.replace(SortedSet[1, 2, 3]).should == @set
|
||||
@set.should == SortedSet[1, 2, 3]
|
||||
end
|
||||
|
||||
it "accepts any enumerable as other" do
|
||||
@set.replace([1, 2, 3]).should == SortedSet[1, 2, 3]
|
||||
end
|
||||
end
|
|
@ -0,0 +1,7 @@
|
|||
require_relative '../../../spec_helper'
|
||||
require_relative 'shared/select'
|
||||
require 'set'
|
||||
|
||||
describe "SortedSet#select!" do
|
||||
it_behaves_like :sorted_set_select_bang, :select!
|
||||
end
|
|
@ -0,0 +1,14 @@
|
|||
describe :sorted_set_add, shared: true do
|
||||
before :each do
|
||||
@set = SortedSet.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
|
|
@ -0,0 +1,20 @@
|
|||
describe :sorted_set_collect_bang, shared: true do
|
||||
before :each do
|
||||
@set = SortedSet[1, 2, 3, 4, 5]
|
||||
end
|
||||
|
||||
it "yields each Object in self in sorted order" do
|
||||
res = []
|
||||
SortedSet["one", "two", "three"].send(@method) { |x| res << x; x }
|
||||
res.should == ["one", "two", "three"].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 == SortedSet[2, 4, 6, 8, 10]
|
||||
end
|
||||
end
|
|
@ -0,0 +1,15 @@
|
|||
describe :sorted_set_difference, shared: true do
|
||||
before :each do
|
||||
@set = SortedSet["a", "b", "c"]
|
||||
end
|
||||
|
||||
it "returns a new SortedSet containing self's elements excluding the elements in the passed Enumerable" do
|
||||
@set.send(@method, SortedSet["a", "b"]).should == SortedSet["c"]
|
||||
@set.send(@method, ["b", "c"]).should == SortedSet["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
|
|
@ -0,0 +1,7 @@
|
|||
describe :sorted_set_include, shared: true do
|
||||
it "returns true when self contains the passed Object" do
|
||||
set = SortedSet["a", "b", "c"]
|
||||
set.send(@method, "a").should be_true
|
||||
set.send(@method, "e").should be_false
|
||||
end
|
||||
end
|
|
@ -0,0 +1,15 @@
|
|||
describe :sorted_set_intersection, shared: true do
|
||||
before :each do
|
||||
@set = SortedSet["a", "b", "c"]
|
||||
end
|
||||
|
||||
it "returns a new SortedSet containing only elements shared by self and the passed Enumerable" do
|
||||
@set.send(@method, SortedSet["b", "c", "d", "e"]).should == SortedSet["b", "c"]
|
||||
@set.send(@method, ["b", "c", "d"]).should == SortedSet["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
|
|
@ -0,0 +1,6 @@
|
|||
describe :sorted_set_length, shared: true do
|
||||
it "returns the number of elements in the set" do
|
||||
set = SortedSet["a", "b", "c"]
|
||||
set.send(@method).should == 3
|
||||
end
|
||||
end
|
|
@ -0,0 +1,35 @@
|
|||
require_relative '../../../../spec_helper'
|
||||
require 'set'
|
||||
|
||||
describe :sorted_set_select_bang, shared: true do
|
||||
before :each do
|
||||
@set = SortedSet["one", "two", "three"]
|
||||
end
|
||||
|
||||
it "yields each Object in self in sorted order" do
|
||||
res = []
|
||||
@set.send(@method) { |x| res << x }
|
||||
res.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.to_a.should == ["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.to_a.should == ["three"]
|
||||
end
|
||||
end
|
|
@ -0,0 +1,15 @@
|
|||
describe :sorted_set_union, shared: true do
|
||||
before :each do
|
||||
@set = SortedSet["a", "b", "c"]
|
||||
end
|
||||
|
||||
it "returns a new SortedSet containing all elements of self and the passed Enumerable" do
|
||||
@set.send(@method, SortedSet["b", "d", "e"]).should == SortedSet["a", "b", "c", "d", "e"]
|
||||
@set.send(@method, ["b", "e"]).should == SortedSet["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
|
|
@ -0,0 +1,7 @@
|
|||
require_relative '../../../spec_helper'
|
||||
require_relative 'shared/length'
|
||||
require 'set'
|
||||
|
||||
describe "SortedSet#size" do
|
||||
it_behaves_like :sorted_set_length, :size
|
||||
end
|
|
@ -0,0 +1,33 @@
|
|||
require_relative '../../../spec_helper'
|
||||
require 'set'
|
||||
|
||||
describe "SortedSet#subset?" do
|
||||
before :each do
|
||||
@set = SortedSet[1, 2, 3, 4]
|
||||
end
|
||||
|
||||
it "returns true if passed a SortedSet that is equal to self or self is a subset of" do
|
||||
@set.subset?(@set).should be_true
|
||||
SortedSet[].subset?(SortedSet[]).should be_true
|
||||
|
||||
SortedSet[].subset?(@set).should be_true
|
||||
SortedSet[].subset?(SortedSet[1, 2, 3]).should be_true
|
||||
SortedSet[].subset?(SortedSet["a", "b", "c"]).should be_true
|
||||
|
||||
SortedSet[1, 2, 3].subset?(@set).should be_true
|
||||
SortedSet[1, 3].subset?(@set).should be_true
|
||||
SortedSet[1, 2].subset?(@set).should be_true
|
||||
SortedSet[1].subset?(@set).should be_true
|
||||
|
||||
SortedSet[5].subset?(@set).should be_false
|
||||
SortedSet[1, 5].subset?(@set).should be_false
|
||||
SortedSet["test"].subset?(@set).should be_false
|
||||
end
|
||||
|
||||
it "raises an ArgumentError when passed a non-SortedSet" do
|
||||
-> { SortedSet[].subset?([]) }.should raise_error(ArgumentError)
|
||||
-> { SortedSet[].subset?(1) }.should raise_error(ArgumentError)
|
||||
-> { SortedSet[].subset?("test") }.should raise_error(ArgumentError)
|
||||
-> { SortedSet[].subset?(Object.new) }.should raise_error(ArgumentError)
|
||||
end
|
||||
end
|
|
@ -0,0 +1,17 @@
|
|||
require_relative '../../../spec_helper'
|
||||
require 'set'
|
||||
|
||||
describe "SortedSet#subtract" do
|
||||
before :each do
|
||||
@set = SortedSet["a", "b", "c"]
|
||||
end
|
||||
|
||||
it "deletes any elements contained in other and returns self" do
|
||||
@set.subtract(SortedSet["b", "c"]).should == @set
|
||||
@set.should == SortedSet["a"]
|
||||
end
|
||||
|
||||
it "accepts any enumerable as other" do
|
||||
@set.subtract(["c"]).should == SortedSet["a", "b"]
|
||||
end
|
||||
end
|
|
@ -0,0 +1,33 @@
|
|||
require_relative '../../../spec_helper'
|
||||
require 'set'
|
||||
|
||||
describe "SortedSet#superset?" do
|
||||
before :each do
|
||||
@set = SortedSet[1, 2, 3, 4]
|
||||
end
|
||||
|
||||
it "returns true if passed a SortedSet that equals self or self is a proper superset of" do
|
||||
@set.superset?(@set).should be_true
|
||||
SortedSet[].superset?(SortedSet[]).should be_true
|
||||
|
||||
@set.superset?(SortedSet[]).should be_true
|
||||
SortedSet[1, 2, 3].superset?(SortedSet[]).should be_true
|
||||
SortedSet["a", "b", "c"].superset?(SortedSet[]).should be_true
|
||||
|
||||
@set.superset?(SortedSet[1, 2, 3]).should be_true
|
||||
@set.superset?(SortedSet[1, 3]).should be_true
|
||||
@set.superset?(SortedSet[1, 2]).should be_true
|
||||
@set.superset?(SortedSet[1]).should be_true
|
||||
|
||||
@set.superset?(SortedSet[5]).should be_false
|
||||
@set.superset?(SortedSet[1, 5]).should be_false
|
||||
@set.superset?(SortedSet["test"]).should be_false
|
||||
end
|
||||
|
||||
it "raises an ArgumentError when passed a non-SortedSet" do
|
||||
-> { SortedSet[].superset?([]) }.should raise_error(ArgumentError)
|
||||
-> { SortedSet[].superset?(1) }.should raise_error(ArgumentError)
|
||||
-> { SortedSet[].superset?("test") }.should raise_error(ArgumentError)
|
||||
-> { SortedSet[].superset?(Object.new) }.should raise_error(ArgumentError)
|
||||
end
|
||||
end
|
|
@ -0,0 +1,17 @@
|
|||
require_relative '../../../spec_helper'
|
||||
require 'set'
|
||||
|
||||
describe "SortedSet#to_a" do
|
||||
it "returns an array containing elements" do
|
||||
set = SortedSet.new [1, 2, 3]
|
||||
set.to_a.should == [1, 2, 3]
|
||||
end
|
||||
|
||||
it "returns a sorted array containing elements" do
|
||||
set = SortedSet[2, 3, 1]
|
||||
set.to_a.should == [1, 2, 3]
|
||||
|
||||
set = SortedSet.new [5, 6, 4, 4]
|
||||
set.to_a.should == [4, 5, 6]
|
||||
end
|
||||
end
|
|
@ -0,0 +1,11 @@
|
|||
require_relative '../../../spec_helper'
|
||||
require_relative 'shared/union'
|
||||
require 'set'
|
||||
|
||||
describe "SortedSet#union" do
|
||||
it_behaves_like :sorted_set_union, :union
|
||||
end
|
||||
|
||||
describe "SortedSet#|" do
|
||||
it_behaves_like :sorted_set_union, :|
|
||||
end
|
Загрузка…
Ссылка в новой задаче