From 041918d7b7cc60e732dc51c5ed39118b35f1f97f Mon Sep 17 00:00:00 2001 From: Fahim Faisaal <57553028+fahimfaisaal@users.noreply.github.com> Date: Sat, 19 Feb 2022 17:38:55 +0600 Subject: [PATCH] merge: Upgrade Lower function (#894) * docs: update the js doc * pref: Optimize algo via regex ignore the useless traverse in best case via regex and String.prototype.replace * test: add some new test cases * fix: styled with standard * refactor: remove useless variable --- String/Lower.js | 19 +++++++------------ String/test/Lower.test.js | 18 ++++++++++++++---- 2 files changed, 21 insertions(+), 16 deletions(-) diff --git a/String/Lower.js b/String/Lower.js index 380588994..73d61878c 100644 --- a/String/Lower.js +++ b/String/Lower.js @@ -1,8 +1,8 @@ /** * @function lower * @description Will convert the entire string to lowercase letters. - * @param {String} url - The input URL string - * @return {String} Lowercase string + * @param {String} str - The input string + * @returns {String} Lowercase string * @example lower("HELLO") => hello * @example lower("He_llo") => he_llo */ @@ -12,17 +12,12 @@ const lower = (str) => { throw new TypeError('Invalid Input Type') } - let lowerString = '' + return str + .replace(/[A-Z]/g, (_, indexOfUpperChar) => { + const asciiCode = str.charCodeAt(indexOfUpperChar) - for (const char of str) { - let asciiCode = char.charCodeAt(0) - if (asciiCode >= 65 && asciiCode <= 90) { - asciiCode += 32 - } - lowerString += String.fromCharCode(asciiCode) - } - - return lowerString + return String.fromCharCode(asciiCode + 32) + }) } export { lower } diff --git a/String/test/Lower.test.js b/String/test/Lower.test.js index 0fbaaa5d6..4a211c38a 100644 --- a/String/test/Lower.test.js +++ b/String/test/Lower.test.js @@ -1,9 +1,19 @@ import { lower } from '../Lower' -describe('Lower', () => { - it('return uppercase strings', () => { - expect(lower('hello')).toBe('hello') +describe('Testing the Lower function', () => { + it('Test 1: Check by invalid type', () => { + expect(() => lower(345)).toThrowError() + expect(() => lower(true)).toThrowError() + expect(() => lower(null)).toThrowError() + }) + + it('Test 2: Check by uppercase string', () => { expect(lower('WORLD')).toBe('world') - expect(lower('hello_WORLD')).toBe('hello_world') + expect(lower('Hello_WORLD')).toBe('hello_world') + }) + + it('Test 3: Check by lowercase string', () => { + expect(lower('hello')).toBe('hello') + expect(lower('hello_world')).toBe('hello_world') }) })