| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396 | 
							- var test = require("tap").test
 
-   , LRU = require("../")
 
- test("basic", function (t) {
 
-   var cache = new LRU({max: 10})
 
-   cache.set("key", "value")
 
-   t.equal(cache.get("key"), "value")
 
-   t.equal(cache.get("nada"), undefined)
 
-   t.equal(cache.length, 1)
 
-   t.equal(cache.max, 10)
 
-   t.end()
 
- })
 
- test("least recently set", function (t) {
 
-   var cache = new LRU(2)
 
-   cache.set("a", "A")
 
-   cache.set("b", "B")
 
-   cache.set("c", "C")
 
-   t.equal(cache.get("c"), "C")
 
-   t.equal(cache.get("b"), "B")
 
-   t.equal(cache.get("a"), undefined)
 
-   t.end()
 
- })
 
- test("lru recently gotten", function (t) {
 
-   var cache = new LRU(2)
 
-   cache.set("a", "A")
 
-   cache.set("b", "B")
 
-   cache.get("a")
 
-   cache.set("c", "C")
 
-   t.equal(cache.get("c"), "C")
 
-   t.equal(cache.get("b"), undefined)
 
-   t.equal(cache.get("a"), "A")
 
-   t.end()
 
- })
 
- test("del", function (t) {
 
-   var cache = new LRU(2)
 
-   cache.set("a", "A")
 
-   cache.del("a")
 
-   t.equal(cache.get("a"), undefined)
 
-   t.end()
 
- })
 
- test("max", function (t) {
 
-   var cache = new LRU(3)
 
-   // test changing the max, verify that the LRU items get dropped.
 
-   cache.max = 100
 
-   for (var i = 0; i < 100; i ++) cache.set(i, i)
 
-   t.equal(cache.length, 100)
 
-   for (var i = 0; i < 100; i ++) {
 
-     t.equal(cache.get(i), i)
 
-   }
 
-   cache.max = 3
 
-   t.equal(cache.length, 3)
 
-   for (var i = 0; i < 97; i ++) {
 
-     t.equal(cache.get(i), undefined)
 
-   }
 
-   for (var i = 98; i < 100; i ++) {
 
-     t.equal(cache.get(i), i)
 
-   }
 
-   // now remove the max restriction, and try again.
 
-   cache.max = "hello"
 
-   for (var i = 0; i < 100; i ++) cache.set(i, i)
 
-   t.equal(cache.length, 100)
 
-   for (var i = 0; i < 100; i ++) {
 
-     t.equal(cache.get(i), i)
 
-   }
 
-   // should trigger an immediate resize
 
-   cache.max = 3
 
-   t.equal(cache.length, 3)
 
-   for (var i = 0; i < 97; i ++) {
 
-     t.equal(cache.get(i), undefined)
 
-   }
 
-   for (var i = 98; i < 100; i ++) {
 
-     t.equal(cache.get(i), i)
 
-   }
 
-   t.end()
 
- })
 
- test("reset", function (t) {
 
-   var cache = new LRU(10)
 
-   cache.set("a", "A")
 
-   cache.set("b", "B")
 
-   cache.reset()
 
-   t.equal(cache.length, 0)
 
-   t.equal(cache.max, 10)
 
-   t.equal(cache.get("a"), undefined)
 
-   t.equal(cache.get("b"), undefined)
 
-   t.end()
 
- })
 
- test("basic with weighed length", function (t) {
 
-   var cache = new LRU({
 
-     max: 100,
 
-     length: function (item) { return item.size }
 
-   })
 
-   cache.set("key", {val: "value", size: 50})
 
-   t.equal(cache.get("key").val, "value")
 
-   t.equal(cache.get("nada"), undefined)
 
-   t.equal(cache.lengthCalculator(cache.get("key")), 50)
 
-   t.equal(cache.length, 50)
 
-   t.equal(cache.max, 100)
 
-   t.end()
 
- })
 
- test("weighed length item too large", function (t) {
 
-   var cache = new LRU({
 
-     max: 10,
 
-     length: function (item) { return item.size }
 
-   })
 
-   t.equal(cache.max, 10)
 
-   // should fall out immediately
 
-   cache.set("key", {val: "value", size: 50})
 
-   t.equal(cache.length, 0)
 
-   t.equal(cache.get("key"), undefined)
 
-   t.end()
 
- })
 
- test("least recently set with weighed length", function (t) {
 
-   var cache = new LRU({
 
-     max:8,
 
-     length: function (item) { return item.length }
 
-   })
 
-   cache.set("a", "A")
 
-   cache.set("b", "BB")
 
-   cache.set("c", "CCC")
 
-   cache.set("d", "DDDD")
 
-   t.equal(cache.get("d"), "DDDD")
 
-   t.equal(cache.get("c"), "CCC")
 
-   t.equal(cache.get("b"), undefined)
 
-   t.equal(cache.get("a"), undefined)
 
-   t.end()
 
- })
 
- test("lru recently gotten with weighed length", function (t) {
 
-   var cache = new LRU({
 
-     max: 8,
 
-     length: function (item) { return item.length }
 
-   })
 
-   cache.set("a", "A")
 
-   cache.set("b", "BB")
 
-   cache.set("c", "CCC")
 
-   cache.get("a")
 
-   cache.get("b")
 
-   cache.set("d", "DDDD")
 
-   t.equal(cache.get("c"), undefined)
 
-   t.equal(cache.get("d"), "DDDD")
 
-   t.equal(cache.get("b"), "BB")
 
-   t.equal(cache.get("a"), "A")
 
-   t.end()
 
- })
 
- test("lru recently updated with weighed length", function (t) {
 
-   var cache = new LRU({
 
-     max: 8,
 
-     length: function (item) { return item.length }
 
-   })
 
-   cache.set("a", "A")
 
-   cache.set("b", "BB")
 
-   cache.set("c", "CCC")
 
-   t.equal(cache.length, 6) //CCC BB A
 
-   cache.set("a", "+A")
 
-   t.equal(cache.length, 7) //+A CCC BB
 
-   cache.set("b", "++BB")
 
-   t.equal(cache.length, 6) //++BB +A
 
-   t.equal(cache.get("c"), undefined)
 
-   cache.set("c", "oversized")
 
-   t.equal(cache.length, 6) //++BB +A
 
-   t.equal(cache.get("c"), undefined)
 
-   cache.set("a", "oversized")
 
-   t.equal(cache.length, 4) //++BB
 
-   t.equal(cache.get("a"), undefined)
 
-   t.equal(cache.get("b"), "++BB")
 
-   t.end()
 
- })
 
- test("set returns proper booleans", function(t) {
 
-   var cache = new LRU({
 
-     max: 5,
 
-     length: function (item) { return item.length }
 
-   })
 
-   t.equal(cache.set("a", "A"), true)
 
-   // should return false for max exceeded
 
-   t.equal(cache.set("b", "donuts"), false)
 
-   t.equal(cache.set("b", "B"), true)
 
-   t.equal(cache.set("c", "CCCC"), true)
 
-   t.end()
 
- })
 
- test("drop the old items", function(t) {
 
-   var cache = new LRU({
 
-     max: 5,
 
-     maxAge: 50
 
-   })
 
-   cache.set("a", "A")
 
-   setTimeout(function () {
 
-     cache.set("b", "b")
 
-     t.equal(cache.get("a"), "A")
 
-   }, 25)
 
-   setTimeout(function () {
 
-     cache.set("c", "C")
 
-     // timed out
 
-     t.notOk(cache.get("a"))
 
-   }, 60 + 25)
 
-   setTimeout(function () {
 
-     t.notOk(cache.get("b"))
 
-     t.equal(cache.get("c"), "C")
 
-   }, 90)
 
-   setTimeout(function () {
 
-     t.notOk(cache.get("c"))
 
-     t.end()
 
-   }, 155)
 
- })
 
- test("individual item can have it's own maxAge", function(t) {
 
-   var cache = new LRU({
 
-     max: 5,
 
-     maxAge: 50
 
-   })
 
-   cache.set("a", "A", 20)
 
-   setTimeout(function () {
 
-     t.notOk(cache.get("a"))
 
-     t.end()
 
-   }, 25)
 
- })
 
- test("individual item can have it's own maxAge > cache's", function(t) {
 
-   var cache = new LRU({
 
-     max: 5,
 
-     maxAge: 20
 
-   })
 
-   cache.set("a", "A", 50)
 
-   setTimeout(function () {
 
-     t.equal(cache.get("a"), "A")
 
-     t.end()
 
-   }, 25)
 
- })
 
- test("disposal function", function(t) {
 
-   var disposed = false
 
-   var cache = new LRU({
 
-     max: 1,
 
-     dispose: function (k, n) {
 
-       disposed = n
 
-     }
 
-   })
 
-   cache.set(1, 1)
 
-   cache.set(2, 2)
 
-   t.equal(disposed, 1)
 
-   cache.set(3, 3)
 
-   t.equal(disposed, 2)
 
-   cache.reset()
 
-   t.equal(disposed, 3)
 
-   t.end()
 
- })
 
- test("disposal function on too big of item", function(t) {
 
-   var disposed = false
 
-   var cache = new LRU({
 
-     max: 1,
 
-     length: function (k) {
 
-       return k.length
 
-     },
 
-     dispose: function (k, n) {
 
-       disposed = n
 
-     }
 
-   })
 
-   var obj = [ 1, 2 ]
 
-   t.equal(disposed, false)
 
-   cache.set("obj", obj)
 
-   t.equal(disposed, obj)
 
-   t.end()
 
- })
 
- test("has()", function(t) {
 
-   var cache = new LRU({
 
-     max: 1,
 
-     maxAge: 10
 
-   })
 
-   cache.set('foo', 'bar')
 
-   t.equal(cache.has('foo'), true)
 
-   cache.set('blu', 'baz')
 
-   t.equal(cache.has('foo'), false)
 
-   t.equal(cache.has('blu'), true)
 
-   setTimeout(function() {
 
-     t.equal(cache.has('blu'), false)
 
-     t.end()
 
-   }, 15)
 
- })
 
- test("stale", function(t) {
 
-   var cache = new LRU({
 
-     maxAge: 10,
 
-     stale: true
 
-   })
 
-   cache.set('foo', 'bar')
 
-   t.equal(cache.get('foo'), 'bar')
 
-   t.equal(cache.has('foo'), true)
 
-   setTimeout(function() {
 
-     t.equal(cache.has('foo'), false)
 
-     t.equal(cache.get('foo'), 'bar')
 
-     t.equal(cache.get('foo'), undefined)
 
-     t.end()
 
-   }, 15)
 
- })
 
- test("lru update via set", function(t) {
 
-   var cache = LRU({ max: 2 });
 
-   cache.set('foo', 1);
 
-   cache.set('bar', 2);
 
-   cache.del('bar');
 
-   cache.set('baz', 3);
 
-   cache.set('qux', 4);
 
-   t.equal(cache.get('foo'), undefined)
 
-   t.equal(cache.get('bar'), undefined)
 
-   t.equal(cache.get('baz'), 3)
 
-   t.equal(cache.get('qux'), 4)
 
-   t.end()
 
- })
 
- test("least recently set w/ peek", function (t) {
 
-   var cache = new LRU(2)
 
-   cache.set("a", "A")
 
-   cache.set("b", "B")
 
-   t.equal(cache.peek("a"), "A")
 
-   cache.set("c", "C")
 
-   t.equal(cache.get("c"), "C")
 
-   t.equal(cache.get("b"), "B")
 
-   t.equal(cache.get("a"), undefined)
 
-   t.end()
 
- })
 
- test("pop the least used item", function (t) {
 
-   var cache = new LRU(3)
 
-   , last
 
-   cache.set("a", "A")
 
-   cache.set("b", "B")
 
-   cache.set("c", "C")
 
-   t.equal(cache.length, 3)
 
-   t.equal(cache.max, 3)
 
-   // Ensure we pop a, c, b
 
-   cache.get("b", "B")
 
-   last = cache.pop()
 
-   t.equal(last.key, "a")
 
-   t.equal(last.value, "A")
 
-   t.equal(cache.length, 2)
 
-   t.equal(cache.max, 3)
 
-   last = cache.pop()
 
-   t.equal(last.key, "c")
 
-   t.equal(last.value, "C")
 
-   t.equal(cache.length, 1)
 
-   t.equal(cache.max, 3)
 
-   last = cache.pop()
 
-   t.equal(last.key, "b")
 
-   t.equal(last.value, "B")
 
-   t.equal(cache.length, 0)
 
-   t.equal(cache.max, 3)
 
-   last = cache.pop()
 
-   t.equal(last, null)
 
-   t.equal(cache.length, 0)
 
-   t.equal(cache.max, 3)
 
-   t.end()
 
- })
 
 
  |