You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
216 lines
4.3 KiB
216 lines
4.3 KiB
var test = require('tap').test |
|
var LRU = require('../') |
|
|
|
test('dump', function (t) { |
|
var cache = new LRU() |
|
|
|
t.equal(cache.dump().length, 0, "nothing in dump for empty cache") |
|
|
|
cache.set("a", "A") |
|
cache.set("b", "B") |
|
t.deepEqual(cache.dump(), [ |
|
{ k: "b", v: "B", e: 0 }, |
|
{ k: "a", v: "A", e: 0 } |
|
]) |
|
|
|
cache.set("a", "A"); |
|
t.deepEqual(cache.dump(), [ |
|
{ k: "a", v: "A", e: 0 }, |
|
{ k: "b", v: "B", e: 0 } |
|
]) |
|
|
|
cache.get("b"); |
|
t.deepEqual(cache.dump(), [ |
|
{ k: "b", v: "B", e: 0 }, |
|
{ k: "a", v: "A", e: 0 } |
|
]) |
|
|
|
cache.del("a"); |
|
t.deepEqual(cache.dump(), [ |
|
{ k: "b", v: "B", e: 0 } |
|
]) |
|
|
|
t.end() |
|
}) |
|
|
|
test("do not dump stale items", function(t) { |
|
var cache = new LRU({ |
|
max: 5, |
|
maxAge: 50 |
|
}) |
|
|
|
//expires at 50 |
|
cache.set("a", "A") |
|
|
|
setTimeout(function () { |
|
//expires at 75 |
|
cache.set("b", "B") |
|
var s = cache.dump() |
|
t.equal(s.length, 2) |
|
t.equal(s[0].k, "b") |
|
t.equal(s[1].k, "a") |
|
}, 25) |
|
|
|
setTimeout(function () { |
|
//expires at 110 |
|
cache.set("c", "C") |
|
var s = cache.dump() |
|
t.equal(s.length, 2) |
|
t.equal(s[0].k, "c") |
|
t.equal(s[1].k, "b") |
|
}, 60) |
|
|
|
setTimeout(function () { |
|
//expires at 130 |
|
cache.set("d", "D", 40) |
|
var s = cache.dump() |
|
t.equal(s.length, 2) |
|
t.equal(s[0].k, "d") |
|
t.equal(s[1].k, "c") |
|
}, 90) |
|
|
|
setTimeout(function () { |
|
var s = cache.dump() |
|
t.equal(s.length, 1) |
|
t.equal(s[0].k, "d") |
|
}, 120) |
|
|
|
setTimeout(function () { |
|
var s = cache.dump() |
|
t.deepEqual(s, []) |
|
t.end() |
|
}, 155) |
|
}) |
|
|
|
test("load basic cache", function(t) { |
|
var cache = new LRU(), |
|
copy = new LRU() |
|
|
|
cache.set("a", "A") |
|
cache.set("b", "B") |
|
|
|
copy.load(cache.dump()) |
|
t.deepEquals(cache.dump(), copy.dump()) |
|
|
|
t.end() |
|
}) |
|
|
|
|
|
test("load staled cache", function(t) { |
|
var cache = new LRU({maxAge: 50}), |
|
copy = new LRU({maxAge: 50}), |
|
arr |
|
|
|
//expires at 50 |
|
cache.set("a", "A") |
|
setTimeout(function () { |
|
//expires at 80 |
|
cache.set("b", "B") |
|
arr = cache.dump() |
|
t.equal(arr.length, 2) |
|
}, 30) |
|
|
|
setTimeout(function () { |
|
copy.load(arr) |
|
t.equal(copy.get("a"), undefined) |
|
t.equal(copy.get("b"), "B") |
|
}, 60) |
|
|
|
setTimeout(function () { |
|
t.equal(copy.get("b"), undefined) |
|
t.end() |
|
}, 90) |
|
}) |
|
|
|
test("load to other size cache", function(t) { |
|
var cache = new LRU({max: 2}), |
|
copy = new LRU({max: 1}) |
|
|
|
cache.set("a", "A") |
|
cache.set("b", "B") |
|
|
|
copy.load(cache.dump()) |
|
t.equal(copy.get("a"), undefined) |
|
t.equal(copy.get("b"), "B") |
|
|
|
//update the last read from original cache |
|
cache.get("a") |
|
copy.load(cache.dump()) |
|
t.equal(copy.get("a"), "A") |
|
t.equal(copy.get("b"), undefined) |
|
|
|
t.end() |
|
}) |
|
|
|
|
|
test("load to other age cache", function(t) { |
|
var cache = new LRU({maxAge: 50}), |
|
aged = new LRU({maxAge: 100}), |
|
simple = new LRU(), |
|
arr, |
|
expired |
|
|
|
//created at 0 |
|
//a would be valid till 0 + 50 |
|
cache.set("a", "A") |
|
setTimeout(function () { |
|
//created at 20 |
|
//b would be valid till 20 + 50 |
|
cache.set("b", "B") |
|
//b would be valid till 20 + 70 |
|
cache.set("c", "C", 70) |
|
arr = cache.dump() |
|
t.equal(arr.length, 3) |
|
}, 20) |
|
|
|
setTimeout(function () { |
|
t.equal(cache.get("a"), undefined) |
|
t.equal(cache.get("b"), "B") |
|
t.equal(cache.get("c"), "C") |
|
|
|
aged.load(arr) |
|
t.equal(aged.get("a"), undefined) |
|
t.equal(aged.get("b"), "B") |
|
t.equal(aged.get("c"), "C") |
|
|
|
simple.load(arr) |
|
t.equal(simple.get("a"), undefined) |
|
t.equal(simple.get("b"), "B") |
|
t.equal(simple.get("c"), "C") |
|
}, 60) |
|
|
|
setTimeout(function () { |
|
t.equal(cache.get("a"), undefined) |
|
t.equal(cache.get("b"), undefined) |
|
t.equal(cache.get("c"), "C") |
|
|
|
aged.load(arr) |
|
t.equal(aged.get("a"), undefined) |
|
t.equal(aged.get("b"), undefined) |
|
t.equal(aged.get("c"), "C") |
|
|
|
simple.load(arr) |
|
t.equal(simple.get("a"), undefined) |
|
t.equal(simple.get("b"), undefined) |
|
t.equal(simple.get("c"), "C") |
|
}, 80) |
|
|
|
setTimeout(function () { |
|
t.equal(cache.get("a"), undefined) |
|
t.equal(cache.get("b"), undefined) |
|
t.equal(cache.get("c"), undefined) |
|
|
|
aged.load(arr) |
|
t.equal(aged.get("a"), undefined) |
|
t.equal(aged.get("b"), undefined) |
|
t.equal(aged.get("c"), undefined) |
|
|
|
simple.load(arr) |
|
t.equal(simple.get("a"), undefined) |
|
t.equal(simple.get("b"), undefined) |
|
t.equal(simple.get("c"), undefined) |
|
t.end() |
|
}, 100) |
|
|
|
}) |
|
|
|
|