diff options
Diffstat (limited to 'spec/ruby/core/range/shared/cover_and_include.rb')
-rw-r--r-- | spec/ruby/core/range/shared/cover_and_include.rb | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/spec/ruby/core/range/shared/cover_and_include.rb b/spec/ruby/core/range/shared/cover_and_include.rb new file mode 100644 index 0000000000..4222424571 --- /dev/null +++ b/spec/ruby/core/range/shared/cover_and_include.rb @@ -0,0 +1,66 @@ +# -*- encoding: ascii-8bit -*- +require File.expand_path('../../../../spec_helper', __FILE__) + +describe :range_cover_and_include, shared: true do + it "returns true if other is an element of self" do + (0..5).send(@method, 2).should == true + (-5..5).send(@method, 0).should == true + (-1...1).send(@method, 10.5).should == false + (-10..-2).send(@method, -2.5).should == true + ('C'..'X').send(@method, 'M').should == true + ('C'..'X').send(@method, 'A').should == false + ('B'...'W').send(@method, 'W').should == false + ('B'...'W').send(@method, 'Q').should == true + (0xffff..0xfffff).send(@method, 0xffffd).should == true + (0xffff..0xfffff).send(@method, 0xfffd).should == false + (0.5..2.4).send(@method, 2).should == true + (0.5..2.4).send(@method, 2.5).should == false + (0.5..2.4).send(@method, 2.4).should == true + (0.5...2.4).send(@method, 2.4).should == false + end + + it "compares values using <=>" do + rng = (1..5) + m = mock("int") + m.should_receive(:coerce).and_return([1, 2]) + m.should_receive(:<=>).and_return(1) + + rng.send(@method, m).should be_false + end + + it "raises an ArgumentError without exactly one argument" do + lambda{ (1..2).send(@method) }.should raise_error(ArgumentError) + lambda{ (1..2).send(@method, 1, 2) }.should raise_error(ArgumentError) + end + + it "returns true if argument is equal to the first value of the range" do + (0..5).send(@method, 0).should be_true + ('f'..'s').send(@method, 'f').should be_true + end + + it "returns true if argument is equal to the last value of the range" do + (0..5).send(@method, 5).should be_true + (0...5).send(@method, 4).should be_true + ('f'..'s').send(@method, 's').should be_true + end + + it "returns true if argument is less than the last value of the range and greater than the first value" do + (20..30).send(@method, 28).should be_true + ('e'..'h').send(@method, 'g').should be_true + ("\u{999}".."\u{9999}").send @method, "\u{9995}" + end + + it "returns true if argument is sole element in the range" do + (30..30).send(@method, 30).should be_true + end + + it "returns false if range is empty" do + (30...30).send(@method, 30).should be_false + (30...30).send(@method, nil).should be_false + end + + it "returns false if the range does not contain the argument" do + ('A'..'C').send(@method, 20.9).should be_false + ('A'...'C').send(@method, 'C').should be_false + end +end |