| 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) |
| |
| }) |
| |