Skip to content
Open
10 changes: 9 additions & 1 deletion Sprint-3/2-practice-tdd/count.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,13 @@
function countChar(stringOfCharacters, findCharacter) {
return 5
//count the occurrences of the char in the string
// Make it case insensitive
let countChar = 0;
for (const char of stringOfCharacters) {
if (char.toLowerCase() === findCharacter.toLowerCase()) {
countChar++;
}
}
return countChar;
}

module.exports = countChar;
35 changes: 35 additions & 0 deletions Sprint-3/2-practice-tdd/count.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,3 +22,38 @@ test("should count multiple occurrences of a character", () => {
// 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 if the character in not in the given string", () => {
const str = "aaaaa";
const char = "b";
const count = countChar(str, char);
expect(count).toEqual(0);
});

test("should return 1 if the is 1 occurrence of the char in the string", () => {
const str = "abc";
const char = "c";
const count = countChar(str, char);
expect(count).toEqual(1);
});

test("should return 0 if there is a empty string ", () => {
const str = "";
const char = "c";
const count = countChar(str, char);
expect(count).toEqual(0);
});

test("should return 0 if character is empty", () => {
const str = "abcdefg";
const char = "";
const count = countChar(str, char);
expect(count).toEqual(0);
});

test("should be case insensitive ", () => {
const str = "Successful";
const char = "s";
const count = countChar(str, char);
expect(count).toEqual(3);
});
12 changes: 11 additions & 1 deletion Sprint-3/2-practice-tdd/get-ordinal-number.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,15 @@
function getOrdinalNumber(num) {
return "1st";
let lastTwoDigits = num % 100;
let lastDigit = num % 10;
if (lastTwoDigits === 11 || lastTwoDigits === 12 || lastTwoDigits === 13) {
return num + "th";
} else if (lastDigit === 1) {
return num + "st";
} else if (lastDigit === 2) {
return num + "nd";
} else if (lastDigit === 3) {
return num + "rd";
} else return num + "th";
}

module.exports = getOrdinalNumber;
42 changes: 42 additions & 0 deletions Sprint-3/2-practice-tdd/get-ordinal-number.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,3 +18,45 @@ test("should append 'st' for numbers ending with 1, except those ending with 11"
expect(getOrdinalNumber(21)).toEqual("21st");
expect(getOrdinalNumber(131)).toEqual("131st");
});

// Case 2: Numbers ending with 2 (but not 12)
test("should append 'nd' for numbers ending with 2, except those ending with 12", () => {
expect(getOrdinalNumber(112)).toEqual("112th");
expect(getOrdinalNumber(32)).toEqual("32nd");
expect(getOrdinalNumber(332)).toEqual("332nd");
});

// Case 3: Numbers ending with 3 (but not 13)
test("should append 'rd' for numbers ending with 3, except those ending with 13", () => {
expect(getOrdinalNumber(113)).toEqual("113th");
expect(getOrdinalNumber(23)).toEqual("23rd");
expect(getOrdinalNumber(453)).toEqual("453rd");
});

// Case 4: Numbers ending with 4 -9
test("should append 'th' for numbers ending with 4", () => {
expect(getOrdinalNumber(124)).toEqual("124th");
expect(getOrdinalNumber(235)).toEqual("235th");
expect(getOrdinalNumber(16)).toEqual("16th");
expect(getOrdinalNumber(17)).toEqual("17th");
expect(getOrdinalNumber(18)).toEqual("18th");
expect(getOrdinalNumber(19)).toEqual("19th");
});
Comment on lines +37 to +44

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Typo in description.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed typo in description.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I was referring to to "... with 4".


// Case 5: Numbers ending with 11, 12, 13
test("should append 'th' for numbers ending with 11, 12, 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");
});

// Case 6: Numbers ending with 0
test("should append 'th' for numbers ending with 0", () => {
expect(getOrdinalNumber(10)).toEqual("10th");
expect(getOrdinalNumber(20)).toEqual("20th");
expect(getOrdinalNumber(30)).toEqual("30th");
expect(getOrdinalNumber(140)).toEqual("140th");
});
17 changes: 13 additions & 4 deletions Sprint-3/2-practice-tdd/repeat-str.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,16 @@
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";
// 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.

function repeatStr(str, count) {
if (count < 0) {
throw new Error("Count must not be negative");
}
let newString = "";
for (let i = 0; i < count; i++) {
newString += str;
}

return newString;
}

module.exports = repeatStr;
18 changes: 18 additions & 0 deletions Sprint-3/2-practice-tdd/repeat-str.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,30 @@ test("should repeat the string count times", () => {
// When the repeatStr function is called with these inputs,
// Then it should return the original `str` without repetition.

test("should repeat the string count times", () => {
const str = "hello";
const count = 1;
const repeatedStr = repeatStr(str, count);
expect(repeatedStr).toEqual("hello");
});

// 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 repeat the string count times", () => {
const str = "hello";
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.
test("throws an error when count is a negative value", () => {
const str = "hello";
const count = -1;
expect(() => repeatStr(str, count)).toThrow("Count must not be negative");
});