complex-args.js 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. var Memoizerific = require('../src/memoizerific');
  2. describe("complex args", () => {
  3. var memoizedFn,
  4. arg1 = { a: { b: 3 }, num: 3 },
  5. arg2 = { c: { d: 3 }, num: 7 },
  6. arg3 = [{ f: { g: 3 }, num: 11 }, { h: { i: 3 }, num: 4 }, { j: { k: 3 }, num: 6 }];
  7. beforeEach(function() {
  8. memoizedFn = Memoizerific(50)(function(arg1, arg2, arg3) {
  9. return arg1.num * arg2.num;
  10. });
  11. memoizedFn(arg1, arg2, arg3);
  12. });
  13. it("should be map or similar", () => {
  14. console.log(process.env.FORCE_SIMILAR_INSTEAD_OF_MAP === 'true' ? 'SIMILAR() to MAP()' : 'MAP()');
  15. expect(memoizedFn.cache instanceof Map).toEqual(process.env.FORCE_SIMILAR_INSTEAD_OF_MAP !== 'true');
  16. });
  17. it("should not be memoized", () => {
  18. memoizedFn = Memoizerific(50)(function(arg1) {
  19. return arg1;
  20. });
  21. memoizedFn(arg1);
  22. expect(memoizedFn.wasMemoized).toEqual(false);
  23. var a1 = { a: 1};
  24. memoizedFn(a1);
  25. expect(memoizedFn.wasMemoized).toEqual(false);
  26. memoizedFn(a1);
  27. expect(memoizedFn.wasMemoized).toEqual(true);
  28. memoizedFn({ a: 1});
  29. expect(memoizedFn.wasMemoized).toEqual(false);
  30. memoizedFn({ a: 1});
  31. expect(memoizedFn.wasMemoized).toEqual(false);
  32. memoizedFn({ a: 1});
  33. expect(memoizedFn.wasMemoized).toEqual(false);
  34. memoizedFn(a1);
  35. expect(memoizedFn.wasMemoized).toEqual(true);
  36. expect(memoizedFn.lru.length).toEqual(5);
  37. });
  38. it("should be memoized", () => {
  39. memoizedFn(arg1, arg2, arg3);
  40. expect(memoizedFn.wasMemoized).toEqual(true);
  41. expect(memoizedFn.lru.length).toEqual(1);
  42. });
  43. it("should have multiple cached items", () => {
  44. memoizedFn(arg1, arg2, arg3);
  45. memoizedFn(arg1, arg2, 1);
  46. expect(memoizedFn.wasMemoized).toEqual(false);
  47. expect(memoizedFn.lru.length).toEqual(2);
  48. });
  49. });