Created
December 19, 2009 06:20
-
-
Save tomoya55/259982 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| require "lru_cache" | |
| describe Array do | |
| it "指定された値を末尾に移動させる" do | |
| arr = [:a, :b, :c] | |
| arr.move_to_last(:a) | |
| arr.last.should eql :a | |
| end | |
| end | |
| describe LRUCache do | |
| before :each do | |
| @cache_size = rand(100) + 1 | |
| @lru = LRUCache.new(:cache_size => @cache_size) | |
| end | |
| describe "get_put" do | |
| it "should have a value when called put with a new value" do | |
| @lru.put(:key, 'value') | |
| @lru.get(:key).should eql 'value' | |
| end | |
| it "サイズが2の場合、一つも使われていない場合は最初に追加したものから消える" do | |
| @cache_size.times do |n| | |
| @lru.put(n, "data#{n}") | |
| end | |
| @lru.put(:c, "dataC") | |
| @lru.get(0).should be_nil | |
| end | |
| it "getされたら使われたとみなす" do | |
| @cache_size.times do |n| | |
| @lru.put(n, "data#{n}") | |
| end | |
| @lru.get(0).should eql 'data0' | |
| @lru.put(:c, "dataC") | |
| @lru.get(1).should be_nil | |
| end | |
| it "get_itemを呼んだら、itemを返す" do | |
| @lru.put(:a, "dataA") | |
| @lru.send(:get_item, :a)[0].should eql :a | |
| @lru.send(:get_item, :a)[1].should be_a_kind_of Time | |
| @lru.send(:get_item, :a)[2].should eql 'dataA' | |
| end | |
| it "keyが重複した場合上書きを行う" do | |
| @lru.put(:a, "dataA") | |
| @lru.put(:a, "dataB") | |
| @lru.get(:a).should eql 'dataB' | |
| end | |
| it "keyが重複して挿入できる" do | |
| @lru.put(0, "data100") | |
| @cache_size.times do |n| | |
| @lru.put(n, "data#{n}") | |
| end | |
| @lru.put(:c, "dataC") | |
| @lru.get(0).should be_nil | |
| end | |
| it "重複したkeyを入力した場合、使われたと見なす" do | |
| @cache_size.times do |n| | |
| @lru.put(n, "data#{n}") | |
| end | |
| @lru.put(0, "data100") | |
| @lru.put(:c, "dataC") | |
| @lru.get(1).should be_nil | |
| end | |
| end | |
| describe 'initialize' do | |
| it "cache_sizeが0の場合" | |
| it "初期化されるときに、キャッシュサイズを指定できる" do | |
| lambda { LRUCache.new(:cache_size => rand(100)) }.should_not raise_error | |
| end | |
| it "初期化されるときに、保存時間を指定できる" do | |
| lambda { LRUCache.new(:store_seconds => rand(100)) }.should_not raise_error | |
| end | |
| end | |
| describe 'cache_size' do | |
| it "キャッシュサイズが正しく指定できる" do | |
| @lru.cache_size.should eql @cache_size | |
| end | |
| it "キャッシュサイズを変更できる" do | |
| @lru.cache_size = 3 | |
| @lru.cache_size.should eql 3 | |
| end | |
| it "キャッシュサイズが増えた場合、新しいサイズがフルになるまで新たにputできる" do | |
| @cache_size.times do |n| | |
| @lru.put(n, "data#{n}") | |
| end | |
| @lru.cache_size = @cache_size + 1 | |
| @lru.put(:c, "dataC") | |
| @lru.get(0).should eql 'data0' | |
| end | |
| it "キャッシュサイズを1つ減らした場合、もっとも古いものが削除される" do | |
| @cache_size.times do |n| | |
| @lru.put(n, "data#{n}") | |
| end | |
| @lru.cache_size = @cache_size - 1 | |
| @lru.get(0).should be_nil | |
| end | |
| it "キャッシュサイズを1に減らした場合、最新のもの以外すべて削除される" do | |
| @cache_size.times do |n| | |
| @lru.put(n, "data#{n}") | |
| end | |
| @lru.cache_size = 1 | |
| (@cache_size-1).times do |n| | |
| @lru.get(n).should be_nil | |
| end | |
| @lru.get(@cache_size-1).should eql "data#{@cache_size-1}" | |
| end | |
| end | |
| describe '一定時間経ったデータは消える' do | |
| it "保存する時間を指定できる" do | |
| @lru.store_seconds = 10 | |
| @lru.store_seconds.should eql 10 | |
| end | |
| it "アクセスタイムを見られる" do | |
| @lru.put(:key, 'value') | |
| @lru.send(:get_atime, :key).should be_a_kind_of Time | |
| end | |
| it "一定時間経ったデータは消える" do | |
| @lru.store_seconds = 1 | |
| @lru.put(:key, 'value') | |
| sleep(2) | |
| @lru.get(:key).should be_nil | |
| end | |
| end | |
| end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment