1
0
Fork 0
decko/tests/memoize.js

73 lines
1.3 KiB
JavaScript
Raw Normal View History

import { memoize } from '..';
import { expect } from 'chai';
/*global describe,it*/
describe('memoize()', () => {
it('should memoize when used as a simple decorator', next => {
let c = {
@memoize
foo(key) {
c[key] = (c[key] || 0) + 1;
}
};
expect(c).not.to.have.property('a');
c.foo('a');
expect(c).to.have.property('a', 1);
c.foo('a');
c.foo('a');
expect(c).to.have.property('a', 1);
next();
});
it('should memoize when used as a function', next => {
let c = memoize( key => {
m[key] = (m[key] || 0) + 1;
}),
m = {};
expect(m).not.to.have.property('a');
c('a');
expect(m).to.have.property('a', 1);
c('a');
c('a');
expect(m).to.have.property('a', 1);
next();
});
it('should memoize when called without arguments', next => {
let c = memoize( key => {
m[key] = (m[key] || 0) + 1;
}),
m = {};
expect(m).not.to.have.property('undefined');
c();
expect(m).to.have.property('undefined', 1);
c();
c();
expect(m).to.have.property('undefined', 1);
next();
});
it('should memoize when called with an empty string', next => {
let c = memoize( key => {
m[key] = (m[key] || 0) + 1;
}),
m = {};
expect(m).not.to.have.property('');
c('');
expect(m).to.have.property('', 1);
c('');
c('');
expect(m).to.have.property('', 1);
next();
});
});