52 lines
880 B
JavaScript
52 lines
880 B
JavaScript
#!/usr/bin/env node --expose_gc
|
|
|
|
|
|
var weak = require('weak');
|
|
var test = require('tap').test
|
|
var LRU = require('../')
|
|
var l = new LRU({ max: 10 })
|
|
var refs = 0
|
|
function X() {
|
|
refs ++
|
|
weak(this, deref)
|
|
}
|
|
|
|
function deref() {
|
|
refs --
|
|
}
|
|
|
|
test('no leaks', function (t) {
|
|
// fill up the cache
|
|
for (var i = 0; i < 100; i++) {
|
|
l.set(i, new X);
|
|
// throw some gets in there, too.
|
|
if (i % 2 === 0)
|
|
l.get(i / 2)
|
|
}
|
|
|
|
gc()
|
|
|
|
var start = process.memoryUsage()
|
|
|
|
// capture the memory
|
|
var startRefs = refs
|
|
|
|
// do it again, but more
|
|
for (var i = 0; i < 10000; i++) {
|
|
l.set(i, new X);
|
|
// throw some gets in there, too.
|
|
if (i % 2 === 0)
|
|
l.get(i / 2)
|
|
}
|
|
|
|
gc()
|
|
|
|
var end = process.memoryUsage()
|
|
t.equal(refs, startRefs, 'no leaky refs')
|
|
|
|
console.error('start: %j\n' +
|
|
'end: %j', start, end);
|
|
t.pass();
|
|
t.end();
|
|
})
|