react / wstein / node_modules / jest-cli / node_modules / istanbul / node_modules / fileset / node_modules / minimatch / node_modules / lru-cache / test / basic.js
80737 viewsvar test = require("tap").test1, LRU = require("../")23test("basic", function (t) {4var cache = new LRU({max: 10})5cache.set("key", "value")6t.equal(cache.get("key"), "value")7t.equal(cache.get("nada"), undefined)8t.equal(cache.length, 1)9t.equal(cache.max, 10)10t.end()11})1213test("least recently set", function (t) {14var cache = new LRU(2)15cache.set("a", "A")16cache.set("b", "B")17cache.set("c", "C")18t.equal(cache.get("c"), "C")19t.equal(cache.get("b"), "B")20t.equal(cache.get("a"), undefined)21t.end()22})2324test("lru recently gotten", function (t) {25var cache = new LRU(2)26cache.set("a", "A")27cache.set("b", "B")28cache.get("a")29cache.set("c", "C")30t.equal(cache.get("c"), "C")31t.equal(cache.get("b"), undefined)32t.equal(cache.get("a"), "A")33t.end()34})3536test("del", function (t) {37var cache = new LRU(2)38cache.set("a", "A")39cache.del("a")40t.equal(cache.get("a"), undefined)41t.end()42})4344test("max", function (t) {45var cache = new LRU(3)4647// test changing the max, verify that the LRU items get dropped.48cache.max = 10049for (var i = 0; i < 100; i ++) cache.set(i, i)50t.equal(cache.length, 100)51for (var i = 0; i < 100; i ++) {52t.equal(cache.get(i), i)53}54cache.max = 355t.equal(cache.length, 3)56for (var i = 0; i < 97; i ++) {57t.equal(cache.get(i), undefined)58}59for (var i = 98; i < 100; i ++) {60t.equal(cache.get(i), i)61}6263// now remove the max restriction, and try again.64cache.max = "hello"65for (var i = 0; i < 100; i ++) cache.set(i, i)66t.equal(cache.length, 100)67for (var i = 0; i < 100; i ++) {68t.equal(cache.get(i), i)69}70// should trigger an immediate resize71cache.max = 372t.equal(cache.length, 3)73for (var i = 0; i < 97; i ++) {74t.equal(cache.get(i), undefined)75}76for (var i = 98; i < 100; i ++) {77t.equal(cache.get(i), i)78}79t.end()80})8182test("reset", function (t) {83var cache = new LRU(10)84cache.set("a", "A")85cache.set("b", "B")86cache.reset()87t.equal(cache.length, 0)88t.equal(cache.max, 10)89t.equal(cache.get("a"), undefined)90t.equal(cache.get("b"), undefined)91t.end()92})939495// Note: `<cache>.dump()` is a debugging tool only. No guarantees are made96// about the format/layout of the response.97test("dump", function (t) {98var cache = new LRU(10)99var d = cache.dump();100t.equal(Object.keys(d).length, 0, "nothing in dump for empty cache")101cache.set("a", "A")102var d = cache.dump() // { a: { key: "a", value: "A", lu: 0 } }103t.ok(d.a)104t.equal(d.a.key, "a")105t.equal(d.a.value, "A")106t.equal(d.a.lu, 0)107108cache.set("b", "B")109cache.get("b")110d = cache.dump()111t.ok(d.b)112t.equal(d.b.key, "b")113t.equal(d.b.value, "B")114t.equal(d.b.lu, 2)115116t.end()117})118119120test("basic with weighed length", function (t) {121var cache = new LRU({122max: 100,123length: function (item) { return item.size }124})125cache.set("key", {val: "value", size: 50})126t.equal(cache.get("key").val, "value")127t.equal(cache.get("nada"), undefined)128t.equal(cache.lengthCalculator(cache.get("key")), 50)129t.equal(cache.length, 50)130t.equal(cache.max, 100)131t.end()132})133134135test("weighed length item too large", function (t) {136var cache = new LRU({137max: 10,138length: function (item) { return item.size }139})140t.equal(cache.max, 10)141142// should fall out immediately143cache.set("key", {val: "value", size: 50})144145t.equal(cache.length, 0)146t.equal(cache.get("key"), undefined)147t.end()148})149150test("least recently set with weighed length", function (t) {151var cache = new LRU({152max:8,153length: function (item) { return item.length }154})155cache.set("a", "A")156cache.set("b", "BB")157cache.set("c", "CCC")158cache.set("d", "DDDD")159t.equal(cache.get("d"), "DDDD")160t.equal(cache.get("c"), "CCC")161t.equal(cache.get("b"), undefined)162t.equal(cache.get("a"), undefined)163t.end()164})165166test("lru recently gotten with weighed length", function (t) {167var cache = new LRU({168max: 8,169length: function (item) { return item.length }170})171cache.set("a", "A")172cache.set("b", "BB")173cache.set("c", "CCC")174cache.get("a")175cache.get("b")176cache.set("d", "DDDD")177t.equal(cache.get("c"), undefined)178t.equal(cache.get("d"), "DDDD")179t.equal(cache.get("b"), "BB")180t.equal(cache.get("a"), "A")181t.end()182})183184test("set returns proper booleans", function(t) {185var cache = new LRU({186max: 5,187length: function (item) { return item.length }188})189190t.equal(cache.set("a", "A"), true)191192// should return false for max exceeded193t.equal(cache.set("b", "donuts"), false)194195t.equal(cache.set("b", "B"), true)196t.equal(cache.set("c", "CCCC"), true)197t.end()198})199200test("drop the old items", function(t) {201var cache = new LRU({202max: 5,203maxAge: 50204})205206cache.set("a", "A")207208setTimeout(function () {209cache.set("b", "b")210t.equal(cache.get("a"), "A")211}, 25)212213setTimeout(function () {214cache.set("c", "C")215// timed out216t.notOk(cache.get("a"))217}, 60 + 25)218219setTimeout(function () {220t.notOk(cache.get("b"))221t.equal(cache.get("c"), "C")222}, 90)223224setTimeout(function () {225t.notOk(cache.get("c"))226t.end()227}, 155)228})229230test("individual item can have it's own maxAge", function(t) {231var cache = new LRU({232max: 5,233maxAge: 50234})235236cache.set("a", "A", 20)237setTimeout(function () {238t.notOk(cache.get("a"))239t.end()240}, 25)241})242243test("individual item can have it's own maxAge > cache's", function(t) {244var cache = new LRU({245max: 5,246maxAge: 20247})248249cache.set("a", "A", 50)250setTimeout(function () {251t.equal(cache.get("a"), "A")252t.end()253}, 25)254})255256test("disposal function", function(t) {257var disposed = false258var cache = new LRU({259max: 1,260dispose: function (k, n) {261disposed = n262}263})264265cache.set(1, 1)266cache.set(2, 2)267t.equal(disposed, 1)268cache.set(3, 3)269t.equal(disposed, 2)270cache.reset()271t.equal(disposed, 3)272t.end()273})274275test("disposal function on too big of item", function(t) {276var disposed = false277var cache = new LRU({278max: 1,279length: function (k) {280return k.length281},282dispose: function (k, n) {283disposed = n284}285})286var obj = [ 1, 2 ]287288t.equal(disposed, false)289cache.set("obj", obj)290t.equal(disposed, obj)291t.end()292})293294test("has()", function(t) {295var cache = new LRU({296max: 1,297maxAge: 10298})299300cache.set('foo', 'bar')301t.equal(cache.has('foo'), true)302cache.set('blu', 'baz')303t.equal(cache.has('foo'), false)304t.equal(cache.has('blu'), true)305setTimeout(function() {306t.equal(cache.has('blu'), false)307t.end()308}, 15)309})310311test("stale", function(t) {312var cache = new LRU({313maxAge: 10,314stale: true315})316317cache.set('foo', 'bar')318t.equal(cache.get('foo'), 'bar')319t.equal(cache.has('foo'), true)320setTimeout(function() {321t.equal(cache.has('foo'), false)322t.equal(cache.get('foo'), 'bar')323t.equal(cache.get('foo'), undefined)324t.end()325}, 15)326})327328test("lru update via set", function(t) {329var cache = LRU({ max: 2 });330331cache.set('foo', 1);332cache.set('bar', 2);333cache.del('bar');334cache.set('baz', 3);335cache.set('qux', 4);336337t.equal(cache.get('foo'), undefined)338t.equal(cache.get('bar'), undefined)339t.equal(cache.get('baz'), 3)340t.equal(cache.get('qux'), 4)341t.end()342})343344test("least recently set w/ peek", function (t) {345var cache = new LRU(2)346cache.set("a", "A")347cache.set("b", "B")348t.equal(cache.peek("a"), "A")349cache.set("c", "C")350t.equal(cache.get("c"), "C")351t.equal(cache.get("b"), "B")352t.equal(cache.get("a"), undefined)353t.end()354})355356test("pop the least used item", function (t) {357var cache = new LRU(3)358, last359360cache.set("a", "A")361cache.set("b", "B")362cache.set("c", "C")363364t.equal(cache.length, 3)365t.equal(cache.max, 3)366367// Ensure we pop a, c, b368cache.get("b", "B")369370last = cache.pop()371t.equal(last.key, "a")372t.equal(last.value, "A")373t.equal(cache.length, 2)374t.equal(cache.max, 3)375376last = cache.pop()377t.equal(last.key, "c")378t.equal(last.value, "C")379t.equal(cache.length, 1)380t.equal(cache.max, 3)381382last = cache.pop()383t.equal(last.key, "b")384t.equal(last.value, "B")385t.equal(cache.length, 0)386t.equal(cache.max, 3)387388last = cache.pop()389t.equal(last, null)390t.equal(cache.length, 0)391t.equal(cache.max, 3)392393t.end()394})395396397