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

function getAngleType(angle) {
// TODO: Implement this function
if (angle <= 0) {
return "Invalid angle";
}
if (angle < 90) {
return "Acute angle";
}
if (angle === 90) {
return "Right angle";
}
if (angle < 180) {
return "Obtuse angle";
}
if (angle === 180) {
return "Straight angle";
}
if (angle < 360) {
return "Reflex angle";
}
return "Invalid angle";
}

// The line below allows us to load the getAngleType function into tests in other files.
Expand All @@ -33,5 +51,23 @@ function assertEquals(actualOutput, targetOutput) {

// TODO: Write tests to cover all cases, including boundary and invalid cases.
// Example: Identify Right Angles
const acute = getAngleType(70);
assertEquals(acute, "Acute angle");

const right = getAngleType(90);
assertEquals(right, "Right angle");

const obtuse = getAngleType(95);
assertEquals(obtuse, "Obtuse angle");

const straight = getAngleType(180);
assertEquals(straight, "Straight angle");

const reflex = getAngleType(280);
assertEquals(reflex, "Reflex angle");

const invalid = getAngleType(-10);
assertEquals(invalid, "Invalid angle");

const invalid2 = getAngleType(360);
assertEquals(invalid2, "Invalid angle");
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 All @@ -26,8 +27,10 @@ function assertEquals(actualOutput, targetOutput) {
);
}

// TODO: Write tests to cover all cases.
// What combinations of numerators and denominators should you test?

// Example: 1/2 is a proper fraction
assertEquals(isProperFraction(1, 2), true);
assertEquals(isProperFraction(2, 1), false);
assertEquals(isProperFraction(0, 0), false);
assertEquals(isProperFraction(-0, 0), false);
assertEquals(isProperFraction(-5, 4), false);
assertEquals(isProperFraction(-4, -5), true);
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,38 @@
// execute the code to ensure all tests pass.

function getCardValue(card) {
// TODO: Implement this function
const rank = [
"A",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9",
"10",
"J",
"Q",
"K",
];
const suit = ["♠", "♥", "♦", "♣"];

const cardValue = card.slice(-1);
const cardSuit = card[card.length - 1];
Comment thread
RaihanSharif marked this conversation as resolved.

if (!rank.includes(cardValue) || !suit.includes(cardSuit)) {
throw new Error("invalid input");
}

if ("A" === cardValue) {
return 11;
}
if (["J", "Q", "K"].includes(cardValue)) {
return 10;
}

return Number(cardValue);
}

// The line below allows us to load the getCardValue function into tests in other files.
Expand All @@ -40,6 +71,13 @@ function assertEquals(actualOutput, targetOutput) {
// TODO: Write tests to cover all outcomes, including throwing errors for invalid cards.
// Examples:
assertEquals(getCardValue("9♠"), 9);
assertEquals(getCardValue("A♠"), 11);
assertEquals(getCardValue("J♠"), 10);
assertEquals(getCardValue("K♠"), 10);
assertEquals(getCardValue("Q♠"), 10);
assertEquals(getCardValue("2♠"), 2);
assertEquals(getCardValue("5♠"), 5);
assertEquals(getCardValue("10♠"), 10);

// Handling invalid cards
try {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,42 @@ test(`should return "Acute angle" when (0 < angle < 90)`, () => {
expect(getAngleType(1)).toEqual("Acute angle");
expect(getAngleType(45)).toEqual("Acute angle");
expect(getAngleType(89)).toEqual("Acute angle");
expect(getAngleType(95)).not.toEqual("Acute angle");
});
test(`should return "Right angle" when angle is 90)`, () => {
// Test various acute angles, including boundary cases
expect(getAngleType(90)).toEqual("Right angle");
expect(getAngleType(45)).not.toEqual("Right angle");
expect(getAngleType(99)).not.toEqual("Right angle");
});

test(`should return "Obtuse angle" when (90 < angle < 180)`, () => {
// Test various acute angles, including boundary cases
expect(getAngleType(90)).not.toEqual("Obtuse angle");
expect(getAngleType(100)).toEqual("Obtuse angle");
expect(getAngleType(180)).not.toEqual("Obtuse angle");
expect(getAngleType(200)).not.toEqual("Obtuse angle");
});

test(`should return "Straight angle" when (angle is 180)`, () => {
// Test various acute angles, including boundary cases
expect(getAngleType(179)).not.toEqual("Straight angle");
expect(getAngleType(180)).toEqual("Straight angle");
expect(getAngleType(181)).not.toEqual("Straight angle");
});
test(`should return "Reflex angle" when (180 < angle < 360)`, () => {
// Test various acute angles, including boundary cases
expect(getAngleType(179)).not.toEqual("Reflex angle");
expect(getAngleType(371)).not.toEqual("Reflex angle");
expect(getAngleType(200)).toEqual("Reflex angle");
});

test(`should return 'Invalid angle' when angle <= 0 or angle >=360 `, () => {
// Test invalid inputs
expect(getAngleType(-1)).toEqual("Invalid angle");
expect(getAngleType(0)).toEqual("Invalid angle");
expect(getAngleType(360)).toEqual("Invalid angle");
expect(getAngleType(400)).toEqual("Invalid angle");
});

// Case 2: Right angle
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,31 @@
// We will use the same function, but write tests for it using Jest in this file.
const isProperFraction = require("../implement/2-is-proper-fraction");

// TODO: Write tests in Jest syntax to cover all combinations of positives, negatives, zeros, and other categories.

// Special case: numerator is zero
test(`should return false when denominator is zero`, () => {
expect(isProperFraction(-1, 0)).toEqual(false);
expect(isProperFraction(0, 0)).toEqual(false);
expect(isProperFraction(1, 0)).toEqual(false);
});

test(`should return true when numerator is zero`, () => {
expect(isProperFraction(0, -1)).toEqual(true);
expect(isProperFraction(0, 100)).toEqual(true);
});

test(`should return false when |numerator| > |denominator|`, () => {
expect(isProperFraction(-3, -2)).toEqual(false);
expect(isProperFraction(3, 2)).toEqual(false);
expect(isProperFraction(-3, 2)).toEqual(false);
});

test(`should return false when |numerator| == |denominator|`, () => {
expect(isProperFraction(-2, -2)).toEqual(false);
expect(isProperFraction(2, 2)).toEqual(false);
expect(isProperFraction(-2, 2)).toEqual(false);
});

test(`should return true when |numerator| < |denominator|`, () => {
expect(isProperFraction(2, 3)).toEqual(true);
expect(isProperFraction(-3, -4)).toEqual(true);
expect(isProperFraction(-2, 3)).toEqual(true);
});
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,27 @@ test(`Should return 11 when given an ace card`, () => {
// Number Cards (2-10)
// Face Cards (J, Q, K)
// Invalid Cards
test(`Should return 10 when given a K, Q or J card`, () => {
expect(getCardValue("K♠")).toEqual(10);
expect(getCardValue("Q♠")).toEqual(10);
expect(getCardValue("J♠")).toEqual(10);
});

test(`Should return the number of the card given a number card`, () => {
expect(getCardValue("10♠")).toEqual(10);
expect(getCardValue("2♠")).toEqual(2);
expect(getCardValue("3♠")).toEqual(3);
});

test(`Should throw an error if invalid card`, () => {
expect(() => {
getCardValue("2😬");
}).toThrow();
expect(() => {
getCardValue("22♠");
}).toThrow();
});

// 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

Loading