Skip to content
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;
17 changes: 17 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 @@ -14,7 +14,24 @@ 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(11)).toEqual("11th");
expect(getOrdinalNumber(1)).toEqual("1st");
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(12)).toEqual("12th");
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(13)).toEqual("13th");
expect(getOrdinalNumber(113)).toEqual("113th");
expect(getOrdinalNumber(23)).toEqual("23rd");
expect(getOrdinalNumber(453)).toEqual("453rd");
});
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");
});
Loading