Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | 1x 1x 1x 37x 37x 37x 1x 17x 436x 1x 548x 1x 3x 3x 4x 1x 56x 345x 345x 343x 1x 28x 1x 1x 24x 1x 24x | 'use strict'; /* eslint-disable func-names, no-multi-assign */ const predicate = module.exports; const slice = Array.prototype.slice; // Useful for debuging curried functions const setSrc = function(curried, src) { /* eslint-disable no-param-reassign */ curried.toString = () => src.toString(); curried.src = src; /* eslint-enable no-param-reassign */ return curried; }; // Curry's fn's with arity 2 const curry = (predicate.curry = function(f) { return setSrc(function curried(a, b) { if (!arguments.length) { throw new TypeError('Function called with no arguments'); } return arguments.length === 1 ? setSrc(c => f(a, c), f) : f(a, b); }, f); }); predicate.partial = function(fn) { const args = slice.call(arguments, 1); return function() { return fn.apply(null, args.concat(slice.call(arguments))); }; }; predicate.complement = predicate.invert = function(pred) { return function() { const ret = pred.apply(null, arguments); // Handle curried fns if (typeof ret === 'function') return predicate.complement(ret); return !ret; }; }; predicate.mod = curry(function(a, b) { return a % b; }); predicate.assign = curry(Object.assign); predicate.identity = function(v) { return v; }; predicate.toBoolFn = curry(function(fn, v) { return !!fn(v); }); |