Refactor Maths/Factorial for more minimal side effects.

This commit is contained in:
Yosapol Jitrak
2020-10-16 16:31:40 +07:00
parent 90891b5657
commit e0883facdb
2 changed files with 10 additions and 25 deletions

View File

@ -14,36 +14,24 @@
'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) {
if (num < 0) { const range = calcRange(num)
return 'Sorry, factorial does not exist for negative numbers.' const factorial = range.reduce((a, c) => a * c, 1);
} return `The factorial of ${num} is ${factorial}`
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) { if (num < 0) {
factorial = 1 return 'Sorry, factorial does not exist for negative numbers.'
range.forEach(function (i) { }
factorial = factorial * i if (!num) {
}) return 'Sorry, factorial does not exist for null or undefined numbers.'
return `The factorial of ${num} is ${factorial}`
} }
} }

View File

@ -1,9 +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.')