Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 7 additions & 1 deletion practice-tdd/count.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
export function countChar(stringOfCharacters, findCharacter) {
return 5
let count = 0;
for (let i = 0; i < stringOfCharacters.length; i++) {
if (stringOfCharacters[i] === findCharacter) {
count++;
}
}
return count;
}
21 changes: 21 additions & 0 deletions practice-tdd/count.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,29 @@ test("should count multiple occurrences of a character", () => {
expect(count).toEqual(5);
});

test("should count multiple occurences of a character in a multiple character string", () => {
const str = "banana";
const char = "a";
const count = countChar(str, char);
expect(count).toEqual(3);
});

// 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 count zero occurrences of a character", () => {
const str = "aaaa";
const char = "b";
const count = countChar(str, char);
expect(count).toEqual(0);
});
Comment on lines +33 to +38

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

There is a special str that would give 0 anyway. Please add that test case as well. Thank you.


test("should return 0 for no input", () => {
const str = "";
const char = "b";
const count = countChar(str, char);
expect(count).toEqual(0);
});
24 changes: 23 additions & 1 deletion practice-tdd/get-ordinal-number.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,25 @@
export function getOrdinalNumber(num) {
return "1st";
if (num === null || num === undefined || num === "" || num < 0) {
throw new Error("Invalid input!");
}

if (typeof num !== "number" || !isFinite(num)) {
throw new Error("Invalid input!");
}

const lastDigit = num % 10;
const lastTwoDigits = num % 100;

if (lastTwoDigits >= 11 && 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`;
}
32 changes: 32 additions & 0 deletions practice-tdd/get-ordinal-number.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,3 +18,35 @@ 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 'nd' for numbers ending with 2, except those ending with 12", () => {
expect(getOrdinalNumber(2)).toEqual("2nd");
expect(getOrdinalNumber(32)).toEqual("32nd");
expect(getOrdinalNumber(102)).toEqual("102nd");
});

test("should append 'rd' for numbers ending with 3, except those ending with 13", () => {
expect(getOrdinalNumber(3)).toEqual("3rd");
expect(getOrdinalNumber(53)).toEqual("53rd");
expect(getOrdinalNumber(123)).toEqual("123rd");
});

test("should append 'th for special cases 11, 12, 13", () => {
expect(getOrdinalNumber(11)).toEqual("11th");
expect(getOrdinalNumber(12)).toEqual("12th");
expect(getOrdinalNumber(13)).toEqual("13th");
});

test("should append 'th' for the rest of the numbers", () => {
expect(getOrdinalNumber(9)).toEqual("9th");
expect(getOrdinalNumber(20)).toEqual("20th");
expect(getOrdinalNumber(108)).toEqual("108th");
});
Comment on lines +40 to +44

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Lines 13-15 of your code has not been included in this test suite. Please add test cases specifically for that part of the code. Thank you.

@hackertainment hackertainment Oct 20, 2026 •

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

I see you have added 11th, 12th, and 13th. Just it would be better to also include 3-digit number (e.g. 211th, 112th, and 213) ended in 11 or 12 or 13 as well. I will let you pass this time because your code is correct, but please improve test cases coverage in the future. Thank you.


test("should throw an error if the input is invalid", () => {
expect(() => getOrdinalNumber("")).toThrow("Invalid input!");
expect(() => getOrdinalNumber("fifty two")).toThrow("Invalid input!");
expect(() => getOrdinalNumber(-3)).toThrow("Invalid input!");
expect(() => getOrdinalNumber(null)).toThrow("Invalid input!");
expect(() => getOrdinalNumber(undefined)).toThrow("Invalid input!");
});
21 changes: 17 additions & 4 deletions practice-tdd/repeat-str.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,18 @@
export 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.#
export function repeatStr(str, count) {
if (Number.isInteger(count) && count < 0) {
throw new Error(`Invalid input`);
}
Comment on lines +4 to +6

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

I don't think this part is accurate. Consider count = 4.5, would the result be the same as expected?

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.

Thanks for that! You got me reading about the distinction between the tasks where one is required to take what's given and implement to handle only specific cases, and where one has to handle edge cases, validate inputs, throw errors for invalid.. . If the task required me to 'Handle edge cases' or, more specifically, 'handle non-integers', then it would be a must to rewrite my implementation and add a test accordingly. I would change that part into if (!Number.isInteger(count) || count < 0) { throw new Error(Invalid input); }

if (count === 0) {
return "";
}

if (Number.isInteger(count) && count > 0) {
let result = "";
for (let i = 0; i < count; i++) {
result += str;
}
return result;
}
}
27 changes: 27 additions & 0 deletions practice-tdd/repeat-str.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,39 @@ 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 1 time", () => {
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 0 times", () => {
const str = "hello";
const count = 0;
const repeatedStr = repeatStr(str, count);
expect(repeatedStr).toEqual("");
});

test("should repeat the string 0 times", () => {
const str = "";
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("should throw an error for negative count", () => {
const str = "hello";
const count = -2;
expect(() => repeatStr(str, count)).toThrow("Invalid input");
});
Loading