diff --git a/Maths/isDivisible.js b/Maths/IsDivisible.js similarity index 57% rename from Maths/isDivisible.js rename to Maths/IsDivisible.js index 072957e92..9c2ec81cf 100644 --- a/Maths/isDivisible.js +++ b/Maths/IsDivisible.js @@ -1,11 +1,11 @@ // Checks if a number is divisible by another number. -const isDivisible = (num1, num2) => { - if (isNaN(num1) || isNaN(num2) || num1 == null || num2 == null) { - return 'All parameters have to be numbers' +export const isDivisible = (num1, num2) => { + if (!Number.isFinite(num1) || !Number.isFinite(num2)) { + throw new TypeError('Expected a number') } if (num2 === 0) { - return 'Not possible to divide by zero' + return false } return num1 % num2 === 0 } diff --git a/Maths/test/IsDivisible.test.js b/Maths/test/IsDivisible.test.js new file mode 100644 index 000000000..80ece0a0d --- /dev/null +++ b/Maths/test/IsDivisible.test.js @@ -0,0 +1,39 @@ +import { isDivisible } from '../IsDivisible' + +describe('isDivisible', () => { + const testCases = [ + [0, 1, true], + [0, 2, true], + [1, 1, true], + [1, 2, false], + [2, 1, true], + [4, 4, true], + [16, 4, true], + [36978235, 5, true], + [36978235, 4, false], + [4.5, 1.5, true], + [4.5, 1.2, false], + [5, 0, false], + [5, -0, false] + ] + + test.each(testCases)('if parameters are (%i, %i) it returns %p', (dividend, divisor, expected) => { + expect(isDivisible(dividend, divisor)).toBe(expected) + }) + + const errorCases = [ + [NaN, NaN], + [NaN, 1], + [1, NaN], + ['1', 1], + [1, '1'], + [1, true], + [false, 2] + ] + + test.each(errorCases)('throws an error if parameters are (%p, %p)', (dividend, divisor) => { + expect(() => { + isDivisible(dividend, divisor) + }).toThrow() + }) +})