Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
51 commits
Select commit Hold shift + click to select a range
cff3419
wrote a test to count a character in a string where that character do…
MaharitB Oct 16, 2026
e3a0787
edited the test
MaharitB Oct 16, 2026
6cd3097
made a change to the code, test passed
MaharitB Oct 16, 2026
5418d11
wrote a test , test failed.
MaharitB Oct 16, 2026
86ffa32
added some line in the code to make the test pass, two more test failed
MaharitB Oct 16, 2026
a23a6a5
added some code to make the test pass,test passed
MaharitB Oct 17, 2026
4fffb00
wrote a test and it passed
MaharitB Oct 17, 2026
0b8b953
added a test which includes number in the string,test passed
MaharitB Oct 17, 2026
623a0a6
added a test for a £ character,test passed
MaharitB Oct 17, 2026
cbd3ff3
added a test that would count space between words in a string
MaharitB Oct 17, 2026
e0136e6
added a test to count characters in group of words in a string, test …
MaharitB Oct 17, 2026
4a71d58
test case 1 failed, fixed the code, test passed.
MaharitB Oct 17, 2026
68e09e3
wrote a test for case 2. Test failed
MaharitB Oct 17, 2026
9b5152e
wrote a code to pass the test.test passed
MaharitB Oct 17, 2026
dd1a452
wrote a test for case 3, test failed.
MaharitB Oct 17, 2026
650bd92
two tests failed so made amend on the code and one test passed,one te…
MaharitB Oct 17, 2026
a7c42ab
make changes to the test code and test passed
MaharitB Oct 17, 2026
7f7deb4
add atest to the testing file and test failed
MaharitB Oct 17, 2026
5b59e17
added and amended in the code and the test passed
MaharitB Oct 17, 2026
494887f
added a test for case 5, exception numbers, test failed.
MaharitB Oct 17, 2026
4453a23
made changes to the code and test passed on case 5.
MaharitB Oct 17, 2026
91c2378
added a test to throw an error when the argument is 0. Test failed
MaharitB Oct 17, 2026
87eb71e
added a code that throws an error when num is passed with a value zer…
MaharitB Oct 17, 2026
55e6ea0
wrote a test with count =2, test failed
MaharitB Oct 17, 2026
2a2811a
added a code to make the test failed pass. Success.
MaharitB Oct 17, 2026
119aabb
added a test for the case count=1, test failed
MaharitB Oct 17, 2026
e8ae9bb
added a code to make the test pass four count =1, test passed
MaharitB Oct 17, 2026
c89337c
added a test for case where count=0, test failed
MaharitB Oct 17, 2026
a87428c
made a small change to the test file on the expected string
MaharitB Oct 17, 2026
ad818d2
wrote a code for case count=0, and test passed
MaharitB Oct 17, 2026
0f414c7
added a test for -ve counts and the code will throw an error.test failed
MaharitB Oct 17, 2026
2e069e9
count<0 in code is added and the test passed by throwing error when c…
MaharitB Oct 17, 2026
0cbd674
added a test that would return 4 hello.test failed
MaharitB Oct 17, 2026
b6e57ae
added a code that woud repeat a string count time. test passed
MaharitB Oct 17, 2026
6fd92ce
removed duplicated codes(refractor time)
MaharitB Oct 17, 2026
79f8acd
refractor code
MaharitB Oct 17, 2026
20e8438
cleaning up the code and format using prettier
MaharitB Oct 17, 2026
217ef19
cleaning up the code
MaharitB Oct 17, 2026
9551f77
changed all the test names,and added a test for throwing an Error if …
MaharitB Oct 19, 2026
b1e9a88
added a code to throw an error if findCharacter is more than one char…
MaharitB Oct 19, 2026
63986b5
added two tests for an empty string and a space
MaharitB Oct 19, 2026
cd87177
added code to make the test past for big numbers ending with 11,like111
MaharitB Oct 20, 2026
19060bc
updated the case name added some more test for numbers ending with 11…
MaharitB Oct 20, 2026
5fab553
edited a code to include error to throw for empty String
MaharitB Oct 20, 2026
b87e5f4
wrote back the comment as aadvised and added two more tested
MaharitB Oct 20, 2026
2aed003
Edited some cods to make the two tests added for -ve and decimal numb…
MaharitB Oct 20, 2026
942dc2b
added back the comment as advised and added a Math method to help wit…
MaharitB Oct 20, 2026
52a1d81
added test cases for decimal fixed the name given to the test
MaharitB Oct 20, 2026
3463aee
added a test for empty string.Test failed
MaharitB Oct 20, 2026
08dccc1
wrote a test that throws error when string is empty
MaharitB Oct 20, 2026
9f7796a
restored all coments as advised
MaharitB Oct 20, 2026
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
11 changes: 10 additions & 1 deletion practice-tdd/count.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,12 @@
export function countChar(stringOfCharacters, findCharacter) {
return 5
let count = 0;
if (findCharacter.length != 1) {
throw new Error(`Invalid Input,only character is allowed`);
}
for (let i = 0; i < stringOfCharacters.length; i++) {
if (stringOfCharacters[i] == findCharacter[0]) {

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Comparing each character to findCharacter[0] works well when the target is a single character, as the exercise describes. It might be interesting to try passing something like "an" and see what happens. You could then decide whether the function should handle that case or whether it’s outside what the function promises, and add a test that documents your decision. A test for an empty string could also be a helpful way to confirm the behaviour you expect.

count = count + 1;
}
}
return count;
}
74 changes: 62 additions & 12 deletions practice-tdd/count.test.js
Original file line number Diff line number Diff line change
@@ -1,24 +1,74 @@
// 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,

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

The Given/When/Then comments you removed describe each scenario in plain language, so consider restoring them and writing your own for the new scenarios you’ve added.

// When the countChar function is called with these inputs,
// Then it should:

// Scenario: Multiple Occurrences
// Given the input string `str`,
// And a character `char` that occurs one or more times in `str` (e.g., 'a' in 'aaaaa'),
// When the function is called with these inputs,
// Then it should correctly count occurrences of `char`.

test("should count multiple occurrences of a character", () => {
test("should count multiple occurrences of a character 'a' ", () => {
const str = "aaaaa";
const char = "a";
const count = countChar(str, char);
expect(count).toEqual(5);
});

// 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 0", () => {
const str = "aaaaa";
const char = "c";
const count = countChar(str, char);
expect(count).toEqual(0);
});

test("should count a character with strings of different characters", () => {
const str = "acc";
const char = "a";
const count = countChar(str, char);
expect(count).toEqual(1);
});
test("should count a character with strings of different characters that includes uppercase", () => {
const str = "AAAa";
const char = "a";

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Great idea to include this test. It shows that only the lowercase “a” is counted and the uppercase “A”s are ignored, so your function is case-sensitive. It might be helpful to rename the test to reflect that, perhaps by mentioning uppercase and lowercase.

const count = countChar(str, char);
expect(count).toEqual(1);
});
test("should count multiple occurences of character when given with numbers", () => {
const str = "11aa";
const char = "1";
const count = countChar(str, char);
expect(count).toEqual(2);
});
test("should count multiple occurences of character with signs", () => {
const str = "£100";
const char = "£";
const count = countChar(str, char);
expect(count).toEqual(1);
});
test("should count multiple occurences of character empty space", () => {
const str = "let's play tag";
const char = " ";
const count = countChar(str, char);
expect(count).toEqual(2);
});
test("should count multiple occurences of character in a sentence", () => {
const str = "let's play tag";
const char = "a";
const count = countChar(str, char);
expect(count).toEqual(2);
});

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

You can consider adding tests for an empty string and for a target longer than one character (like "an"), then decide whether the function should handle that or if it’s outside what the function promises.

test("should count multiple occurences of character in an empty string", () => {
const str = "";
const char = "a";
const count = countChar(str, char);
expect(count).toEqual(0);
});
test("should count multiple occurences of character in a sentence", () => {
const str = " ";
const char = " ";
const count = countChar(str, char);
expect(count).toEqual(1);
});
test("should throw an error when findCharacter receives more than one character", () => {
expect(() => {
countChar("aaaaaaanaaa", "an");
}).toThrow(`Invalid Input,only character is allowed`);
});
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";
let numStr = num.toString();
if (num <= 0 || num == " " || numStr.includes(".")) {
throw new Error("Invalid Input");
}

if (numStr.slice(-1) == "1" && numStr.slice(-2) != 11) {
return `${num}st`;
}

if (numStr.slice(-1) == "2" && numStr.slice(-2) != 12) {
return `${num}nd`;
}
if (numStr.slice(-1) == "3" && numStr.slice(-2) != 13) {
return `${num}rd`;
}

return `${num}th`;
}
54 changes: 52 additions & 2 deletions practice-tdd/get-ordinal-number.test.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
import { getOrdinalNumber } from "./get-ordinal-number.js";
// In this week's prep, we started implementing getOrdinalNumber.

// In this week's prep, we started implementing getOrdinalNumber.
// Continue testing and implementing getOrdinalNumber for additional cases.
// Write your tests using Jest — remember to run your tests often for continual feedback.

// To ensure thorough testing, we need broad scenarios that cover all possible cases.
// Listing individual values, however, can quickly lead to an unmanageable number of test cases.
// Instead of writing tests for individual numbers, consider grouping all possible input values
Expand All @@ -13,8 +12,59 @@ import { getOrdinalNumber } from "./get-ordinal-number.js";
// Case 1: Numbers ending with 1 (but not 11)
// When the number ends with 1, except those ending with 11,
// Then the function should return a string by appending "st" to the number.

// Case 1: Numbers ending with 1 (but not 11).
test("should append 'st' for numbers ending with 1, except those ending with 11", () => {
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(2)).toEqual("2nd");
expect(getOrdinalNumber(22)).toEqual("22nd");
expect(getOrdinalNumber(132)).toEqual("132nd");
});
//Case 3: Number ending with 3(but not 13)
test("should append 'rd' for numbers ending with 3, except those ending with 13", () => {
expect(getOrdinalNumber(3)).toEqual("3rd");
expect(getOrdinalNumber(23)).toEqual("23rd");
expect(getOrdinalNumber(103)).toEqual("103rd");
expect(getOrdinalNumber(133)).toEqual("133rd");
});
//case 4 : Number ending 4,5,6,7,8,9 and 0.
test("should append 'th' for numbers ending with (4,5,6,7,8,9,0)", () => {
expect(getOrdinalNumber(4)).toEqual("4th");
expect(getOrdinalNumber(10)).toEqual("10th");
expect(getOrdinalNumber(15)).toEqual("15th");
expect(getOrdinalNumber(58)).toEqual("58th");
expect(getOrdinalNumber(100)).toEqual("100th");
});
//Case 5: the exception numbers left out in all the cases(11,12,13)
test("should append 'th' for numbers 11, 12, 13", () => {

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Try adding a few to this test and see what your function returns.

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 now we have come to the last one 0
test(` should throw an error when num is 0`, () => {

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Nice work covering the main cases. One more you might like to explore is what happens when str is an empty string. Adding a test for it could be a helpful addition.

expect(() => getOrdinalNumber(0)).toThrow(`Invalid Input`);
});

//case 7 how about when empty string is the argument
test(`Should throw an error when num is empty string`, () => {
expect(() => getOrdinalNumber(" ")).toThrow(`Invalid Input`);
});
// Case 8 how about when num is -ve number
test(`should throw an Error when num is -ve number`, () => {
expect(() => getOrdinalNumber(-5).toThrow(`Invalid Input`));
});
//case 9 when num is decimal number
test(`Should throw an Error when num is decimal number`, () => {
expect(() => getOrdinalNumber(1.5).toThrow(`Invalid Input`));
});
24 changes: 21 additions & 3 deletions practice-tdd/repeat-str.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,23 @@
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).
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";

let repeatedStr = str;
count = Math.floor(count);

if (str === " ") {
throw new Error("String shoild not be empty");
}
if (count < 0) {
throw new Error("Negative counts are not valid");
Comment on lines +12 to +13

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Nice work handling the negative count with a clear error message. What happens if count is a decimal, like 2.5? Decide what the function should do and add a test for it.

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

for (let i = 1; i < count; i++) {
repeatedStr += str;
}
return repeatedStr;
}
52 changes: 40 additions & 12 deletions practice-tdd/repeat-str.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,24 +9,52 @@ import { repeatStr } from "./repeat-str.js";
// When the repeatStr function is called with these inputs,
// Then it should return a string that contains the original `str` repeated `count` times.

test("should repeat the string count times", () => {
// Case: handle count of 1, 2, 3, 4:
test("should repeat the string 1 times", () => {
const str = "hello";
const count = 1;
const repeatedStr = repeatStr(str, count);
expect(repeatedStr).toEqual("hello");
});
test("should repeat the string 2 times", () => {
const str = "hello";
const count = 2;
const repeatedStr = repeatStr(str, count);
expect(repeatedStr).toEqual("hellohello");
});
test("should repeat the string 3 times", () => {
const str = "hello";
const count = 3;
const repeatedStr = repeatStr(str, count);
expect(repeatedStr).toEqual("hellohellohello");
});

// Case: handle count of 1:
// 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 4 times", () => {
const str = "hello";
const count = 4;
const repeatedStr = repeatStr(str, count);
expect(repeatedStr).toEqual("hellohellohellohello");
});
// 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("");
});
//case: Handle decimal count:
test("should repeat the stringthe whole number in the count times", () => {
const str = "hello";
const count = 2.5;
const repeatedStr = repeatStr(str, count);
expect(repeatedStr).toEqual("hellohello");
});
// 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.
// Then it should throw an error, as negative counts are not valid
test("should throw an error when -1 count is given", () => {
expect(() => repeatStr("hello", -1)).toThrow("Negative counts are not valid");
});

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

It would be worth thinking about what should happen when str is an empty string. You might consider adding a test for that case, too.

test(`should throw an error when string is empty`, () => {
expect(() => repeatStr(" ", 1)).toThrow("String shoild not be empty");
});
Loading