From a3b92600682c8dbd4a01f26f48b4de3cc25a0950 Mon Sep 17 00:00:00 2001 From: d-odumosu Date: Sun, 19 Jul 2026 19:34:33 +0100 Subject: [PATCH 1/6] completed jest testing on count test and implemented the function --- Sprint-3/2-practice-tdd/count.js | 17 +++++++++++++++-- Sprint-3/2-practice-tdd/count.test.js | 8 ++++++++ 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/Sprint-3/2-practice-tdd/count.js b/Sprint-3/2-practice-tdd/count.js index 95b6ebb7d4..e1566604ce 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 -} + if(stringOfCharacters === "" || findCharacter === ""){ + throw new Error("string an char are not given") + } + + const str = stringOfCharacters.split("") + let count = 0; + for(const char of str){ + if(char === findCharacter){ + count++ + } + } + return count +} +countChar("aeioyuyuuiiiiu", "i") module.exports = countChar; +//push char into a new array and count the lenght on new array return the lenght \ No newline at end of file diff --git a/Sprint-3/2-practice-tdd/count.test.js b/Sprint-3/2-practice-tdd/count.test.js index 179ea0ddf7..59f5d6ed34 100644 --- a/Sprint-3/2-practice-tdd/count.test.js +++ b/Sprint-3/2-practice-tdd/count.test.js @@ -19,6 +19,14 @@ test("should count multiple occurrences of a character", () => { // Scenario: No Occurrences // Given the input string `str`, + // And a character `char` that does not exist within `str`. // When the function is called with these inputs, // Then it should return 0, indicating that no occurrences of `char` were found. + +test("should return 0 when no occurrence of the char", () => { + const str = "aeiou"; + const char = "b"; + const count = countChar(str, char); + expect(count).toEqual(0); +}) \ No newline at end of file From d85efd8938a8636bb17f04d5a015bc7afe006efb Mon Sep 17 00:00:00 2001 From: d-odumosu Date: Sun, 19 Jul 2026 22:17:22 +0100 Subject: [PATCH 2/6] completed jest testing on ordinal numbers and implemented the function --- Sprint-3/2-practice-tdd/get-ordinal-number.js | 28 ++++++++++++++- .../2-practice-tdd/get-ordinal-number.test.js | 34 +++++++++++++++++-- 2 files changed, 58 insertions(+), 4 deletions(-) diff --git a/Sprint-3/2-practice-tdd/get-ordinal-number.js b/Sprint-3/2-practice-tdd/get-ordinal-number.js index f95d71db13..a97a0ad9fe 100644 --- a/Sprint-3/2-practice-tdd/get-ordinal-number.js +++ b/Sprint-3/2-practice-tdd/get-ordinal-number.js @@ -1,5 +1,31 @@ function getOrdinalNumber(num) { - return "1st"; + const numberStr1 = String(num).slice(-1) + const numberStr2 = String(num).slice(-2) + + let number1 = Number(numberStr1) + let number2 = Number(numberStr2) + + if (number2 === 11 || number2 === 12 || number2 === 13) { + return `${num}th` + } + else { + + switch (number1) { + case 1: + return`${num}st` + break; + case 2: + return `${num}nd` + break; + case 3: + return `${num}rd` + break; + default: + 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 adfa58560f..f4ecee3cbd 100644 --- a/Sprint-3/2-practice-tdd/get-ordinal-number.test.js +++ b/Sprint-3/2-practice-tdd/get-ordinal-number.test.js @@ -14,7 +14,35 @@ const getOrdinalNumber = require("./get-ordinal-number"); // When the number ends with 1, except those ending with 11, // Then the function should return a string by appending "st" to the number. test("should append 'st' for numbers ending with 1, except those ending with 11", () => { - expect(getOrdinalNumber(1)).toEqual("1st"); - expect(getOrdinalNumber(21)).toEqual("21st"); - expect(getOrdinalNumber(131)).toEqual("131st"); + expect(getOrdinalNumber(1)).toEqual("1st"); + expect(getOrdinalNumber(21)).toEqual("21st"); + expect(getOrdinalNumber(131)).toEqual("131st"); }); + +test("should append 'nd' for numbers ending with 2", () => { +expect(getOrdinalNumber(2)).toEqual("2nd"); +expect(getOrdinalNumber(22)).toEqual("22nd"); +expect(getOrdinalNumber(32)).toEqual("32nd"); + +}); + +test("should append 'rd' for numbers ending with 3", () => { +expect(getOrdinalNumber(3)).toEqual("3rd"); +expect(getOrdinalNumber(333)).toEqual("333rd"); +expect(getOrdinalNumber(303)).toEqual("303rd"); + +}); + +test("should append 'th' to numbers ending in 0, 4, 5, 6, 7, 8, 9, and to 11, 12, and 13", () => { +expect(getOrdinalNumber(0)).toEqual("0th"); +expect(getOrdinalNumber(44)).toEqual("44th"); +expect(getOrdinalNumber(65)).toEqual("65th"); +expect(getOrdinalNumber(46)).toEqual("46th"); +expect(getOrdinalNumber(77)).toEqual("77th"); +expect(getOrdinalNumber(98)).toEqual("98th"); +expect(getOrdinalNumber(99)).toEqual("99th"); +expect(getOrdinalNumber(11)).toEqual("11th"); +expect(getOrdinalNumber(12)).toEqual("12th"); +expect(getOrdinalNumber(13)).toEqual("13th"); +}) +; \ No newline at end of file From 248d2a4d18a5fff87a3d4d7b8cfce6fb098ead43 Mon Sep 17 00:00:00 2001 From: d-odumosu Date: Mon, 20 Jul 2026 20:01:46 +0100 Subject: [PATCH 3/6] completed jest testing o and implemented the function as required --- Sprint-3/2-practice-tdd/repeat-str.js | 27 ++++++++++++++++++---- Sprint-3/2-practice-tdd/repeat-str.test.js | 19 +++++++++++++++ 2 files changed, 41 insertions(+), 5 deletions(-) diff --git a/Sprint-3/2-practice-tdd/repeat-str.js b/Sprint-3/2-practice-tdd/repeat-str.js index 2af0a2cea7..018ae74e58 100644 --- a/Sprint-3/2-practice-tdd/repeat-str.js +++ b/Sprint-3/2-practice-tdd/repeat-str.js @@ -1,7 +1,24 @@ -function repeatStr() { - // Your implementation of this function must *not* call String.prototype.repeat (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/repeat). - // The goal is to re-implement that function, not to use it. - return "hellohellohello"; -} +function repeatStr(word, wordCounter) { + // Your implementation of this function must *not* call String.prototype.repeat (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/repeat). + // The goal is to re-implement that function, not to use it. + let count = 0; + let repeatedString = [] + if (wordCounter < 0) { // rejects negative numbers + throw new Error("Enter a positive number") + } + if(wordCounter === 0){ + return "" + } + if(wordCounter === 1){ + return word + } + if(wordCounter > 1){ + while(count < wordCounter){ + count++ + repeatedString.push(word) + } + } +return repeatedString.join("") +} module.exports = repeatStr; diff --git a/Sprint-3/2-practice-tdd/repeat-str.test.js b/Sprint-3/2-practice-tdd/repeat-str.test.js index a3fc1196c4..ede05fd676 100644 --- a/Sprint-3/2-practice-tdd/repeat-str.test.js +++ b/Sprint-3/2-practice-tdd/repeat-str.test.js @@ -20,13 +20,32 @@ test("should repeat the string count times", () => { // Given a target string `str` and a `count` equal to 1, // When the repeatStr function is called with these inputs, // Then it should return the original `str` without repetition. +test("should repeat the string 1 time", () =>{ + const str = "name"; + const count = 1; + const repeatedStr = repeatStr(str, count); + expect(repeatedStr).toEqual("name") +}) // Case: Handle count of 0: // Given a target string `str` and a `count` equal to 0, // When the repeatStr function is called with these inputs, // Then it should return an empty string. +test("should return an empty string", () =>{ + const str = "name"; + const count = 0; + const repeatedStr = repeatStr(str, count); + expect(repeatedStr).toEqual("") +}) // Case: Handle negative count: // Given a target string `str` and a negative integer `count`, // When the repeatStr function is called with these inputs, // Then it should throw an error, as negative counts are not valid. +// Case: Handle negative count: +// Given a target string `str` and a negative integer `count`, +// When the repeatStr function is called with these inputs, +// Then it should throw an error, as negative counts are not valid. +test("throws on negative number", () => { + expect(() => repeatStr("dami",-5)).toThrow("Enter a positive number"); +}); From f641d304b3dc96e7c4b9ec81e26fa60032117853 Mon Sep 17 00:00:00 2001 From: d-odumosu Date: Mon, 20 Jul 2026 20:02:16 +0100 Subject: [PATCH 4/6] all requirements completed --- Sprint-3/2-practice-tdd/count.js | 3 --- 1 file changed, 3 deletions(-) diff --git a/Sprint-3/2-practice-tdd/count.js b/Sprint-3/2-practice-tdd/count.js index e1566604ce..4cb3a8c40d 100644 --- a/Sprint-3/2-practice-tdd/count.js +++ b/Sprint-3/2-practice-tdd/count.js @@ -11,8 +11,5 @@ function countChar(stringOfCharacters, findCharacter) { } } return count - } -countChar("aeioyuyuuiiiiu", "i") module.exports = countChar; -//push char into a new array and count the lenght on new array return the lenght \ No newline at end of file From 9b176d2ef642f26f5dbbbf5918a310cf4bb634c5 Mon Sep 17 00:00:00 2001 From: d-odumosu Date: Mon, 27 Jul 2026 19:04:54 +0100 Subject: [PATCH 5/6] refactored: removed .split on the string and iterated directly. --- Sprint-3/2-practice-tdd/count.js | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Sprint-3/2-practice-tdd/count.js b/Sprint-3/2-practice-tdd/count.js index 4cb3a8c40d..c722a7242f 100644 --- a/Sprint-3/2-practice-tdd/count.js +++ b/Sprint-3/2-practice-tdd/count.js @@ -1,15 +1,15 @@ function countChar(stringOfCharacters, findCharacter) { - if(stringOfCharacters === "" || findCharacter === ""){ - throw new Error("string an char are not given") + if (stringOfCharacters === "" || findCharacter === "") { + throw new Error("string an char are not given"); } - const str = stringOfCharacters.split("") let count = 0; - for(const char of str){ - if(char === findCharacter){ - count++ + for (const char of stringOfCharacters) { + if (char === findCharacter) { + count++; } } - return count + return count; } +console.log(countChar("aaaaaae", "a")); module.exports = countChar; From 2aa80fd05e1f226487b4636129e386faced2b1ed Mon Sep 17 00:00:00 2001 From: d-odumosu Date: Mon, 27 Jul 2026 19:12:37 +0100 Subject: [PATCH 6/6] refactored: variable names changed to be more descriptive --- Sprint-3/2-practice-tdd/get-ordinal-number.js | 45 +++++++++---------- 1 file changed, 20 insertions(+), 25 deletions(-) diff --git a/Sprint-3/2-practice-tdd/get-ordinal-number.js b/Sprint-3/2-practice-tdd/get-ordinal-number.js index a97a0ad9fe..2ff52b1a31 100644 --- a/Sprint-3/2-practice-tdd/get-ordinal-number.js +++ b/Sprint-3/2-practice-tdd/get-ordinal-number.js @@ -1,31 +1,26 @@ function getOrdinalNumber(num) { - const numberStr1 = String(num).slice(-1) - const numberStr2 = String(num).slice(-2) + const lastDigitString = String(num).slice(-1); + const lastTwoDiditString = String(num).slice(-2); - let number1 = Number(numberStr1) - let number2 = Number(numberStr2) + let lastDigit = Number(lastDigitString); + let lastTwoDigit = Number(lastTwoDiditString); - if (number2 === 11 || number2 === 12 || number2 === 13) { - return `${num}th` + if (lastTwoDigit === 11 || lastTwoDigit === 12 || lastTwoDigit === 13) { + return `${num}th`; + } else { + switch (lastDigit) { + case 1: + return `${num}st`; + break; + case 2: + return `${num}nd`; + break; + case 3: + return `${num}rd`; + break; + default: + return `${num}th`; } - else { - - switch (number1) { - case 1: - return`${num}st` - break; - case 2: - return `${num}nd` - break; - case 3: - return `${num}rd` - break; - default: - return`${num}th`; - } - } - + } } - - module.exports = getOrdinalNumber;