diff --git a/Recursive/Palindrome.js b/Recursive/Palindrome.js index 9357135174..7d315aea31 100644 --- a/Recursive/Palindrome.js +++ b/Recursive/Palindrome.js @@ -1,21 +1,25 @@ +/** + * @function Palindrome + * @description Check whether the given string is Palindrome or not. + * @param {String} str - The input string + * @return {Boolean}. + * @see [Palindrome](https://en.wikipedia.org/wiki/Palindrome) + */ -// Check whether the given string is Palindrome or not -export const Palindrome = (str) => { +const palindrome = (str) => { if (typeof str !== 'string') { - str = str.toString() + throw new TypeError('Invalid Input') } - if (str === null || str === undefined) { - return false - } - - if (str.length === 1 || str.length === 0) { + if (str.length <= 1) { return true } if (str[0] !== str[str.length - 1]) { return false } else { - return Palindrome(str.slice(1, str.length - 1)) + return palindrome(str.slice(1, str.length - 1)) } } + +export { palindrome } diff --git a/Recursive/test/palindrome.test.js b/Recursive/test/palindrome.test.js new file mode 100644 index 0000000000..dee9b0af2e --- /dev/null +++ b/Recursive/test/palindrome.test.js @@ -0,0 +1,24 @@ +import { palindrome } from '../Palindrome' + +describe('Palindrome', () => { + it('expects to return true for palindrome string', () => { + const isPalindrome = palindrome('madam') + expect(isPalindrome).toBe(true) + }) + + it('expects to return true for Empty String', () => { + const isPalindrome = palindrome('') + expect(isPalindrome).toBe(true) + }) + + it('expects to return false for non-palindrome string', () => { + const isPalindrome = palindrome('foobar') + expect(isPalindrome).toBe(false) + }) + + it('Throw Error for Invalid Input', () => { + expect(() => palindrome(123)).toThrow('Invalid Input') + expect(() => palindrome(null)).toThrow('Invalid Input') + expect(() => palindrome(undefined)).toThrow('Invalid Input') + }) +})