From 869c92a71086b758a90195e680e8f1afd53f9307 Mon Sep 17 00:00:00 2001 From: Arunkumar Akilan Date: Wed, 4 Mar 2026 14:28:13 +0000 Subject: [PATCH 1/7] Sprint 3 Practice TDD exercises --- Sprint-3/2-practice-tdd/count.js | 11 ++++- Sprint-3/2-practice-tdd/count.test.js | 6 +++ Sprint-3/2-practice-tdd/get-ordinal-number.js | 16 +++++++- .../2-practice-tdd/get-ordinal-number.test.js | 40 +++++++++++++++++++ Sprint-3/2-practice-tdd/repeat-str.js | 25 +++++++++++- Sprint-3/2-practice-tdd/repeat-str.test.js | 19 ++++++++- 6 files changed, 110 insertions(+), 7 deletions(-) diff --git a/Sprint-3/2-practice-tdd/count.js b/Sprint-3/2-practice-tdd/count.js index 95b6ebb7d4..01f3e4aaf9 100644 --- a/Sprint-3/2-practice-tdd/count.js +++ b/Sprint-3/2-practice-tdd/count.js @@ -1,5 +1,12 @@ -function countChar(stringOfCharacters, findCharacter) { - return 5 +function countChar(str, char) { + let count = 0; + for (let i = 0; i < str.length; i++) + if(str[i] === char) + { + count++; + } + return count; } + module.exports = countChar; diff --git a/Sprint-3/2-practice-tdd/count.test.js b/Sprint-3/2-practice-tdd/count.test.js index 179ea0ddf7..ab0474c0b1 100644 --- a/Sprint-3/2-practice-tdd/count.test.js +++ b/Sprint-3/2-practice-tdd/count.test.js @@ -16,6 +16,12 @@ test("should count multiple occurrences of a character", () => { const count = countChar(str, char); expect(count).toEqual(5); }); +test("should count no occurrences of a character",()=>{ + const str = "hello"; + const char = "a"; + const count = countChar(str, char); + expect(count).toEqual(0); +}); // Scenario: No Occurrences // Given the input string `str`, diff --git a/Sprint-3/2-practice-tdd/get-ordinal-number.js b/Sprint-3/2-practice-tdd/get-ordinal-number.js index f95d71db13..51b52cb112 100644 --- a/Sprint-3/2-practice-tdd/get-ordinal-number.js +++ b/Sprint-3/2-practice-tdd/get-ordinal-number.js @@ -1,5 +1,19 @@ function getOrdinalNumber(num) { - return "1st"; + if( num%10 === 1 && num%100 !== 11) + { + return `${num}st`; + } + else if (num%10 === 2 && num%100 !== 12) + { + return `${num}nd`; + } + else if(num%10===3 && num%100 !==13) + { + return `${num}rd`; + } + else{ + 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..8a64c8d5c9 100644 --- a/Sprint-3/2-practice-tdd/get-ordinal-number.test.js +++ b/Sprint-3/2-practice-tdd/get-ordinal-number.test.js @@ -18,3 +18,43 @@ test("should append 'st' for numbers ending with 1, except those ending with 11" expect(getOrdinalNumber(21)).toEqual("21st"); expect(getOrdinalNumber(131)).toEqual("131st"); }); +test("should append 'th' for numbers ending with 11", ()=>{ + expect(getOrdinalNumber(11)).toEqual("11th"); + expect(getOrdinalNumber(111)).toEqual("111th"); + expect(getOrdinalNumber(211)).toEqual("211th"); + expect(getOrdinalNumber(311)).toEqual("311th"); +}); +test("should append 'nd' for numbers ending with 2, except those ending with 12", () => { + expect(getOrdinalNumber(2)).toEqual("2nd"); + expect(getOrdinalNumber(22)).toEqual("22nd"); + expect(getOrdinalNumber(132)).toEqual("132nd"); +}); +test("should append 'th' for numbers ending with 12", () => { + expect(getOrdinalNumber(12)).toEqual("12th"); + expect(getOrdinalNumber(112)).toEqual("112th"); + expect(getOrdinalNumber(212)).toEqual("212th"); +}); + +test("should append 'rd' for numbers ending with 3, except those ending with 13", () => { + expect(getOrdinalNumber(3)).toEqual("3rd"); + expect(getOrdinalNumber(33)).toEqual("33rd"); + expect(getOrdinalNumber(133)).toEqual("133rd"); +}); +test("should append 'th' for numbers ending with 13", () => { + expect(getOrdinalNumber(13)).toEqual("13th"); + expect(getOrdinalNumber(113)).toEqual("113th"); + expect(getOrdinalNumber(213)).toEqual("213th"); +}); +test("should append 'th' for numbers ending with 4", () => { + expect(getOrdinalNumber(4)).toEqual("4th"); + expect(getOrdinalNumber(14)).toEqual("14th"); + expect(getOrdinalNumber(134)).toEqual("134th"); +}); + + + + + + + + diff --git a/Sprint-3/2-practice-tdd/repeat-str.js b/Sprint-3/2-practice-tdd/repeat-str.js index 3838c7b003..2b40fca45e 100644 --- a/Sprint-3/2-practice-tdd/repeat-str.js +++ b/Sprint-3/2-practice-tdd/repeat-str.js @@ -1,5 +1,26 @@ -function repeatStr() { - return "hellohellohello"; +function repeatStr(str, count) { + if (count <0) + { + throw new Error("negative counts are not valid"); + } + else if(count === 1) + { + return str; + } + else if (count === 0) + { + return ""; + } + else + { + let result =""; + for (let i =0; i { const str = "hello"; const count = 3; - const repeatedStr = repeatStr(str, count); - expect(repeatedStr).toEqual("hellohellohello"); + expect(repeatStr(str,count)).toEqual("hellohellohello"); +}); +test(" should return original 'str' without repetition", ()=>{ + const str = "hello"; + const count = 1; + expect(repeatStr(str, count)).toEqual("hello"); +}); +test("should return empty string", ()=>{ + const str = "hello"; + const count = 0; + expect(repeatStr(str, count)).toEqual(""); + +}); +test("should throw negative counts are not valid Error", ()=>{ +const str = "hello"; + const count = -1; + expect(()=> repeatStr(str, count)).toThrow(); }); // Case: handle count of 1: From b17fb0c8b65258e5587fd4e7cc572091d791d8dc Mon Sep 17 00:00:00 2001 From: Arunkumar Akilan Date: Mon, 16 Mar 2026 09:48:25 +0000 Subject: [PATCH 2/7] fix: improve test description for negative count error --- Sprint-3/2-practice-tdd/repeat-str.test.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Sprint-3/2-practice-tdd/repeat-str.test.js b/Sprint-3/2-practice-tdd/repeat-str.test.js index 4f3d0e2269..798ab37c2b 100644 --- a/Sprint-3/2-practice-tdd/repeat-str.test.js +++ b/Sprint-3/2-practice-tdd/repeat-str.test.js @@ -25,10 +25,10 @@ test("should return empty string", ()=>{ expect(repeatStr(str, count)).toEqual(""); }); -test("should throw negative counts are not valid Error", ()=>{ -const str = "hello"; +test("should throw an error when count is negative", () => { + const str = "hello"; const count = -1; - expect(()=> repeatStr(str, count)).toThrow(); + expect(() => repeatStr(str, count)).toThrow(); }); // Case: handle count of 1: From b418384b5ef1eaff23ebdaa067952d0e4fc437e1 Mon Sep 17 00:00:00 2001 From: Arunkumar Akilan Date: Mon, 16 Mar 2026 10:21:22 +0000 Subject: [PATCH 3/7] update sprint 3 practice tdd --- Sprint-3/2-practice-tdd/repeat-str.test.js | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/Sprint-3/2-practice-tdd/repeat-str.test.js b/Sprint-3/2-practice-tdd/repeat-str.test.js index 798ab37c2b..6b02f496e9 100644 --- a/Sprint-3/2-practice-tdd/repeat-str.test.js +++ b/Sprint-3/2-practice-tdd/repeat-str.test.js @@ -12,18 +12,17 @@ const repeatStr = require("./repeat-str"); test("should repeat the string count times", () => { const str = "hello"; const count = 3; - expect(repeatStr(str,count)).toEqual("hellohellohello"); + expect(repeatStr(str, count)).toEqual("hellohellohello"); }); -test(" should return original 'str' without repetition", ()=>{ +test(" should return original 'str' without repetition", () => { const str = "hello"; const count = 1; expect(repeatStr(str, count)).toEqual("hello"); }); -test("should return empty string", ()=>{ +test("should return empty string", () => { const str = "hello"; const count = 0; expect(repeatStr(str, count)).toEqual(""); - }); test("should throw an error when count is negative", () => { const str = "hello"; From f9d00344ff964936f071b0a1395ef64336b2c4e5 Mon Sep 17 00:00:00 2001 From: Arunkumar Akilan Date: Mon, 16 Mar 2026 10:35:35 +0000 Subject: [PATCH 4/7] improve test descriptions with conditions --- Sprint-3/2-practice-tdd/repeat-str.test.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Sprint-3/2-practice-tdd/repeat-str.test.js b/Sprint-3/2-practice-tdd/repeat-str.test.js index 6b02f496e9..0c149d9f2e 100644 --- a/Sprint-3/2-practice-tdd/repeat-str.test.js +++ b/Sprint-3/2-practice-tdd/repeat-str.test.js @@ -9,17 +9,17 @@ const repeatStr = require("./repeat-str"); // When the repeatStr function is called with these inputs, // Then it should return a string that contains the original `str` repeated `count` times. -test("should repeat the string count times", () => { +test("should repeat the string count times when count is greater than 1", () => { const str = "hello"; const count = 3; expect(repeatStr(str, count)).toEqual("hellohellohello"); }); -test(" should return original 'str' without repetition", () => { +test(" should return original string when count is 1", () => { const str = "hello"; const count = 1; expect(repeatStr(str, count)).toEqual("hello"); }); -test("should return empty string", () => { +test("should return empty string when count is 0", () => { const str = "hello"; const count = 0; expect(repeatStr(str, count)).toEqual(""); From 72f52b65d655b00265f248377f198861f7ef4fa0 Mon Sep 17 00:00:00 2001 From: Arunkumar Akilan Date: Mon, 16 Mar 2026 10:49:54 +0000 Subject: [PATCH 5/7] refactor: replace repeated expressions with descriptive variables in getOrdinalNumber --- Sprint-3/2-practice-tdd/get-ordinal-number.js | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/Sprint-3/2-practice-tdd/get-ordinal-number.js b/Sprint-3/2-practice-tdd/get-ordinal-number.js index 51b52cb112..3d2ebdf056 100644 --- a/Sprint-3/2-practice-tdd/get-ordinal-number.js +++ b/Sprint-3/2-practice-tdd/get-ordinal-number.js @@ -1,17 +1,13 @@ function getOrdinalNumber(num) { - if( num%10 === 1 && num%100 !== 11) - { + const lastDigit = num % 10; + const lastTwoDigits = num % 100; + if (lastDigit === 1 && lastTwoDigits !== 11) { return `${num}st`; - } - else if (num%10 === 2 && num%100 !== 12) - { + } else if (lastDigit === 2 && lastTwoDigits !== 12) { return `${num}nd`; - } - else if(num%10===3 && num%100 !==13) - { + } else if (lastDigit === 3 && lastTwoDigits !== 13) { return `${num}rd`; - } - else{ + } else { return `${num}th`; } } From 8bba86dcb1e93baa281f7fb1ffc49330e7dcec02 Mon Sep 17 00:00:00 2001 From: Arunkumar Akilan Date: Mon, 16 Mar 2026 10:59:21 +0000 Subject: [PATCH 6/7] improve ordinal number test description by generalising 'th' cases --- Sprint-3/2-practice-tdd/get-ordinal-number.test.js | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) 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 8a64c8d5c9..8765ffb49b 100644 --- a/Sprint-3/2-practice-tdd/get-ordinal-number.test.js +++ b/Sprint-3/2-practice-tdd/get-ordinal-number.test.js @@ -45,10 +45,14 @@ test("should append 'th' for numbers ending with 13", () => { expect(getOrdinalNumber(113)).toEqual("113th"); expect(getOrdinalNumber(213)).toEqual("213th"); }); -test("should append 'th' for numbers ending with 4", () => { +test("should append 'th' for numbers ending with 0, 4–9", () => { expect(getOrdinalNumber(4)).toEqual("4th"); - expect(getOrdinalNumber(14)).toEqual("14th"); - expect(getOrdinalNumber(134)).toEqual("134th"); + expect(getOrdinalNumber(10)).toEqual("10th"); + expect(getOrdinalNumber(25)).toEqual("25th"); + expect(getOrdinalNumber(36)).toEqual("36th"); + expect(getOrdinalNumber(48)).toEqual("48th"); + expect(getOrdinalNumber(27)).toEqual("27th"); + expect(getOrdinalNumber(9)).toEqual("9th"); }); @@ -57,4 +61,3 @@ test("should append 'th' for numbers ending with 4", () => { - From c75b9bf29585dc69ab45b94cb688d3c8bfc4ce06 Mon Sep 17 00:00:00 2001 From: Arunkumar Akilan Date: Mon, 16 Mar 2026 11:06:23 +0000 Subject: [PATCH 7/7] refactor tests by grouping ordinal number cases --- .../2-practice-tdd/get-ordinal-number.test.js | 21 +++++++------------ 1 file changed, 7 insertions(+), 14 deletions(-) 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 8765ffb49b..ae0c58b838 100644 --- a/Sprint-3/2-practice-tdd/get-ordinal-number.test.js +++ b/Sprint-3/2-practice-tdd/get-ordinal-number.test.js @@ -18,32 +18,25 @@ test("should append 'st' for numbers ending with 1, except those ending with 11" expect(getOrdinalNumber(21)).toEqual("21st"); expect(getOrdinalNumber(131)).toEqual("131st"); }); -test("should append 'th' for numbers ending with 11", ()=>{ - expect(getOrdinalNumber(11)).toEqual("11th"); - expect(getOrdinalNumber(111)).toEqual("111th"); - expect(getOrdinalNumber(211)).toEqual("211th"); - expect(getOrdinalNumber(311)).toEqual("311th"); -}); + test("should append 'nd' for numbers ending with 2, except those ending with 12", () => { expect(getOrdinalNumber(2)).toEqual("2nd"); expect(getOrdinalNumber(22)).toEqual("22nd"); expect(getOrdinalNumber(132)).toEqual("132nd"); }); -test("should append 'th' for numbers ending with 12", () => { - expect(getOrdinalNumber(12)).toEqual("12th"); - expect(getOrdinalNumber(112)).toEqual("112th"); - expect(getOrdinalNumber(212)).toEqual("212th"); -}); - test("should append 'rd' for numbers ending with 3, except those ending with 13", () => { expect(getOrdinalNumber(3)).toEqual("3rd"); expect(getOrdinalNumber(33)).toEqual("33rd"); expect(getOrdinalNumber(133)).toEqual("133rd"); }); -test("should append 'th' for numbers ending with 13", () => { +test("should append 'th' for numbers ending with 11, 12, or 13", () => { + expect(getOrdinalNumber(11)).toEqual("11th"); + expect(getOrdinalNumber(12)).toEqual("12th"); expect(getOrdinalNumber(13)).toEqual("13th"); + + expect(getOrdinalNumber(111)).toEqual("111th"); + expect(getOrdinalNumber(112)).toEqual("112th"); expect(getOrdinalNumber(113)).toEqual("113th"); - expect(getOrdinalNumber(213)).toEqual("213th"); }); test("should append 'th' for numbers ending with 0, 4–9", () => { expect(getOrdinalNumber(4)).toEqual("4th");