From 80991d30898c8b671239f3e99dc9c4b801aee878 Mon Sep 17 00:00:00 2001 From: Katelyn Slater Date: Fri, 23 Mar 2018 18:03:34 -0400 Subject: [PATCH] More invasive testing Fixed bug with generateMulti not checking for existing values --- index.js | 29 ++++++++++++------ index.js.map | 2 +- index.ts | 30 ++++++++++++------ package.json | 2 +- test/tests.js | 77 ++++++++++++++++++++++++++++------------------ test/tests.js.map | 2 +- test/tests.ts | 78 +++++++++++++++++++++++++++++------------------ 7 files changed, 139 insertions(+), 81 deletions(-) diff --git a/index.js b/index.js index 61a68c7..12269e4 100644 --- a/index.js +++ b/index.js @@ -187,8 +187,8 @@ module.exports = class LRUWeakCache extends Map { } generateMulti(keys, generator, callback) { if (keys.length) { - var remaining = keys.length; const ret = {}; + var remaining = keys.length; const done = function (key, val) { ret[key] = val; if (!--remaining) { @@ -220,14 +220,19 @@ module.exports = class LRUWeakCache extends Map { const unusedKeys = []; const generateQueue = this.generateQueue; keys.forEach(function (key) { - const keyQueue = generateQueue[key]; - if (keyQueue) { - keyQueue.push(function (err, value) { - done(key, err || value); - }); + const val = self.get(key); + if (val) + done(key, val); + else { + const keyQueue = generateQueue[key]; + if (keyQueue) { + keyQueue.push(function (err, value) { + done(key, err || value); + }); + } + else + unusedKeys.push(key); } - else - unusedKeys.push(key); }); if (unusedKeys.length) { unusedKeys.forEach(function (key) { @@ -261,8 +266,14 @@ module.exports = class LRUWeakCache extends Map { }; if (unusedKeys.length == keys.length) generator(keys, function (err, ret) { - if (err) + if (err) { + ret = {}; + unusedKeys.forEach(function (key) { + ret[key] = err; + }); + finished(ret); callback(err); + } else { if (!ret) ret = {}; diff --git a/index.js.map b/index.js.map index 7d98747..ee8dde1 100644 --- a/index.js.map +++ b/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/index.ts b/index.ts index 79cd9f2..91f542a 100644 --- a/index.ts +++ b/index.ts @@ -171,8 +171,8 @@ export = class LRUWeakCache extends Map implements } generateMulti(keys: string[], generator: CacheMultiGenerator, callback: (err: Error, ret?: { [key: string]: V }) => void): void { if (keys.length) { - var remaining = keys.length; const ret = {}; + var remaining = keys.length; const done = function(key: string, val: V | Error) { ret[key] = val; if (!--remaining) { @@ -203,13 +203,18 @@ export = class LRUWeakCache extends Map implements const unusedKeys = []; const generateQueue = this.generateQueue; keys.forEach(function(key) { - const keyQueue = generateQueue[key]; - if (keyQueue) { - keyQueue.push(function(err, value) { - done(key, err || value); - }); - } else - unusedKeys.push(key); + const val = self.get(key); + if (val) + done(key, val); + else { + const keyQueue = generateQueue[key]; + if (keyQueue) { + keyQueue.push(function(err, value) { + done(key, err || value); + }); + } else + unusedKeys.push(key); + } }); if (unusedKeys.length) { @@ -244,9 +249,14 @@ export = class LRUWeakCache extends Map implements }; if (unusedKeys.length == keys.length) generator(keys, function(err, ret) { - if (err) + if (err) { + ret = {}; + unusedKeys.forEach(function(key) { + ret[key] = err as any; + }); + finished(ret); callback(err); - else { + } else { if(!ret) ret = {}; finished(ret); diff --git a/package.json b/package.json index e8282d6..c7a3d90 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "lru-weak-cache", - "version": "0.2.3", + "version": "0.3.0", "description": "A caching Map that deletes the least-recently-used items with weak references and async generation. Inspired by [lru-cache](https://www.npmjs.com/package/lru-cache).", "main": "index.js", "scripts": { diff --git a/test/tests.js b/test/tests.js index 115a96e..95237db 100644 --- a/test/tests.js +++ b/test/tests.js @@ -48,37 +48,37 @@ const generate_tests = [ [["k", "l", "m", "e", "f"]] ]; var generate_i = 1; +const realdata = { + a: Buffer.from("Sudo\r\n"), + b: Buffer.from("Su\r\n"), + c: Buffer.from("Cow\r\n"), + d: Buffer.from("Bash\r\n") +}; +const cache = new LRU(); +const fslookup = function (key, callback) { + fs.readFile(path.resolve(datadir, key), function (err, data) { + callback(key > "f" ? err : undefined, data); + }); +}; +const fsmulti = function (keys, callback) { + const ret = {}; + async.each(keys, function (key, cb) { + fslookup(key, function (err, _ret) { + if (key > "f") + return cb(err); + else + ret[key] = _ret; + cb(); + }); + }, function (err) { + callback(err, ret); + }); +}; generate_tests.forEach(function (test) { const i = generate_i; generate_i++; - it("generate " + i, function (cb) { - const realdata = { - a: Buffer.from("Sudo\r\n"), - b: Buffer.from("Su\r\n"), - c: Buffer.from("Cow\r\n"), - d: Buffer.from("Bash\r\n") - }; - const cache = new LRU(); - const fslookup = function (key, callback) { - fs.readFile(path.resolve(datadir, key), function (err, data) { - callback(key > "f" ? err : undefined, data); - }); - }; - const fsmulti = function (keys, callback) { - const ret = {}; - async.each(keys, function (key, cb) { - fslookup(key, function (err, _ret) { - if (key > "f") - return cb(err); - else - ret[key] = _ret; - cb(); - }); - }, function (err) { - callback(err, ret); - }); - }; - cache.clear(); + const captured = {}; + const dotest = function (cb) { async.each(test, function (part, cb) { if (Array.isArray(part)) { cache.generateMulti(part, fsmulti, function (err, data) { @@ -92,7 +92,13 @@ generate_tests.forEach(function (test) { cb(err); else { part.forEach(function (p) { - assert.deepEqual(data[p], realdata[p]); + const dat = data[p]; + const cap = captured[p]; + if (cap) + assert.strictEqual(dat, cap); + else + captured[p] = dat; + assert.deepEqual(dat, realdata[p]); }); cb(); } @@ -114,7 +120,20 @@ generate_tests.forEach(function (test) { } }); }, cb); + }; + it("generate " + i, function (cb) { + cache.clear(); + dotest(cb); + }); + it("generate " + i + " redo", dotest); + it("generate " + i + " preset", function (cb) { + cache.clear(); + Object.keys(captured).forEach(function (key) { + cache.set(key, captured[key]); + }); + dotest(cb); }); + it("generate " + i + " redo again", dotest); }); it("iterators", function () { const val = new Object; diff --git a/test/tests.js.map b/test/tests.js.map index e68f822..5a70207 100644 --- a/test/tests.js.map +++ b/test/tests.js.map @@ -1 +1 @@ -{"version":3,"file":"tests.js","sourceRoot":"","sources":["tests.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"tests.js","sourceRoot":"","sources":["tests.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/test/tests.ts b/test/tests.ts index 80dba59..4c1caf3 100644 --- a/test/tests.ts +++ b/test/tests.ts @@ -50,38 +50,37 @@ const generate_tests = [ [["k", "l", "m", "e", "f"]] ]; var generate_i = 1; +const realdata = { + a: Buffer.from("Sudo\r\n"), + b: Buffer.from("Su\r\n"), + c: Buffer.from("Cow\r\n"), + d: Buffer.from("Bash\r\n") +}; +const cache = new LRU(); +const fslookup = function(key: string, callback: (err?: Error, ret?: Buffer) => void) { + fs.readFile(path.resolve(datadir, key), function(err, data) { + callback(key > "f" ? err : undefined, data); + }); +} +const fsmulti = function(keys: string[], callback: (err: Error, ret?: {[key: string]: Buffer}) => void) { + const ret = {}; + async.each(keys, function(key, cb) { + fslookup(key, function(err, _ret) { + if(key > "f") + return cb(err); + else + ret[key] = _ret; + cb(); + }); + }, function(err) { + callback(err, ret); + }); +} generate_tests.forEach(function(test) { const i = generate_i; generate_i ++; - it("generate " + i, function (cb) { - const realdata = { - a: Buffer.from("Sudo\r\n"), - b: Buffer.from("Su\r\n"), - c: Buffer.from("Cow\r\n"), - d: Buffer.from("Bash\r\n") - }; - const cache = new LRU(); - - const fslookup = function(key: string, callback: (err?: Error, ret?: Buffer) => void) { - fs.readFile(path.resolve(datadir, key), function(err, data) { - callback(key > "f" ? err : undefined, data); - }); - } - const fsmulti = function(keys: string[], callback: (err: Error, ret?: {[key: string]: Buffer}) => void) { - const ret = {}; - async.each(keys, function(key, cb) { - fslookup(key, function(err, _ret) { - if(key > "f") - return cb(err); - else - ret[key] = _ret; - cb(); - }); - }, function(err) { - callback(err, ret); - }); - } - cache.clear(); + const captured = {}; + const dotest = function (cb) { async.each(test, function(part, cb) { if(Array.isArray(part)) { cache.generateMulti(part, fsmulti as any, function(err, data) { @@ -96,7 +95,13 @@ generate_tests.forEach(function(test) { cb(err); else { part.forEach(function(p) { - assert.deepEqual(data[p], realdata[p]); + const dat = data[p]; + const cap = captured[p]; + if (cap) + assert.strictEqual(dat, cap); + else + captured[p] = dat; + assert.deepEqual(dat, realdata[p]); }); cb(); } @@ -118,7 +123,20 @@ generate_tests.forEach(function(test) { } }); }, cb); + }; + it("generate " + i, function(cb) { + cache.clear(); + dotest(cb); + }); + it("generate " + i + " redo", dotest); + it("generate " + i + " preset", function(cb) { + cache.clear(); + Object.keys(captured).forEach(function(key) { + cache.set(key, captured[key]); + }); + dotest(cb); }); + it("generate " + i + " redo again", dotest); }); it("iterators", function() { const val = new Object;