Name: js-handler/node_modules/restify/node_modules/lru-cache/test/memory-leak.js
| 1: | #!/usr/bin/env node --expose_gc |
| 2: | |
| 3: | var weak = require('weak'); |
| 4: | var test = require('tap').test |
| 5: | var LRU = require('../') |
| 6: | var l = new LRU({ max: 10 }) |
| 7: | var refs = 0 |
| 8: | function X() { |
| 9: | refs ++ |
| 10: | weak(this, deref) |
| 11: | } |
| 12: | |
| 13: | function deref() { |
| 14: | refs -- |
| 15: | } |
| 16: | |
| 17: | test('no leaks', function (t) { |
| 18: | // fill up the cache |
| 19: | for (var i = 0; i < 100; i++) { |
| 20: | l.set(i, new X); |
| 21: | // throw some gets in there, too. |
| 22: | if (i % 2 === 0) |
| 23: | l.get(i / 2) |
| 24: | } |
| 25: | |
| 26: | gc() |
| 27: | |
| 28: | var start = process.memoryUsage() |
| 29: | |
| 30: | // capture the memory |
| 31: | var startRefs = refs |
| 32: | |
| 33: | // do it again, but more |
| 34: | for (var i = 0; i < 10000; i++) { |
| 35: | l.set(i, new X); |
| 36: | // throw some gets in there, too. |
| 37: | if (i % 2 === 0) |
| 38: | l.get(i / 2) |
| 39: | } |
| 40: | |
| 41: | gc() |
| 42: | |
| 43: | var end = process.memoryUsage() |
| 44: | t.equal(refs, startRefs, 'no leaky refs') |
| 45: | |
| 46: | console.error('start: %j\n' + |
| 47: | 'end: %j', start, end); |
| 48: | t.pass(); |
| 49: | t.end(); |
| 50: | }) |
