diff --git a/Maths/CoPrimeCheck.js b/Maths/CoPrimeCheck.js index 3d9a0a3993..bade446771 100644 --- a/Maths/CoPrimeCheck.js +++ b/Maths/CoPrimeCheck.js @@ -28,13 +28,13 @@ const GetEuclidGCD = (arg1, arg2) => { const CoPrimeCheck = (firstNumber, secondNumber) => { // firstly, check that input is a number or not. if (typeof firstNumber !== 'number' || typeof secondNumber !== 'number') { - return new TypeError('Argument is not a number.') + throw new TypeError('Argument is not a number.') } /* This is the most efficient algorithm for checking co-primes if the GCD of both the numbers is 1 that means they are co-primes. */ - return GetEuclidGCD(firstNumber, secondNumber) === 1 + return GetEuclidGCD(Math.abs(firstNumber), Math.abs(secondNumber)) === 1 } export { CoPrimeCheck } diff --git a/Maths/test/CoPrimeCheck.test.js b/Maths/test/CoPrimeCheck.test.js new file mode 100644 index 0000000000..2276f055d3 --- /dev/null +++ b/Maths/test/CoPrimeCheck.test.js @@ -0,0 +1,29 @@ +import { CoPrimeCheck } from '../CoPrimeCheck' + +describe('CoPrimeCheck', () => { + it.each([ + [1, 1], + [1, 2], + [1, 3], + [1, 7], + [20, 21], + [5, 7], + [-5, -7] + ])('returns true for %j and %i', (inputA, inputB) => { + expect(CoPrimeCheck(inputA, inputB)).toBe(true) + expect(CoPrimeCheck(inputB, inputA)).toBe(true) + }) + + it.each([ + [5, 15], + [13 * 17 * 19, 17 * 23 * 29] + ])('returns false for %j and %i', (inputA, inputB) => { + expect(CoPrimeCheck(inputA, inputB)).toBe(false) + expect(CoPrimeCheck(inputB, inputA)).toBe(false) + }) + + it('should throw when any of the inputs is not a number', () => { + expect(() => CoPrimeCheck('1', 2)).toThrowError() + expect(() => CoPrimeCheck(1, '2')).toThrowError() + }) +})