/script-kiddie/002_script_kiddie/script-kiddie/node_modules/lru-cache/test/basic.js |
@@ -0,0 +1,427 @@ |
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, key) { |
t.isa(key, 'string') |
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"), '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 its 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 its 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() |
}) |
|
test("get and set only accepts strings and numbers as keys", function(t) { |
var cache = new LRU() |
|
cache.set("key", "value") |
cache.set(123, 456) |
|
t.equal(cache.get("key"), "value") |
t.equal(cache.get(123), 456) |
|
t.end() |
}) |
|
test("peek with wierd keys", function(t) { |
var cache = new LRU() |
|
cache.set("key", "value") |
cache.set(123, 456) |
|
t.equal(cache.peek("key"), "value") |
t.equal(cache.peek(123), 456) |
|
t.equal(cache.peek({ |
toString: function() { return "key" } |
}), undefined) |
|
t.end() |
}) |
/script-kiddie/002_script_kiddie/script-kiddie/node_modules/lru-cache/test/foreach.js |
@@ -0,0 +1,130 @@ |
var test = require('tap').test |
var LRU = require('../') |
|
test('forEach', function (t) { |
var l = new LRU(5) |
for (var i = 0; i < 10; i ++) { |
l.set(i, i.toString(2)) |
} |
|
var i = 9 |
l.forEach(function (val, key, cache) { |
t.equal(cache, l) |
t.equal(key, i) |
t.equal(val, i.toString(2)) |
i -= 1 |
}) |
|
// get in order of most recently used |
l.get(6) |
l.get(8) |
|
var order = [ 8, 6, 9, 7, 5 ] |
var i = 0 |
|
l.forEach(function (val, key, cache) { |
var j = order[i ++] |
t.equal(cache, l) |
t.equal(key, j) |
t.equal(val, j.toString(2)) |
}) |
t.equal(i, order.length) |
|
i = 0 |
order.reverse() |
l.rforEach(function (val, key, cache) { |
var j = order[i ++] |
t.equal(cache, l) |
t.equal(key, j) |
t.equal(val, j.toString(2)) |
}) |
t.equal(i, order.length) |
|
t.end() |
}) |
|
test('keys() and values()', function (t) { |
var l = new LRU(5) |
for (var i = 0; i < 10; i ++) { |
l.set(i, i.toString(2)) |
} |
|
t.similar(l.keys(), [9, 8, 7, 6, 5]) |
t.similar(l.values(), ['1001', '1000', '111', '110', '101']) |
|
// get in order of most recently used |
l.get(6) |
l.get(8) |
|
t.similar(l.keys(), [8, 6, 9, 7, 5]) |
t.similar(l.values(), ['1000', '110', '1001', '111', '101']) |
|
t.end() |
}) |
|
test('all entries are iterated over', function(t) { |
var l = new LRU(5) |
for (var i = 0; i < 10; i ++) { |
l.set(i.toString(), i.toString(2)) |
} |
|
var i = 0 |
l.forEach(function (val, key, cache) { |
if (i > 0) { |
cache.del(key) |
} |
i += 1 |
}) |
|
t.equal(i, 5) |
t.equal(l.keys().length, 1) |
|
t.end() |
}) |
|
test('all stale entries are removed', function(t) { |
var l = new LRU({ max: 5, maxAge: -5, stale: true }) |
for (var i = 0; i < 10; i ++) { |
l.set(i.toString(), i.toString(2)) |
} |
|
var i = 0 |
l.forEach(function () { |
i += 1 |
}) |
|
t.equal(i, 5) |
t.equal(l.keys().length, 0) |
|
t.end() |
}) |
|
test('expires', function (t) { |
var l = new LRU({ |
max: 10, |
maxAge: 50 |
}) |
for (var i = 0; i < 10; i++) { |
l.set(i.toString(), i.toString(2), ((i % 2) ? 25 : undefined)) |
} |
|
var i = 0 |
var order = [ 8, 6, 4, 2, 0 ] |
setTimeout(function () { |
l.forEach(function (val, key, cache) { |
var j = order[i++] |
t.equal(cache, l) |
t.equal(key, j.toString()) |
t.equal(val, j.toString(2)) |
}) |
t.equal(i, order.length); |
|
setTimeout(function () { |
var count = 0; |
l.forEach(function (val, key, cache) { count++; }) |
t.equal(0, count); |
t.end() |
}, 25) |
|
}, 26) |
}) |
/script-kiddie/002_script_kiddie/script-kiddie/node_modules/lru-cache/test/serialize.js |
@@ -0,0 +1,224 @@ |
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(123, 456) |
t.deepEqual(cache.dump(), [ |
{ k: 123, v: 456, e: 0 }, |
{ k: "b", v: "B", e: 0 }, |
{ k: "a", v: "A", e: 0 }, |
]) |
cache.del(123) |
|
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") |
cache.set(123, 456) |
|
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) |
|
}) |