diff --git a/src/core.js b/src/core.js index 475c622..70eb7a3 100644 --- a/src/core.js +++ b/src/core.js @@ -19,6 +19,19 @@ function isBinary(n) {} //Напишите функцию, которая находит N-е число Фибоначчи function fibonacci(n) {} +/** Напишите функцию, которая принимает начальное значение и функцию операции + * и возвращает функцию - выполняющую эту операцию. + * Если функция операции (operatorFn) не задана - по умолчанию всегда + * возвращается начальное значение (initialValue) + * @param initialValue + * @param operatorFn - (storedValue, newValue) => {operation} + * @example + * const sumFn = getOperationFn(10, (a,b) => a + b); + * console.log(sumFn(5)) - 15 + * console.log(sumFn(3)) - 18 + */ +function getOperationFn(initialValue, operatorFn) {} + module.exports = { isInteger, even, @@ -27,4 +40,5 @@ module.exports = { factorial, isBinary, fibonacci, + getOperationFn, }; diff --git a/src/core.spec.js b/src/core.spec.js index bb30e8a..995745d 100644 --- a/src/core.spec.js +++ b/src/core.spec.js @@ -1,4 +1,4 @@ -var assert = require('assert'), +const assert = require('assert'), core = require('./core'); describe('Задания core js', () => { @@ -14,7 +14,10 @@ describe('Задания core js', () => { describe('#even', () => { it('Возвращает корректный массив', () => { - assert.deepEqual(core.even(), [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]); + assert.deepStrictEqual( + core.even(), + [2, 4, 6, 8, 10, 12, 14, 16, 18, 20] + ); }); }); @@ -61,4 +64,25 @@ describe('Задания core js', () => { assert.equal(core.fibonacci(10), 55); }); }); + + describe('#getOperationFn', () => { + it('Возвращает функцию', () => { + const sumFn = core.getOperationFn(-1, (a, b) => a + b); + assert.ok(typeof sumFn === 'function'); + }); + + it('Сохраняет внутреннее значение и применяет операцию', () => { + const multFn = core.getOperationFn(-1, (a, b) => a * b); + assert.strictEqual(multFn(-1), 1); + assert.strictEqual(multFn(4), 4); + assert.strictEqual(multFn(2), 8); + }); + + it('По умолчанию всегда возвращает начальное значение, если нет operatorFn', () => { + const staticFn = core.getOperationFn(-1); + assert.strictEqual(staticFn(-1), -1); + assert.strictEqual(staticFn(7), -1); + assert.strictEqual(staticFn(0), -1); + }); + }); });