diff options
Diffstat (limited to 'spec/ruby/core/hash/shift_spec.rb')
| -rw-r--r-- | spec/ruby/core/hash/shift_spec.rb | 40 |
1 files changed, 27 insertions, 13 deletions
diff --git a/spec/ruby/core/hash/shift_spec.rb b/spec/ruby/core/hash/shift_spec.rb index 3991da9656..6095d2e55f 100644 --- a/spec/ruby/core/hash/shift_spec.rb +++ b/spec/ruby/core/hash/shift_spec.rb @@ -1,5 +1,5 @@ -require File.expand_path('../../../spec_helper', __FILE__) -require File.expand_path('../fixtures/classes', __FILE__) +require_relative '../../spec_helper' +require_relative 'fixtures/classes' describe "Hash#shift" do it "removes a pair from hash and return it" do @@ -8,7 +8,7 @@ describe "Hash#shift" do h.size.times do |i| r = h.shift - r.should be_kind_of(Array) + r.should.is_a?(Array) h2[r.first].should == r.last h.size.should == h2.size - i - 1 end @@ -30,23 +30,22 @@ describe "Hash#shift" do h.should == {} end - it "calls #default with nil if the Hash is empty" do + it "returns nil if the Hash is empty" do h = {} def h.default(key) - key.should == nil - :foo + raise end - h.shift.should == :foo + h.shift.should == nil end it "returns nil from an empty hash" do {}.shift.should == nil end - it "returns (computed) default for empty hashes" do - Hash.new(5).shift.should == 5 + it "returns nil for empty hashes with defaults and default procs" do + Hash.new(5).shift.should == nil h = Hash.new { |*args| args } - h.shift.should == [h, nil] + h.shift.should == nil end it "preserves Hash invariants when removing the last item" do @@ -57,8 +56,23 @@ describe "Hash#shift" do h.should == {:c => 3} end - it "raises a RuntimeError if called on a frozen instance" do - lambda { HashSpecs.frozen_hash.shift }.should raise_error(RuntimeError) - lambda { HashSpecs.empty_frozen_hash.shift }.should raise_error(RuntimeError) + it "raises a FrozenError if called on a frozen instance" do + -> { HashSpecs.frozen_hash.shift }.should.raise(FrozenError) + -> { HashSpecs.empty_frozen_hash.shift }.should.raise(FrozenError) + end + + it "works when the hash is at capacity" do + # We try a wide range of sizes in hopes that this will cover all implementations' base Hash size. + results = [] + 1.upto(100) do |n| + h = {} + n.times do |i| + h[i] = i + end + h.shift + results << h.size + end + + results.should == 0.upto(99).to_a end end |
