From adcce2fa32d94842d07308c750e49d87a2450b65 Mon Sep 17 00:00:00 2001 From: abdullyahuza Date: Wed, 26 Oct 2022 20:27:52 +0100 Subject: [PATCH 1/7] fit: Add check for invalid inputs --- Recursive/Factorial.js | 8 ++++++++ Recursive/test/Factorial.test.js | 7 +++++++ 2 files changed, 15 insertions(+) diff --git a/Recursive/Factorial.js b/Recursive/Factorial.js index 5d882e5ea4..45a5dcedd1 100644 --- a/Recursive/Factorial.js +++ b/Recursive/Factorial.js @@ -9,6 +9,14 @@ */ const factorial = (n) => { + if (!(typeof n === 'number')) { + throw new TypeError('Not a Number') + } + + if ((n % 1) !== 0) { + throw new RangeError('Not a Whole Number') + } + if (n === 0) { return 1 } diff --git a/Recursive/test/Factorial.test.js b/Recursive/test/Factorial.test.js index b124efea5e..8cbd323175 100644 --- a/Recursive/test/Factorial.test.js +++ b/Recursive/test/Factorial.test.js @@ -8,4 +8,11 @@ describe('Factorial', () => { it('should return factorial 120 for value "5"', () => { expect(factorial(5)).toBe(120) }) + + it('Throw Error for Invalid Input', () => { + expect(() => factorial('-')).toThrow('Not a Number') + expect(() => factorial(null)).toThrow('Not a Number') + expect(() => factorial(undefined)).toThrow('Not a Number') + expect(() => factorial(3.142)).toThrow('Not a Whole Number') + }) }) From e65c9a14a8977df88103fcaf278e97dc45fd0986 Mon Sep 17 00:00:00 2001 From: abdullyahuza Date: Wed, 26 Oct 2022 20:33:12 +0100 Subject: [PATCH 2/7] fit: Add check for invalid inputs --- Recursive/Factorial.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Recursive/Factorial.js b/Recursive/Factorial.js index 45a5dcedd1..ef7a42f605 100644 --- a/Recursive/Factorial.js +++ b/Recursive/Factorial.js @@ -16,7 +16,7 @@ const factorial = (n) => { if ((n % 1) !== 0) { throw new RangeError('Not a Whole Number') } - + if (n === 0) { return 1 } From 92fb32885bd2df2fb445c8cf59217c17fe83c644 Mon Sep 17 00:00:00 2001 From: abdullyahuza Date: Thu, 27 Oct 2022 08:06:34 +0100 Subject: [PATCH 3/7] fit: check for negative numbers --- Recursive/Factorial.js | 4 ++++ Recursive/test/Factorial.test.js | 5 +++++ 2 files changed, 9 insertions(+) diff --git a/Recursive/Factorial.js b/Recursive/Factorial.js index ef7a42f605..4958bbc31a 100644 --- a/Recursive/Factorial.js +++ b/Recursive/Factorial.js @@ -17,6 +17,10 @@ const factorial = (n) => { throw new RangeError('Not a Whole Number') } + if (n < 0) { + return undefined + } + if (n === 0) { return 1 } diff --git a/Recursive/test/Factorial.test.js b/Recursive/test/Factorial.test.js index 8cbd323175..d5376895f1 100644 --- a/Recursive/test/Factorial.test.js +++ b/Recursive/test/Factorial.test.js @@ -15,4 +15,9 @@ describe('Factorial', () => { expect(() => factorial(undefined)).toThrow('Not a Number') expect(() => factorial(3.142)).toThrow('Not a Whole Number') }) + + it('Should return undefined for value less than 0', () => { + expect(factorial(-1)).toBe(undefined) + expect(factorial(-100)).toBe(undefined) + }) }) From 53aa0b12b9d4d9915a4de9bfb086180e52df20ac Mon Sep 17 00:00:00 2001 From: abdullyahuza Date: Thu, 27 Oct 2022 08:26:46 +0100 Subject: [PATCH 4/7] fit: check for negative numbers --- Recursive/Factorial.js | 4 ++-- Recursive/test/Factorial.test.js | 3 +-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/Recursive/Factorial.js b/Recursive/Factorial.js index 4958bbc31a..7a24974223 100644 --- a/Recursive/Factorial.js +++ b/Recursive/Factorial.js @@ -9,7 +9,7 @@ */ const factorial = (n) => { - if (!(typeof n === 'number')) { + if (typeof n !== 'number') { throw new TypeError('Not a Number') } @@ -18,7 +18,7 @@ const factorial = (n) => { } if (n < 0) { - return undefined + return new RangeError('Not a Positive Number') } if (n === 0) { diff --git a/Recursive/test/Factorial.test.js b/Recursive/test/Factorial.test.js index d5376895f1..bab7f04c82 100644 --- a/Recursive/test/Factorial.test.js +++ b/Recursive/test/Factorial.test.js @@ -16,8 +16,7 @@ describe('Factorial', () => { expect(() => factorial(3.142)).toThrow('Not a Whole Number') }) - it('Should return undefined for value less than 0', () => { + it('should return undefined for values less than 1', () => { expect(factorial(-1)).toBe(undefined) - expect(factorial(-100)).toBe(undefined) }) }) From b7ef53ced2f249e170cae03305533c4ec97e6181 Mon Sep 17 00:00:00 2001 From: abdullyahuza Date: Thu, 27 Oct 2022 08:28:26 +0100 Subject: [PATCH 5/7] fit: check for negative numbers --- Recursive/test/Factorial.test.js | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/Recursive/test/Factorial.test.js b/Recursive/test/Factorial.test.js index bab7f04c82..eee72ed5cd 100644 --- a/Recursive/test/Factorial.test.js +++ b/Recursive/test/Factorial.test.js @@ -14,9 +14,6 @@ describe('Factorial', () => { expect(() => factorial(null)).toThrow('Not a Number') expect(() => factorial(undefined)).toThrow('Not a Number') expect(() => factorial(3.142)).toThrow('Not a Whole Number') - }) - - it('should return undefined for values less than 1', () => { - expect(factorial(-1)).toBe(undefined) + expect(() => factorial(-1)).toThrow('Not a Positive Number') }) }) From dce525176cf29ae39ac3bdc6112fabcc829cdf46 Mon Sep 17 00:00:00 2001 From: abdullyahuza Date: Thu, 27 Oct 2022 14:20:01 +0100 Subject: [PATCH 6/7] fix: check with builtin function --- Recursive/Factorial.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Recursive/Factorial.js b/Recursive/Factorial.js index 7a24974223..45e62d5f7d 100644 --- a/Recursive/Factorial.js +++ b/Recursive/Factorial.js @@ -13,12 +13,12 @@ const factorial = (n) => { throw new TypeError('Not a Number') } - if ((n % 1) !== 0) { + if (!Number.isInteger(n)) { throw new RangeError('Not a Whole Number') } if (n < 0) { - return new RangeError('Not a Positive Number') + throw new RangeError('Not a Positive Number') } if (n === 0) { From cae6a2b2c32762b732f879b83dcaf7a1686a92e1 Mon Sep 17 00:00:00 2001 From: abdullyahuza Date: Thu, 27 Oct 2022 15:00:22 +0100 Subject: [PATCH 7/7] fix: remove typeof comparison --- Recursive/Factorial.js | 4 ---- Recursive/test/Factorial.test.js | 6 +++--- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/Recursive/Factorial.js b/Recursive/Factorial.js index 45e62d5f7d..5a0d560514 100644 --- a/Recursive/Factorial.js +++ b/Recursive/Factorial.js @@ -9,10 +9,6 @@ */ const factorial = (n) => { - if (typeof n !== 'number') { - throw new TypeError('Not a Number') - } - if (!Number.isInteger(n)) { throw new RangeError('Not a Whole Number') } diff --git a/Recursive/test/Factorial.test.js b/Recursive/test/Factorial.test.js index eee72ed5cd..5f32a44332 100644 --- a/Recursive/test/Factorial.test.js +++ b/Recursive/test/Factorial.test.js @@ -10,9 +10,9 @@ describe('Factorial', () => { }) it('Throw Error for Invalid Input', () => { - expect(() => factorial('-')).toThrow('Not a Number') - expect(() => factorial(null)).toThrow('Not a Number') - expect(() => factorial(undefined)).toThrow('Not a Number') + expect(() => factorial('-')).toThrow('Not a Whole Number') + expect(() => factorial(null)).toThrow('Not a Whole Number') + expect(() => factorial(undefined)).toThrow('Not a Whole Number') expect(() => factorial(3.142)).toThrow('Not a Whole Number') expect(() => factorial(-1)).toThrow('Not a Positive Number') })