UNPKG

typed-utilities

Version:
119 lines (111 loc) 3.37 kB
"use strict"; var _Memo = require("../Memo"); describe(`Memo`, () => { describe(`memoize`, () => { test(`primtive`, () => { let count = 0; const fn = x => { count++; return x * x; }; expect(fn(0)).toEqual(0); expect(count).toEqual(1); expect(fn(3)).toEqual(9); expect(count).toEqual(2); count = 0; const [fnMemo, map] = (0, _Memo.memoize)(fn); expect(map.has(0)).toEqual(false); expect(fnMemo(0)).toEqual(0); expect(map.get(0)).toEqual(0); expect(count).toEqual(1); expect(fnMemo(0)).toEqual(0); expect(count).toEqual(1); count = 0; expect(map.has(3)).toEqual(false); expect(fnMemo(3)).toEqual(9); expect(map.get(3)).toEqual(9); expect(count).toEqual(1); expect(fnMemo(3)).toEqual(9); expect(count).toEqual(1); }); test(`object`, () => { let count = 0; const t1 = [1, 2, 3]; const t2 = [10, 20, 30]; const t3 = [1, 2, 3]; const fn = t => { count++; return t.reduce((a, b) => a + b, 0); }; expect(fn(t1)).toEqual(6); expect(count).toEqual(1); expect(fn(t2)).toEqual(60); expect(count).toEqual(2); expect(fn(t3)).toEqual(6); expect(count).toEqual(3); expect(fn(t3)).toEqual(6); expect(count).toEqual(4); count = 0; const [fnMemo, map] = (0, _Memo.memoize)(fn); expect(map.has(t1)).toEqual(false); expect(fnMemo(t1)).toEqual(6); expect(count).toEqual(1); expect(map.has(t1)).toEqual(true); expect(map.get(t1)).toEqual(6); expect(map.has(t1)).toEqual(true); expect(fnMemo(t1)).toEqual(6); expect(count).toEqual(1); count = 0; expect(map.has(t3)).toEqual(false); expect(fnMemo(t3)).toEqual(6); expect(fnMemo(t3)).toEqual(6); expect(fnMemo(t3)).toEqual(6); expect(fnMemo(t3)).toEqual(6); expect(count).toEqual(1); expect(!map.has(t1)); expect(map.has(t3)); expect(map.get(t3)).toEqual(6); }); }); describe(`weakMemoize`, () => { test(`object`, () => { let count = 0; const t1 = [1, 2, 3]; const t2 = [10, 20, 30]; const t3 = [1, 2, 3]; const fn = t => { count++; return t.reduce((a, b) => a + b, 0); }; expect(fn(t1)).toEqual(6); expect(count).toEqual(1); expect(fn(t2)).toEqual(60); expect(count).toEqual(2); expect(fn(t3)).toEqual(6); expect(count).toEqual(3); expect(fn(t3)).toEqual(6); expect(count).toEqual(4); count = 0; const [fnMemo, map] = (0, _Memo.weakMemoize)(fn); expect(map.has(t1)).toEqual(false); expect(fnMemo(t1)).toEqual(6); expect(count).toEqual(1); expect(map.has(t1)).toEqual(true); expect(map.get(t1)).toEqual(6); expect(map.has(t1)).toEqual(true); expect(fnMemo(t1)).toEqual(6); expect(count).toEqual(1); count = 0; expect(map.has(t3)).toEqual(false); expect(fnMemo(t3)).toEqual(6); expect(fnMemo(t3)).toEqual(6); expect(fnMemo(t3)).toEqual(6); expect(fnMemo(t3)).toEqual(6); expect(count).toEqual(1); expect(!map.has(t1)); expect(map.has(t3)); expect(map.get(t3)).toEqual(6); }); }); }); //# sourceMappingURL=Memo.test.js.map