diff --git a/Sprint-3/2-practice-tdd/count.js b/Sprint-3/2-practice-tdd/count.js index 95b6ebb7d..77b77705b 100644 --- a/Sprint-3/2-practice-tdd/count.js +++ b/Sprint-3/2-practice-tdd/count.js @@ -1,5 +1,18 @@ function countChar(stringOfCharacters, findCharacter) { - return 5 + let char = 0; + if (stringOfCharacters === 0){ + return 0 + } + for(let i = 0;i <= stringOfCharacters.length - findCharacter.length;i++){ + if ( findCharacter.length === 0 || stringOfCharacters === 0){ + return 0; + } + if(stringOfCharacters.substring(i, i + findCharacter.length ) === findCharacter){ + char++; + } + } + return char } module.exports = countChar; + diff --git a/Sprint-3/2-practice-tdd/count.test.js b/Sprint-3/2-practice-tdd/count.test.js index 42baf4b4b..0693e0545 100644 --- a/Sprint-3/2-practice-tdd/count.test.js +++ b/Sprint-3/2-practice-tdd/count.test.js @@ -22,3 +22,44 @@ test("should count multiple occurrences of a character", () => { // And a character char that does not exist within the case-sensitive str, // When the function is called with these inputs, // Then it should return 0, indicating that no occurrences of the char were found in the case-sensitive str. +test("should return 0 if the character doesn't appear in the string", () => { + const str = "aaaaa"; + const char = "s"; + const count = countChar(str, char); + expect(count).toEqual(0); +}); + +test("should return 0 if the character is empty", () => { + const str = "aaaaa"; + const char = ""; + const count = countChar(str, char); + expect(count).toEqual(0); +}); + +test("should return 0 if the character doesn't appear in the string", () => { + const str = "aaca"; + const char = "ab"; + const count = countChar(str, char); + expect(count).toEqual(0); +}); + +test("should return 0 if the character doesn't appear in the string", () => { + const str = ""; + const char = "a"; + const count = countChar(str, char); + expect(count).toEqual(0); +}); + +test("should return 1 when substring appears once in the string", () => { + const str = "aaca"; + const char = "ac"; + const count = countChar(str, char); + expect(count).toEqual(1); +}); + +test("should return 0 if the character doesn't appear in the string", () => { + const str = "a"; + const char = "aa"; + const count = countChar(str, char); + expect(count).toEqual(0); +}); diff --git a/Sprint-3/2-practice-tdd/get-ordinal-number.js b/Sprint-3/2-practice-tdd/get-ordinal-number.js index f95d71db1..0982be772 100644 --- a/Sprint-3/2-practice-tdd/get-ordinal-number.js +++ b/Sprint-3/2-practice-tdd/get-ordinal-number.js @@ -1,5 +1,30 @@ function getOrdinalNumber(num) { - return "1st"; + if (typeof num !== "number") { + return NaN; + } + if (!Number.isInteger(num)) { + return "not an integer number"; + } + if (num === 0) { + return "invalid number"; + } + + const lastDigit = Number(num.toString().slice(-1)); + const lastTwoDigits = Number(num.toString().slice(-2)); + + if (lastTwoDigits >= 10 && lastTwoDigits <= 13) { + return `${num}th`; + } + + if (lastDigit === 1) { + return `${num}st`; + } else if (lastDigit === 2) { + return `${num}nd`; + } else if (lastDigit === 3) { + return `${num}rd`; + } + + return `${num}th`; } module.exports = getOrdinalNumber; diff --git a/Sprint-3/2-practice-tdd/get-ordinal-number.test.js b/Sprint-3/2-practice-tdd/get-ordinal-number.test.js index dfe4b6091..90cdfeeb0 100644 --- a/Sprint-3/2-practice-tdd/get-ordinal-number.test.js +++ b/Sprint-3/2-practice-tdd/get-ordinal-number.test.js @@ -8,6 +8,63 @@ const getOrdinalNumber = require("./get-ordinal-number"); // When the number is 1, // Then the function should return "1st" +test("should return 'not an integer number' for 1.5", () => { + expect(getOrdinalNumber(1.5)).toEqual("not an integer number"); +}); + +test("should return 'invalid number' for 0", () => { + expect(getOrdinalNumber(0)).toEqual("invalid number"); +}); + test("should return '1st' for 1", () => { expect(getOrdinalNumber(1)).toEqual("1st"); }); + +test("should return '121st' for 121", () =>{ + expect(getOrdinalNumber(121)).toEqual("121st") +}) + +test("should return '2nd' for 2", () => { + expect(getOrdinalNumber(2)).toEqual("2nd"); +}); + + +test("should return '3rd' for 3", () => { + expect(getOrdinalNumber(3)).toEqual("3rd"); +}); + +test("should return '33rd' for 33", () => { + expect(getOrdinalNumber(33)).toEqual("33rd"); +}); + +test("should return '5th' for 5", () => { + expect(getOrdinalNumber(5)).toEqual("5th"); +}); + +test("should return '1114th' for 1114", () => { + expect(getOrdinalNumber(1114)).toEqual("1114th"); +}); + +test("should return '11th' for 11", () => { + expect(getOrdinalNumber(11)).toEqual("11th"); +}); + +test("should return '-11th' for -11", () => { + expect(getOrdinalNumber(-11)).toEqual("-11th"); +}); + +test("should return '112th' for 112", () => { + expect(getOrdinalNumber(112)).toEqual("112th"); +}); + +test("should return '11113th' for 11113", () => { + expect(getOrdinalNumber(11113)).toEqual("11113th"); +}); + +test("should return NaN for s", () => { + expect(getOrdinalNumber("s")).toEqual(NaN); +}); + +test("should return NaN for '9'", () => { + expect(getOrdinalNumber("9")).toEqual(NaN); +}); \ No newline at end of file diff --git a/Sprint-3/2-practice-tdd/repeat.js b/Sprint-3/2-practice-tdd/repeat.js index 00e60d7f3..1f68fd727 100644 --- a/Sprint-3/2-practice-tdd/repeat.js +++ b/Sprint-3/2-practice-tdd/repeat.js @@ -1,5 +1,14 @@ -function repeat() { - return "hellohellohello"; +function repeat(str, count) { + if (typeof str !== "string") { + return "Error: str must be a string"; + } + if (count < 0 || count === undefined || typeof count !== "number") { + return "Error : count must be a positive integer"; + } + if (count === 0) { + return ""; + } + return str.repeat(count); } module.exports = repeat; diff --git a/Sprint-3/2-practice-tdd/repeat.test.js b/Sprint-3/2-practice-tdd/repeat.test.js index 34097b09c..2f966e10e 100644 --- a/Sprint-3/2-practice-tdd/repeat.test.js +++ b/Sprint-3/2-practice-tdd/repeat.test.js @@ -21,12 +21,117 @@ test("should repeat the string count times", () => { // When the repeat function is called with these inputs, // Then it should return the original str without repetition, ensuring that a count of 1 results in no repetition. +test("should not repeat the string", ()=>{ +const str = "hello"; +const count = 1; +const repeatedStr = repeat(str, count); +expect(repeatedStr).toEqual("hello") +}) + // case: Handle Count of 0: // Given a target string str and a count equal to 0, // When the repeat function is called with these inputs, // Then it should return an empty string, ensuring that a count of 0 results in an empty output. +test("should return an empty string", ()=>{ + const str = "hello"; + const count = 0; + const repeatedStr = repeat(str, count); + expect(repeatedStr).toEqual(""); +}) + +// case: Handle str not a string: +// Given a number and a count equal to 2, +// When the repeat function is called with these inputs, +// Then it should return an error message. + +test("should return an error message", ()=>{ + const str = 5; + const count = 5; + const repeatedStr = repeat(str, count); + expect(repeatedStr).toEqual("Error: str must be a string"); +}) + +// case: Handle Count of Undefined: +// Given a target string str and a count equal to Undefined, +// When the repeat function is called with these inputs, +// Then it should return an error message. + +test("should return an error message", ()=>{ + const str = "hello"; + const count = undefined; + const repeatedStr = repeat(str, count); + expect(repeatedStr).toEqual("Error : count must be a positive integer"); +}) + +// case: Handle Count of array: +// Given a target string str and a count equal to [], +// When the repeat function is called with these inputs, +// Then it should return an error message. + +test("should return an error message", ()=>{ + const str = "hello"; + const count = []; + const repeatedStr = repeat(str, count); + expect(repeatedStr).toEqual("Error : count must be a positive integer"); +}) + // case: Negative Count: // Given a target string str and a negative integer count, // When the repeat function is called with these inputs, // Then it should throw an error or return an appropriate error message, as negative counts are not valid. + +test("should return an error message", ()=>{ + const str="hello"; + const count=-1; + const repeatedStr = repeat(str, count); + expect(repeatedStr).toEqual("Error : count must be a positive integer"); +}) + +// case: Handle empty string: +// Given a target string str and a count equal to 2, +// When the repeat function is called with these inputs, +// Then it should return an empty string, ensuring that a count of 2 results in an empty output. + +test("should return an empty string", () => { + const str = ""; + const count = 2; + const repeatedStr = repeat(str, count); + expect(repeatedStr).toEqual(""); +}); + +// case: Handle string with space: +// Given a target string str and a count equal to 2, +// When the repeat function is called with these inputs, +// Then it should repeat the str count times and return a new string containing the repeated str values. + +test("should repeat the string count times", () => { + const str = "a b"; + const count = 2; + const repeatedStr = repeat(str, count); + expect(repeatedStr).toEqual("a ba b"); +}); + +// case: Handle long string : +// Given a target string str and a count equal to 1, +// When the repeat function is called with these inputs, +// Then it should repeat the str count times and return a new string containing the repeated str values. + +test("should not repeat the string", () => { + const str = "xvg56756yrhfghe5ujdfh45657tjrtg6yrthrty"; + const count = 1; + const repeatedStr = repeat(str, count); + expect(repeatedStr).toEqual("xvg56756yrhfghe5ujdfh45657tjrtg6yrthrty"); +}); + +// case: Handle single character string and high count : +// Given a target string str and a count equal to 18, +// When the repeat function is called with these inputs, +// Then it should repeat the str count times and return a new string containing the repeated str values. + +test("should repeat str 18 times", () => { + const str = "x"; + const count = 18; + const repeatedStr = repeat(str, count); + expect(repeatedStr).toEqual("xxxxxxxxxxxxxxxxxx"); +}); \ No newline at end of file