/* eslint id-length: 0 */ "use strict"; module.exports = function (t) { return { "": function (a) { var i = 0 , fn = function (x) { ++i; return x; } , mfn , y = { toString: function () { return "foo"; } }; mfn = t(fn, { primitive: true }); a(typeof mfn, "function", "Returns"); a(mfn.__memoized__, true, "Marked"); a(t(mfn), mfn, "Do not memoize memoized"); a(mfn(y), y, "#1"); a(mfn("foo"), y, "#2"); a(i, 1, "Called once"); }, "Clear cache": function (a) { var i = 0 , fn = function (x, y, z) { ++i; return x + y + z; } , mfn , y = { toString: function () { return "foo"; } }; mfn = t(fn, { primitive: true }); a(mfn(y, "bar", "zeta"), "foobarzeta", "#1"); a(mfn("foo", "bar", "zeta"), "foobarzeta", "#2"); a(i, 1, "Called once"); mfn.delete( "foo", { toString: function () { return "bar"; } }, "zeta" ); a(mfn(y, "bar", "zeta"), "foobarzeta", "#3"); a(i, 2, "Called twice"); } }; };