Skip welcome & menu and move to editor
Welcome to JS Bin
Load cached copy from
 
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>JS Bin</title>
</head>
<body>
</body>
</html>
 
console.clear();
const isNumber = num => typeof num === 'number';
const isFinite = num => Number.isFinite(num);
const notNull = num => null !== num;
const isDefined = num => undefined !== num;
const notNaN = num => !Number.isNaN(num);
const gt = (n1, n2) => n1 > n2;
const conditions = [
  isNumber,
  isFinite,
  notNull,
  isDefined,
  notNaN
];
const calcAllConditions = num =>
  conditions
    .map(cond => cond(num))
    .reduce((acc, curr) => acc && curr, true);
const calculate = (price, minPrice) => {
  if (calcAllConditions(price)
    && calcAllConditions(minPrice)  
    && gt(price, minPrice)) {
    console.log('Correct price');
    return price;
  } else {
    throw new Error('Wrong price'); 
  }
}
// const somePrice = 1000;
// const someMinPrice = 999;
// console.log(calculate(somePrice, someMinPrice)); // => 1000
// const wrongPrice = 999;
// console.log(calculate(wrongPrice, someMinPrice)); // => error
// test suites for kids
const testFnPure = (fn, params, res) => fn(...params) === res;
const testFnWithTry = (fn, params, res = 'error') => {
  const tempResult = (() => {
    try {
      return fn(...params);
    } catch(e) {
      return 'error'
    };
  })();
  console.log(tempResult)
  return res === tempResult;
};
console.log(testFnPure(calculate, [1000, 999], 1000)); // => true
console.log(testFnWithTry(calculate, [999, 999])); // => true
console.log(testFnWithTry(calculate, ['str', 999])); // => true
Output

You can jump to the latest bin by adding /latest to your URL

Dismiss x
public
Bin info
ruddy22pro
0viewers