Merge pull request #477 from Eji4h/master

Refactor Maths/Factorial for more minimal side effects.
This commit is contained in:
marsonya
2021-01-22 15:44:51 +05:30
committed by GitHub
2 changed files with 9 additions and 26 deletions

View File

@ -14,35 +14,22 @@
'use strict' 'use strict'
const calcRange = (num) => { const calcRange = (num) => {
// Generate a range of numbers from 1 to `num`. return [...Array(num).keys()].map(i => i + 1)
let i = 1
const range = []
while (i <= num) {
range.push(i)
i += 1
}
return range
} }
const calcFactorial = (num) => { const calcFactorial = (num) => {
let factorial
const range = calcRange(num)
// Check if the number is negative, positive, null, undefined, or zero
if (num < 0) {
return 'Sorry, factorial does not exist for negative numbers.'
}
if (num === null || num === undefined) {
return 'Sorry, factorial does not exist for null or undefined numbers.'
}
if (num === 0) { if (num === 0) {
return 'The factorial of 0 is 1.' return 'The factorial of 0 is 1.'
} }
if (num < 0) {
return 'Sorry, factorial does not exist for negative numbers.'
}
if (!num) {
return 'Sorry, factorial does not exist for null or undefined numbers.'
}
if (num > 0) { if (num > 0) {
factorial = 1 const range = calcRange(num)
range.forEach(function (i) { const factorial = range.reduce((a, c) => a * c, 1)
factorial = factorial * i
})
return `The factorial of ${num} is ${factorial}` return `The factorial of ${num} is ${factorial}`
} }
} }

View File

@ -1,10 +1,6 @@
import { calcFactorial } from '../Factorial' import { calcFactorial } from '../Factorial'
describe('calcFactorial', () => { describe('calcFactorial', () => {
it('is a function', () => {
expect(typeof calcFactorial).toEqual('function')
})
it('should return a statement for value "0"', () => { it('should return a statement for value "0"', () => {
expect(calcFactorial(0)).toBe('The factorial of 0 is 1.') expect(calcFactorial(0)).toBe('The factorial of 0 is 1.')
}) })