Skip to content
Open
2 changes: 2 additions & 0 deletions practice-tdd/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
node_modules

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 (const character of stringOfCharacters) {
if (character === findCharacter) {
count++;
}
}
return count;
}
8 changes: 8 additions & 0 deletions practice-tdd/count.test.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
// implement a function countChar that counts the number of times a character occurs in a string
import { countChar } from "./count.js";

// Given a string `str` and a single character `char` to search for,
// When the countChar function is called with these inputs,
// Then it should:
Expand All @@ -22,3 +23,10 @@ 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 indicate no occurrences of a character", () => {
const str = "abcde";
const char = "f";
const numberOfOccurrence = countChar(str, char);
expect(numberOfOccurrence).toEqual(0);
});
18 changes: 17 additions & 1 deletion practice-tdd/get-ordinal-number.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,19 @@
export function getOrdinalNumber(num) {
return "1st";
const lastTwoDigits = num % 100;

// Handle exceptions: 11th, 12th, 13th, 111th, etc.
if (lastTwoDigits >= 11 && lastTwoDigits <= 13) {
return `${num}th`;
}

switch (num % 10) {
case 1:
return `${num}st`;
case 2:
return `${num}nd`;
case 3:
return `${num}rd`;
default:
return `${num}th`;
}
}
40 changes: 40 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,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");
});

// 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(32)).toEqual("32nd");
expect(getOrdinalNumber(452)).toEqual("452nd");
});

// 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(43)).toEqual("43rd");
expect(getOrdinalNumber(823)).toEqual("823rd");
});

// Case 4: Numbers ending with any other number (but not 1,2 or 3)
// When the number ends with 4,5,6 ,7 ,8 or 9 ,
// Then the function should return a string by appending "th" to the number.
test("should append 'th' for numbers ending with 4,5,6 ,7 ,8 or 9 ", () => {
expect(getOrdinalNumber(4)).toEqual("4th");
expect(getOrdinalNumber(25)).toEqual("25th");
expect(getOrdinalNumber(656)).toEqual("656th");
expect(getOrdinalNumber(1007)).toEqual("1007th");
expect(getOrdinalNumber(638398)).toEqual("638398th");
expect(getOrdinalNumber(34454559)).toEqual("34454559th");
});

// Case 5: Numbers ending with 3digit teen expcetions
// When the number ends with ,(111, 112,113)
// Then the function should return a string by appending "th" to the number.
test("should append 'th' for numbers ending with ", () => {
expect(getOrdinalNumber(111)).toEqual("111th");
expect(getOrdinalNumber(112)).toEqual("112th");
expect(getOrdinalNumber(113)).toEqual("113th");

});
13 changes: 11 additions & 2 deletions practice-tdd/repeat-str.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,14 @@
export function repeatStr() {
export function repeatStr(str, count) {
// 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";
if (count < 0) {
throw new Error("Error! negative counts are not valid");
}
let result = "";
let counter = count;
while (counter > 0) {
result += str;
counter--;
}
return result;
}
22 changes: 22 additions & 0 deletions practice-tdd/repeat-str.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,34 @@ 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 return the original `str` without repetition", () => {
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 return an empty string", () => {
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 throw an error, as negative counts are not valid.", () => {
const str = "hello";
const count = -3;
expect(() => repeatStr(str, count)).toThrow(
"Error! negative counts are not valid"
);
});