-
-
Notifications
You must be signed in to change notification settings - Fork 260
West Midlands | 25 Sep ITP | Iswat Bello | Sprint 3 | 2 Practice TDD #798
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 17 commits
2c2b0f3
6db0981
7362e86
1f72b49
ed1a393
93d9cb6
9bc1c34
01cb978
86311c7
bd7847f
1c66099
03b238e
14306cc
a6bbe86
aaa3da4
4548cb5
4027919
2b82934
4153632
2957d4b
95ba4bf
d0b6378
3243748
adb9421
f6115be
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,5 +1,21 @@ | ||
| function countChar(stringOfCharacters, findCharacter) { | ||
| return 5 | ||
| let characterOccurrence = ""; | ||
| if ( | ||
| typeof stringOfCharacters === "string" && | ||
| typeof findCharacter === "string" | ||
| ) { | ||
| stringOfCharacters = stringOfCharacters.toLowerCase(); | ||
| findCharacter = findCharacter.toLowerCase(); | ||
| if (findCharacter.length === 1) { | ||
| characterOccurrence = stringOfCharacters.split(findCharacter).length - 1; | ||
| } else { | ||
| characterOccurrence = "invalid input: Input just one character"; | ||
|
||
| } | ||
| } else { | ||
| characterOccurrence = "Invalid input: input should be a string"; | ||
| } | ||
|
|
||
| return characterOccurrence; | ||
| } | ||
|
|
||
| module.exports = countChar; | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -22,3 +22,71 @@ test("should count multiple occurrences of a character", () => { | |
| // And a character char that does not exist within the case-sensitive str, | ||
| // When the function is called with these inputs, | ||
| // Then it should return 0, indicating that no occurrences of the char were found in the case-sensitive str. | ||
| test("should return 0 occurence of a character", () => { | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This is a good start but this is would not be considered as a good test suite as it covers just one behavior. Good test suite should cover different scenarios based on what type of arguments you pass to the function. |
||
| const str = "happy"; | ||
| const char = "z"; | ||
| const count = countChar(str, char); | ||
| expect(count).toEqual(0); | ||
| }); | ||
|
|
||
| // Scenario: One occurrence | ||
| // Given an input string `str`, | ||
| // And a character `char` that occurs once within `str` (e.g., 'a' in 'boat'), | ||
| // When the function is called with these inputs, | ||
| // Then it should correctly return the count of `char` (e.g., 'a' appears once in 'boat'). | ||
|
|
||
| test("should return 1 occurence of a character", () => { | ||
| const str = "boat"; | ||
| const char = "a"; | ||
| const count = countChar(str, char); | ||
| expect(count).toEqual(1); | ||
| }); | ||
|
|
||
| test("should return 0 occurrence of character in an empty string", () => { | ||
| const str = ""; | ||
| const char = "b"; | ||
| const count = countChar(str, char); | ||
| expect(count).toEqual(0); | ||
| }); | ||
|
|
||
| test("should throw an error when more than one string is passed as char", () => { | ||
| const str = "jump"; | ||
| const char = "pp"; | ||
| const count = countChar(str, char); | ||
| expect(count).toEqual("invalid input: Input just one character"); | ||
| }); | ||
|
|
||
| test("should count characters regardless of case (treat 'a' and 'A' as equal)", () => { | ||
| const str = "JUMP"; | ||
| const char = "m"; | ||
| const count = countChar(str, char); | ||
| expect(count).toEqual(1); | ||
| }); | ||
|
|
||
| test("should return correct count of space characters", () => { | ||
| const str = "F r o NT"; | ||
| const char = " "; | ||
| const count = countChar(str, char); | ||
| expect(count).toEqual(3); | ||
| }); | ||
|
|
||
| test("should count numeric characters correctly in the string", () => { | ||
| const str = "2Languages6"; | ||
| const char = "2"; | ||
| const count = countChar(str, char); | ||
| expect(count).toEqual(1); | ||
| }); | ||
|
|
||
| test("should correctly count characters in a very long string", () => { | ||
| const str = "b".repeat(500) + "abB"; | ||
| const char = "b"; | ||
| const count = countChar(str, char); | ||
| expect(count).toEqual(502); | ||
| }); | ||
|
|
||
| test("should count numeric characters correctly in the string", () => { | ||
| const str = "2Languages6"; | ||
| const char = 2; | ||
| const count = countChar(str, char); | ||
| expect(count).toEqual("Invalid input: input should be a string"); | ||
| }); | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,5 +1,31 @@ | ||
| function getOrdinalNumber(num) { | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Unfortunately, this function is not passing the acceptance criteria. Please try to pass different values to the function and see if it returns what you expect. |
||
| return "1st"; | ||
| let ordinalNum; | ||
| if (Number.isInteger(num) === true) { | ||
|
||
| if ( | ||
|
||
| Math.abs(num % 100) === 11 || | ||
| Math.abs(num % 100) === 12 || | ||
| Math.abs(num % 100) === 13 || | ||
| Math.abs(num % 10) === 4 || | ||
| Math.abs(num % 10) === 5 || | ||
| Math.abs(num % 10) === 6 || | ||
| Math.abs(num % 10) === 7 || | ||
| Math.abs(num % 10) === 8 || | ||
| Math.abs(num % 10) === 9 || | ||
| Math.abs(num % 10) === 0 | ||
| ) { | ||
| ordinalNum = `${num}th`; | ||
| } else if (Math.abs(num % 10) === 1) { | ||
| ordinalNum = `${num}st`; | ||
| } else if (Math.abs(num % 10) === 2) { | ||
| ordinalNum = `${num}nd`; | ||
| } else if (Math.abs(num % 10) === 3) { | ||
| ordinalNum = `${num}rd`; | ||
| } else { | ||
| ordinalNum = `${num}th`; | ||
| } | ||
| } else { | ||
| ordinalNum = "Invalid input: Input is an integer"; | ||
| } | ||
| return ordinalNum; | ||
| } | ||
|
|
||
| module.exports = getOrdinalNumber; | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -11,3 +11,81 @@ const getOrdinalNumber = require("./get-ordinal-number"); | |
| test("should return '1st' for 1", () => { | ||
| expect(getOrdinalNumber(1)).toEqual("1st"); | ||
| }); | ||
|
|
||
| test("should return '2nd' for 2", () => { | ||
| expect(getOrdinalNumber(2)).toEqual("2nd"); | ||
| }); | ||
|
|
||
| test("should return '3rd' for 3", () => { | ||
| expect(getOrdinalNumber(3)).toEqual("3rd"); | ||
| }); | ||
|
|
||
| test("should return '4th' for 4", () => { | ||
| expect(getOrdinalNumber(4)).toEqual("4th"); | ||
| }); | ||
|
|
||
| test("should return '10th' for 10", () => { | ||
| expect(getOrdinalNumber(10)).toEqual("10th"); | ||
| }); | ||
|
|
||
| test("should return '11th' for 11", () => { | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Same as a previous comment regarding very slim test suite. Try to think of more test cases. |
||
| expect(getOrdinalNumber(11)).toEqual("11th"); | ||
| }); | ||
|
|
||
| test("should return '12th' for 12", () => { | ||
| expect(getOrdinalNumber(12)).toEqual("12th"); | ||
| }); | ||
|
|
||
| test("should return '13th' for 13", () => { | ||
| expect(getOrdinalNumber(13)).toEqual("13th"); | ||
| }); | ||
|
|
||
| test("should return '21st' for 21", () => { | ||
| expect(getOrdinalNumber(21)).toEqual("21st"); | ||
| }); | ||
|
|
||
| test("should return '23rd' for 23", () => { | ||
| expect(getOrdinalNumber(23)).toEqual("23rd"); | ||
| }); | ||
|
|
||
| test("should return '22nd' for 22", () => { | ||
| expect(getOrdinalNumber(22)).toEqual("22nd"); | ||
| }); | ||
|
|
||
| test("should return '100th' for 100", () => { | ||
| expect(getOrdinalNumber(100)).toEqual("100th"); | ||
| }); | ||
|
|
||
| test("should return '111th' for 111", () => { | ||
| expect(getOrdinalNumber(111)).toEqual("111th"); | ||
| }); | ||
|
|
||
| test("should return '0th' for 0", () => { | ||
| expect(getOrdinalNumber(0)).toEqual("0th"); | ||
| }); | ||
|
|
||
| test("should return '-111th' for -111", () => { | ||
| expect(getOrdinalNumber(-111)).toEqual("-111th"); | ||
| }); | ||
|
|
||
| test("should return 'Invalid input: Input is an integer' for 1.52", () => { | ||
| expect(getOrdinalNumber(1.52)).toEqual("Invalid input: Input is an integer"); | ||
| }); | ||
|
|
||
| test("should return 'Invalid input: Input is an integer' for null", () => { | ||
| expect(getOrdinalNumber(null)).toEqual("Invalid input: Input is an integer"); | ||
| }); | ||
|
|
||
| test("should return 'Invalid input: Input is an integer' for undefined", () => { | ||
| expect(getOrdinalNumber(undefined)).toEqual( | ||
| "Invalid input: Input is an integer" | ||
| ); | ||
| }); | ||
|
|
||
| test("should return 'Invalid input: Input is an integer' for 'a'", () => { | ||
| expect(getOrdinalNumber("a")).toEqual("Invalid input: Input is an integer"); | ||
| }); | ||
|
|
||
| test("should return 'Invalid input: Input is an integer' for {}", () => { | ||
| expect(getOrdinalNumber({})).toEqual("Invalid input: Input is an integer"); | ||
| }); | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,5 +1,17 @@ | ||
| function repeat() { | ||
| return "hellohellohello"; | ||
| function repeat(valueToRepeat, numOfTimes) { | ||
| let repeatedValue = ""; | ||
| if (numOfTimes > 0 && Number.isInteger(numOfTimes)) { | ||
| for (let i = 0; i < numOfTimes; i++) { | ||
| repeatedValue += valueToRepeat; | ||
| } | ||
| } else if (numOfTimes === 0) { | ||
| repeatedValue = ""; | ||
| } else if(numOfTimes < 0) { | ||
| repeatedValue = "Negative number invalid"; | ||
| } else if(!Number.isInteger(numOfTimes)) { | ||
| repeatedValue = "Invalid count: count should be an integer" | ||
|
||
| } | ||
| return repeatedValue; | ||
| } | ||
|
|
||
| module.exports = repeat; | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -20,13 +20,98 @@ test("should repeat the string count times", () => { | |
| // Given a target string str and a count equal to 1, | ||
| // When the repeat function is called with these inputs, | ||
| // Then it should return the original str without repetition, ensuring that a count of 1 results in no repetition. | ||
| test("should return the original input with no repetition", () => { | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. These unit tests are good, great job on writing them! Now I would like you to think of more test cases, where the values passed to the function are not what you expected. What if you pass integer 3 as |
||
| const str = "milk"; | ||
| const count = 1; | ||
| const repeatedStr = repeat(str, count); | ||
| expect(repeatedStr).toEqual(str); | ||
| }) | ||
|
|
||
| // case: Handle Count of 0: | ||
| // Given a target string str and a count equal to 0, | ||
| // When the repeat function is called with these inputs, | ||
| // Then it should return an empty string, ensuring that a count of 0 results in an empty output. | ||
| test("should return an empty string for zero count times", () => { | ||
| const str = "rice"; | ||
| const count = 0; | ||
| const repeatedStr = repeat(str, count); | ||
| expect(repeatedStr).toEqual(""); | ||
| }) | ||
|
|
||
| // case: Negative Count: | ||
| // Given a target string str and a negative integer count, | ||
| // When the repeat function is called with these inputs, | ||
| // Then it should throw an error or return an appropriate error message, as negative counts are not valid. | ||
| test("should return an error message", () => { | ||
| const str = "food"; | ||
| const count = -2; | ||
| const repeatedStr = repeat(str, count); | ||
| expect(repeatedStr).toEqual("Negative number invalid"); | ||
| }) | ||
|
|
||
| test("should return an empty string when empty string is expected count number of times", () => { | ||
| const str = ""; | ||
| const count = 23; | ||
| const repeatedStr = repeat(str, count); | ||
| expect(repeatedStr).toEqual(""); | ||
| }) | ||
|
|
||
| test("should repeat the number count times as a string", () => { | ||
| const str = 1; | ||
| const count = 3; | ||
| const repeatedStr = repeat(str, count); | ||
| expect(repeatedStr).toEqual("111"); | ||
| }); | ||
|
|
||
| test("should repeat boolean count times as a string", () => { | ||
| const str = true; | ||
| const count = 2; | ||
| const repeatedStr = repeat(str, count); | ||
| expect(repeatedStr).toEqual("truetrue"); | ||
| }); | ||
|
|
||
| test("should repeat null count times as a string", () => { | ||
| const str = null; | ||
| const count = 2; | ||
| const repeatedStr = repeat(str, count); | ||
| expect(repeatedStr).toEqual("nullnull"); | ||
| }); | ||
|
|
||
| test("should repeat undefined count times as a string", () => { | ||
| const str = undefined; | ||
| const count = 2; | ||
| const repeatedStr = repeat(str, count); | ||
| expect(repeatedStr).toEqual("undefinedundefined"); | ||
| }); | ||
|
|
||
| // case: array input | ||
| test("should repeat [] count times as a string", () => { | ||
| const str = []; | ||
| const count = 2; | ||
| const repeatedStr = repeat(str, count); | ||
| expect(repeatedStr).toEqual(""); | ||
| }); | ||
|
|
||
| // case: Non-integer positive count | ||
| test("should return an error message for non-integer positive count", () => { | ||
| const str = "apple"; | ||
| const count = 2.5; | ||
| const repeatedStr = repeat(str, count); | ||
| expect(repeatedStr).toEqual("Invalid count: count should be an integer"); | ||
| }); | ||
|
|
||
| // case: Non-integer negative count | ||
| test("should return an error message for non-integer negative count", () => { | ||
| const str = "banana"; | ||
| const count = -1.7; | ||
| const repeatedStr = repeat(str, count); | ||
| expect(repeatedStr).toEqual("Negative number invalid"); | ||
| }); | ||
|
|
||
| // case: Object input | ||
| test("should repeat an object count times as a string", () => { | ||
|
||
| const str = {}; | ||
| const count = 2; | ||
| const repeatedStr = repeat(str, count); | ||
| expect(repeatedStr).toEqual("[object Object][object Object]"); | ||
| }); | ||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It's usually better to return early if inputs are invalid, it's called
early return. Can you think of a way to implement this in your function?