diff options
Diffstat (limited to 'spec/ruby/core/range/step_spec.rb')
-rw-r--r-- | spec/ruby/core/range/step_spec.rb | 27 |
1 files changed, 11 insertions, 16 deletions
diff --git a/spec/ruby/core/range/step_spec.rb b/spec/ruby/core/range/step_spec.rb index 3d5e75b033..c364600fb0 100644 --- a/spec/ruby/core/range/step_spec.rb +++ b/spec/ruby/core/range/step_spec.rb @@ -5,9 +5,9 @@ describe "Range#step" do ScratchPad.record [] end - it "returns an enumerator when no block is given" do + it "returns an arithmetic sequence when no block is given" do enum = (1..10).step(4) - enum.should be_an_instance_of(Enumerator) + enum.should be_an_instance_of(Enumerator::ArithmeticSequence) enum.to_a.should eql([1, 5, 9]) end @@ -263,7 +263,7 @@ describe "Range#step" do end describe "when no block is given" do - describe "returned Enumerator" do + describe "returned Enumerator::ArithmeticSequence" do describe "size" do it "raises a TypeError if step does not respond to #to_int" do obj = mock("Range#step non-integer") @@ -279,19 +279,9 @@ describe "Range#step" do lambda { enum.size }.should raise_error(TypeError) end - it "raises an ArgumentError if step is 0" do - enum = (-1..1).step(0) - lambda { enum.size }.should raise_error(ArgumentError) - end - - it "raises an ArgumentError if step is 0.0" do - enum = (-1..1).step(0.0) - lambda { enum.size }.should raise_error(ArgumentError) - end - - it "raises an ArgumentError if step is negative" do - enum = (-1..1).step(-2) - lambda { enum.size }.should raise_error(ArgumentError) + it "returns Float::INFINITY for zero step" do + (-1..1).step(0).size.should == Float::INFINITY + (-1..1).step(0.0).size.should == Float::INFINITY end it "returns the ceil of range size divided by the number of steps" do @@ -307,6 +297,11 @@ describe "Range#step" do (-5...5).step(2).size.should == 5 end + it "returns the ceil of range size divided by the number of steps even if step is negative" do + (-1..1).step(-1).size.should == 0 + (1..-1).step(-1).size.should == 3 + end + it "returns the correct number of steps when one of the arguments is a float" do (-1..1.0).step(0.5).size.should == 5 (-1.0...1.0).step(0.5).size.should == 4 |