configure-map.js 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. /* eslint id-length: 0, no-shadow: 0, no-unused-vars: 0 */
  2. "use strict";
  3. var aFrom = require("es5-ext/array/from")
  4. , memoize = require("../..");
  5. module.exports = function () {
  6. return {
  7. "One arg": function (a) {
  8. var i = 0
  9. , fn = function (x) {
  10. ++i;
  11. return x;
  12. }
  13. , mfn
  14. , y = {
  15. toString: function () {
  16. return "foo";
  17. }
  18. };
  19. mfn = memoize(fn, { primitive: true });
  20. a(mfn(y), y, "#1");
  21. a(mfn("foo"), y, "#2");
  22. a(i, 1, "Called once");
  23. },
  24. "No args": function (a) {
  25. var i = 0
  26. , fn = function () {
  27. ++i;
  28. return "foo";
  29. }
  30. , mfn
  31. , y = {
  32. toString: function () {
  33. return "foo";
  34. }
  35. };
  36. mfn = memoize(fn);
  37. a(mfn._has(), false);
  38. a(mfn(), "foo", "#1");
  39. a(mfn._has(), true);
  40. mfn();
  41. a(i, 1, "Called once");
  42. },
  43. "Clear cache": function (a) {
  44. var i = 0
  45. , fn = function (x, y, z) {
  46. ++i;
  47. return x + y + z;
  48. }
  49. , mfn
  50. , y = {
  51. toString: function () {
  52. return "foo";
  53. }
  54. };
  55. mfn = memoize(fn, { primitive: true });
  56. a(mfn(y, "bar", "zeta"), "foobarzeta", "#1");
  57. a(mfn("foo", "bar", "zeta"), "foobarzeta", "#2");
  58. a(i, 1, "Called once");
  59. mfn.delete(
  60. "foo",
  61. {
  62. toString: function () {
  63. return "bar";
  64. }
  65. },
  66. "zeta"
  67. );
  68. a(mfn(y, "bar", "zeta"), "foobarzeta", "#3");
  69. a(i, 2, "Called twice");
  70. },
  71. "_get": function (a) {
  72. var fn = function (x) {
  73. return x;
  74. }
  75. , mfn;
  76. mfn = memoize(fn);
  77. a(mfn._get("foo"), undefined);
  78. mfn("foo");
  79. a(mfn._get("foo"), "foo");
  80. },
  81. "_has": function (a) {
  82. var fn = function (x) {
  83. return x;
  84. }
  85. , mfn;
  86. mfn = memoize(fn);
  87. a(mfn._has("foo"), false);
  88. mfn("foo");
  89. a(mfn._has("foo"), true);
  90. },
  91. "Circular": function (a) {
  92. var i = 0, fn;
  93. fn = memoize(function (x) {
  94. if (++i < 2) fn(x);
  95. });
  96. a.throws(function () {
  97. fn("foo");
  98. }, "CIRCULAR_INVOCATION");
  99. i = 0;
  100. fn = memoize(function (x, y) {
  101. if (++i < 2) fn(x, y);
  102. });
  103. a.throws(function () {
  104. fn("foo", "bar");
  105. }, "CIRCULAR_INVOCATION");
  106. },
  107. "Resolvers": function () {
  108. var i = 0, fn, r;
  109. fn = memoize(
  110. function () {
  111. ++i;
  112. return arguments;
  113. },
  114. { length: 3, resolvers: [Boolean, String] }
  115. );
  116. return {
  117. "No args": function (a) {
  118. i = 0;
  119. a.deep(aFrom(r = fn()), [false, "undefined"], "First");
  120. a(fn(), r, "Second");
  121. a(fn(), r, "Third");
  122. a(i, 1, "Called once");
  123. },
  124. "One arg": function (a) {
  125. var fn = memoize(
  126. function (elo) {
  127. ++i;
  128. return arguments;
  129. },
  130. { resolvers: [Boolean] }
  131. );
  132. a.deep(aFrom(r = fn("elo")), [true], "First");
  133. },
  134. "Some Args": function (a) {
  135. var x = {};
  136. i = 0;
  137. a.deep(aFrom(r = fn(0, 34, x, 45)), [false, "34", x, 45], "First");
  138. a(fn(0, 34, x, 22), r, "Second");
  139. a(fn(0, 34, x, false), r, "Third");
  140. a(i, 1, "Called once");
  141. return {
  142. Other: function (a) {
  143. a.deep(aFrom(r = fn(1, 34, x, 34)), [true, "34", x, 34], "Second");
  144. a(fn(1, 34, x, 89), r, "Third");
  145. a(i, 2, "Called once");
  146. }
  147. };
  148. }
  149. };
  150. }
  151. };
  152. };