JSFiddle - React, Tailwind, and code Playground
by bartek
HTML
<script src="https://searls.github.io/jasmine-all/jasmine-all-min.js"></script>
JavaScript
window.GFT = {
partial: function(fn) {
return function n() {
var args = [].slice.call(arguments);
if (args.length >= fn.length) {
return fn.apply(null, args);
} else {
return function() {
var thatArgs = [].slice.call(arguments);
return n.apply(null, args.concat(thatArgs));
}
}
}
},
compose: function() {
var funcs = [].slice.call(arguments);
return function() {
var args = [].slice.call(arguments);
for (var i = funcs.length - 1; i >= 0; i--) {
args = [funcs[i].apply(this, args)];
}
return args[0];
};
},
memoize: function(fn) {
var memo = {};
return function() {
var args = [].slice.call(arguments);
if (args in memo) {
return memo[args];
} else {
return (memo[args] = fn.apply(null, args));
}
}
},
};
describe('Functions test', function() {
it('add', function() {
var add = GFT.partial(function(a, b, c, d) {
return a + b + c + d
});
var sum = add(1)(2, 3)(4);
expect(sum).toEqual(10);
});
it('compose', function() {
function add2(x) {
return x + 2
}
function square(x) {
return x * x
}
var add2AndSquare = GFT.compose(square, add2)
var output = add2AndSquare(2);
expect(output).toEqual(16);
});
it('memorize', function() {
spyOn(console, 'log');
var memoized = GFT.memoize(function(arg) {
console.log('Function executed');
return arg + 1;
});
memoized(6);
memoized(6);
memoized(6);
expect(console.log).toHaveBeenCalledWith('Function executed');
});
});