Skip to content
Closed
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,27 @@
// execute the code to ensure all tests pass.

function getAngleType(angle) {
// TODO: Implement this function
if (angle > 0 && angle < 90) {
return "Acute angle";
}

if (angle === 90) {
return "Right angle";
}

if (angle > 90 && angle < 180) {
return "Obtuse angle";
}

if (angle === 180) {
return "Straight angle";
}

if (angle > 180 && angle < 360) {
return "Reflex angle";
}

return "Invalid angle";
}

// The line below allows us to load the getAngleType function into tests in other files.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@
// execute the code to ensure all tests pass.

function isProperFraction(numerator, denominator) {
// TODO: Implement this function
if (denominator === 0) return false;
return Math.abs(numerator) < Math.abs(denominator);
}

// The line below allows us to load the isProperFraction function into tests in other files.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,30 @@
// execute the code to ensure all tests pass.

function getCardValue(card) {
// TODO: Implement this function
if (card.length < 2 || card.length > 3) {
throw new Error("Invalid card");
}

const suit = card.slice(-1);
const rank = card.slice(0, -1);

if (!"♥♦♣♠".includes(suit)) {
throw new Error("Invalid card");
}

if (/^[2-9]$/.test(rank) || rank === "10") {
return Number(rank);
}

if (["J", "Q", "K"].includes(rank)) {
return 10;
}

if (rank === "A") {
return 11;
}

throw new Error("Invalid card");
}

// The line below allows us to load the getCardValue function into tests in other files.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,42 @@ test(`should return "Acute angle" when (0 < angle < 90)`, () => {
});

// Case 2: Right angle

test(`should return "Right angle" when (angle === 90)`, () => {
// Test right angle
expect(getAngleType(90)).toEqual("Right angle");
});

// Case 3: Obtuse angles

test(`should return "Obtuse angle" when (90 < angle < 180)`, () => {
// Test various obtuse angles, including boundary cases
expect(getAngleType(91)).toEqual("Obtuse angle");
expect(getAngleType(145)).toEqual("Obtuse angle");
expect(getAngleType(99)).toEqual("Obtuse angle");
});

// Case 4: Straight angle

test(`should return "Straight angle" when (angle === 180)`, () => {
// Test straight angle
expect(getAngleType(180)).toEqual("Straight angle");
});

// Case 5: Reflex angles

test(`should return "Reflex angle" when (180 < angle < 360)`, () => {
// Test various reflex angles, including boundary cases
expect(getAngleType(191)).toEqual("Reflex angle");
expect(getAngleType(245)).toEqual("Reflex angle");
expect(getAngleType(199)).toEqual("Reflex angle");
});

// Case 6: Invalid angles

test(`should return "Invalid angle" when (angle < 0 || angle > 360)`, () => {
// Test various invalid angles, including boundary cases
expect(getAngleType(-1)).toEqual("Invalid angle");
expect(getAngleType(395)).toEqual("Invalid angle");
expect(getAngleType(389)).toEqual("Invalid angle");
});
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,31 @@ const isProperFraction = require("../implement/2-is-proper-fraction");
test(`should return false when denominator is zero`, () => {
expect(isProperFraction(1, 0)).toEqual(false);
});

test("1/2 is proper", () => {
expect(isProperFraction(1, 2)).toBe(true);
});

test("3/2 is improper", () => {
expect(isProperFraction(3, 2)).toBe(false);
});

test("0/5 is proper", () => {
expect(isProperFraction(0, 5)).toBe(true);
});

test("denominator 0 is invalid", () => {
expect(isProperFraction(1, 0)).toBe(false);
});

test("-1/2 is proper", () => {
expect(isProperFraction(-1, 2)).toBe(true);
});

test("1/-2 is proper", () => {
expect(isProperFraction(1, -2)).toBe(true);
});

test("-3/2 is improper", () => {
expect(isProperFraction(-3, 2)).toBe(false);
});
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,56 @@ test(`Should return 11 when given an ace card`, () => {
expect(getCardValue("A♠")).toEqual(11);
});

// Number cards
test("Should return 2 for 2♣", () => {
expect(getCardValue("2♣")).toEqual(2);
});

test("Should return 10 for 10♥", () => {
expect(getCardValue("10♥")).toEqual(10);
});

// Face cards
test("Should return 10 for J♦", () => {
expect(getCardValue("J♦")).toEqual(10);
});

test("Should return 10 for Q♠", () => {
expect(getCardValue("Q♠")).toEqual(10);
});

test("Should return 10 for K♣", () => {
expect(getCardValue("K♣")).toEqual(10);
});

// =========================================================
// INVALID CARDS
// =========================================================

test("Should throw an error for 1♠", () => {
expect(() => getCardValue("1♠")).toThrowError();
});

test("Should throw an error for A?", () => {
expect(() => getCardValue("A?")).toThrowError();
});

test("Should throw an error for empty string", () => {
expect(() => getCardValue("")).toThrowError();
});

test("Should throw an error for 11♣", () => {
expect(() => getCardValue("11♣")).toThrowError();
});

test("Should throw an error for invalid rank", () => {
expect(() => getCardValue("Z♦")).toThrowError();
});

test("Should throw an error for missing rank", () => {
expect(() => getCardValue("♠")).toThrowError();
});

// Suggestion: Group the remaining test data into these categories:
// Number Cards (2-10)
// Face Cards (J, Q, K)
Expand All @@ -17,4 +67,3 @@ test(`Should return 11 when given an ace card`, () => {
// To learn how to test whether a function throws an error as expected in Jest,
// please refer to the Jest documentation:
// https://jestjs.io/docs/expect#tothrowerror

2 changes: 1 addition & 1 deletion Sprint-3/2-practice-tdd/count.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
function countChar(stringOfCharacters, findCharacter) {
return 5
return stringOfCharacters.split('').filter(x => x === findCharacter).length
}

module.exports = countChar;
40 changes: 40 additions & 0 deletions Sprint-3/2-practice-tdd/count.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,46 @@ test("should count multiple occurrences of a character", () => {
expect(count).toEqual(5);
});

// Scenario: No Occurrences
test("should return 0 when character is not present", () => {
const str = "hello";
const char = "z";
const count = countChar(str, char);
expect(count).toBe(0);
});

// Scenario: Single Occurrence
test("should count a single occurrence of a character", () => {
const str = "hello";
const char = "h";
const count = countChar(str, char);
expect(count).toBe(1);
});

// Scenario: Mixed string
test("should count occurrences in a mixed string", () => {
const str = "banana";
const char = "a";
const count = countChar(str, char);
expect(count).toBe(3);
});

// Scenario: Empty string
test("should return 0 for empty string", () => {
const str = "";
const char = "a";
const count = countChar(str, char);
expect(count).toBe(0);
});

// Scenario: Case sensitivity
test("should be case sensitive", () => {
const str = "AaAa";
const char = "a";
const count = countChar(str, char);
expect(count).toBe(2);
});

// Scenario: No Occurrences
// Given the input string `str`,
// And a character `char` that does not exist within `str`.
Expand Down
20 changes: 19 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,23 @@
function getOrdinalNumber(num) {
return "1st";
const asString = String(num);

if (num === 0) {
return "0";
} else if (
asString.endsWith("11") ||
asString.endsWith("12") ||
asString.endsWith("13")
) {
return asString + "th";
} else if (asString.endsWith("1")) {
return asString + "st";
} else if (asString.endsWith("2")) {
return asString + "nd";
} else if (asString.endsWith("3")) {
return asString + "rd";
} else {
return asString + "th";
}
}

module.exports = getOrdinalNumber;
37 changes: 37 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,40 @@ 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)
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(102)).toEqual("102nd");
});

// Case 3: Numbers 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");
});

// Case 4: Numbers ending with 11, 12, or 13 should always use 'th'
test("should append 'th' for numbers ending with 11, 12, or 13", () => {
expect(getOrdinalNumber(11)).toEqual("11th");
expect(getOrdinalNumber(12)).toEqual("12th");
expect(getOrdinalNumber(13)).toEqual("13th");
expect(getOrdinalNumber(111)).toEqual("111th");
expect(getOrdinalNumber(212)).toEqual("212th");
expect(getOrdinalNumber(313)).toEqual("313th");
});

// Case 5: All other numbers should use 'th'
test("should append 'th' for numbers that do not end in 1, 2, or 3", () => {
expect(getOrdinalNumber(4)).toEqual("4th");
expect(getOrdinalNumber(10)).toEqual("10th");
expect(getOrdinalNumber(20)).toEqual("20th");
expect(getOrdinalNumber(99)).toEqual("99th");
});

// Case 6: Zero should return '0'
test("should return '0' when the input is zero", () => {
expect(getOrdinalNumber(0)).toEqual("0");
});
6 changes: 2 additions & 4 deletions Sprint-3/2-practice-tdd/repeat-str.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
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";
function repeatStr(str, count) {
return str.repeat(count);
}

module.exports = repeatStr;
23 changes: 23 additions & 0 deletions Sprint-3/2-practice-tdd/repeat-str.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,35 @@ 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 string when count is 1", () => {
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 when count is 0", () => {
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 when count is negative", () => {
const str = "hello";
const count = -2;

expect(() => {
repeatStr(str, count);
}).toThrow();
});
6 changes: 2 additions & 4 deletions Sprint-3/3-dead-code/exercise-1.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,8 @@
let testName = "Jerry";
const greeting = "hello";

function sayHello(greeting, name) {
const greetingStr = greeting + ", " + name + "!";
return `${greeting}, ${name}!`;
console.log(greetingStr);
function sayHello(greeting, name) {
return `${greeting}, ${name}!`;
}

testName = "Aman";
Expand Down
Loading
Loading