Sha256: 6658fc43529a6e6aaa1b21a339a0073545d02b926b8b79221fbf3ddee2530d41

Contents?: true

Size: 2 KB

Versions: 2

Compression:

Stored size: 2 KB

Contents

require 'spec_helper'


describe Rufus::Lru::Hash do

  let(:hash) { Rufus::Lru::Hash.new(3) }

  context 'like a ::Hash' do

    it 'supports insertion' do

      hash[1] = 2

      hash[1].should == 2
    end

    it 'supports deletion' do

      hash[1] = 2

      hash.delete(1).should == 2

      hash.size.should == 0
    end
  end

  context 'as a LRU Hash' do

    it 'drops entries when the maxsize is reached' do

      4.times { |i| hash[i] = i }

      hash.size.should == 3
    end

    it 're-inserting under a key places the key at the end of the lru_keys' do

      3.times { |i| hash[i] = i }

      hash[0] = :new

      hash.lru_keys.should == [ 1, 2, 0 ]
    end

    it 'removes keys from the lru_keys upon entry deletion' do

      hash[1] = 1
      hash.delete(1)

      hash.lru_keys.should == []
    end
  end

  describe '#lru_keys' do

    it 'returns the keys with the least recently used first' do

      3.times { |i| hash[i] = i }

      hash.lru_keys.should == [ 0, 1, 2 ]
    end
  end

  describe '#ordered_keys' do

    it 'is an alias for #lru_keys' do

      3.times { |i| hash[i] = i }

      hash.lru_keys.should == [ 0, 1, 2 ]
    end
  end

  describe '#[]' do

    it 'returns nil if there is no value' do

      hash[:x].should == nil
    end

    it 'returns false when the value is false' do

      hash[1] = false

      hash[1].should == false
    end

    it 'does not modify the LRU list when looking up a non-present key' do

      hash[:x]

      hash.lru_keys.should == []
    end

    it 'returns the current value' do

      hash[1] = 2

      hash[1].should == 2
    end
  end

  describe '#merge!' do

    it 'merges in place' do

      hash.merge!(1 => 1, 2 => 2)

      hash.size.should == 2
      hash.lru_keys.sort.should == [ 1, 2 ]
    end
  end

  describe '#to_h' do

    it 'returns a new hash with the entries of the LRU hash' do

      4.times { |i| hash[i] = i }

      hash.to_h.class.should == ::Hash
      hash.to_h.should == { 1 => 1, 2 => 2, 3 => 3 }
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
rufus-lru-1.0.5 spec/hash_spec.rb
rufus-lru-1.0.4 spec/hash_spec.rb