Skip to content
Closed
Show file tree
Hide file tree
Changes from 3 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
5 changes: 4 additions & 1 deletion Sprint-3/2-practice-tdd/count.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
function countChar(stringOfCharacters, findCharacter) {
return 5
return [...stringOfCharacters].reduce(
(acc, curr) => acc + (curr === findCharacter ? 1 : 0),
0
);
}

module.exports = countChar;
6 changes: 6 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,9 @@ 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, since there are no occurrences of a character", () => {
const char = "a";
const str = "AABBFFSAA";
const count = countChar(str, char);
expect(count).toEqual(0);
});
21 changes: 20 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,24 @@
function getOrdinalNumber(num) {
return "1st";
const last2Digits = String(num).slice(-2);
if (["11", "12", "13"].includes(last2Digits)) return `${num}th`;

const lastDigit = String(num).slice(-1);
const restOfNum = String(num).slice(0, -1);

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.

This variable is unused. Can you remove it?

Note: In VSCode and in many IDEs, unused variables often appear in a different color in the editor.

let ordinalResult = "";
switch (lastDigit) {
case "1":
ordinalResult = `${num}st`;
break;
case "2":
ordinalResult = `${num}nd`;
break;
case "3":
ordinalResult = `${num}rd`;
break;
default:
ordinalResult = `${num}th`;
}
return ordinalResult;
}

module.exports = getOrdinalNumber;
38 changes: 38 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,41 @@ 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)
// When the number ends with 2, except those ending with 12,
// Then the function should return a string by appending "nd" to the number.
test("should append 'nd' for numbers ending with 2, except those ending with 12", () => {
expect(getOrdinalNumber(2)).toEqual("2nd");
expect(getOrdinalNumber(31562)).toEqual("31562nd");
expect(getOrdinalNumber(2322)).toEqual("2322nd");
});

// Case 3: Numbers ending with 3 (but not 13)
// When the number ends with 3, except those ending with 13,
// Then the function should return a string by appending "rd" to the number.
test("should append 'rd' for numbers ending with 3, except those ending with 13", () => {
expect(getOrdinalNumber(3)).toEqual("3rd");
expect(getOrdinalNumber(3243)).toEqual("3243rd");
expect(getOrdinalNumber(5462133)).toEqual("5462133rd");
});

// Case 4: Numbers ending with 11, 12 or 13
// When the number ends with 11, 12 or 13
// Then the function should return a string by appending "th" to the number.
test("should append 'th' for numbers with 11, 12 or 13", () => {
expect(getOrdinalNumber(11)).toEqual("11th");
expect(getOrdinalNumber(2111)).toEqual("2111th");
expect(getOrdinalNumber(2113)).toEqual("2113th");
expect(getOrdinalNumber(524312)).toEqual("524312th");
});

// Case 4: Numbers not ending in 1, 2 and 3
// When the number ends with 0, 4, 5, 6, 7, 8, 9
// Then the function should return a string by appending "th" to the number.
test("should append 'th' for numbers not ending in 1, 2 and 3", () => {
expect(getOrdinalNumber(19)).toEqual("19th");
expect(getOrdinalNumber(2118)).toEqual("2118th");
expect(getOrdinalNumber(2110)).toEqual("2110th");
expect(getOrdinalNumber(524334)).toEqual("524334th");
});
5 changes: 3 additions & 2 deletions Sprint-3/2-practice-tdd/repeat-str.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
function repeatStr() {
return "hellohellohello";
function repeatStr(str, count) {
if (count < 0) throw new Error("Can not repeat negative times.");
return str.repeat(count);
}

module.exports = repeatStr;
17 changes: 17 additions & 0 deletions Sprint-3/2-practice-tdd/repeat-str.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,30 @@ 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 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("should repeat the string count times", () => {
const str = "hello";
const count = -3;
expect(() => repeatStr(str, count)).toThrow("Can not repeat negative times.");
});