Skip to content
Open
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,27 @@
// Then, write the next test! :) Go through this process until all the cases are implemented

function getAngleType(angle) {
if (angle === 90) {
if (angle < 0 || angle >= 360) {
return "Invalid angle";
} else if (angle === 90) {
return "Right angle";
} else if (angle < 90) {
return "Acute angle";
} else if (angle > 90 && angle < 180) {
return "Obtuse angle";
} else if (angle === 180) {
return "Straight angle";
} else if (angle > 180 && angle < 360) {
return "Reflex angle";
} else {
return "Invalid angle";
}
}


// Run the tests, work out what Case 2 is testing, and implement the required code here.
// Then keep going for the other cases, one at a time.
}


// The line below allows us to load the getAngleType function into tests in other files.
// This will be useful in the "rewrite tests with jest" step.
Expand Down Expand Up @@ -50,14 +65,16 @@ assertEquals(acute, "Acute angle");
// When the angle is greater than 90 degrees and less than 180 degrees,
// Then the function should return "Obtuse angle"
const obtuse = getAngleType(120);
// ====> write your test here, and then add a line to pass the test in the function above
assertEquals(obtuse, "Obtuse angle");

// Case 4: Identify Straight Angles:
// When the angle is exactly 180 degrees,
// Then the function should return "Straight angle"
// ====> write your test here, and then add a line to pass the test in the function above
const straight = getAngleType(180);
assertEquals(straight, "Straight angle");

// Case 5: Identify Reflex Angles:
// When the angle is greater than 180 degrees and less than 360 degrees,
// Then the function should return "Reflex angle"
// ====> write your test here, and then add a line to pass the test in the function above
const reflex = getAngleType(270);
assertEquals(reflex, "Reflex angle");
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,7 @@
// write one test at a time, and make it pass, build your solution up methodically

function isProperFraction(numerator, denominator) {
if (numerator < denominator) {
return true;
}
return Math.abs(numerator) < Math.abs(denominator);
}

// The line below allows us to load the isProperFraction function into tests in other files.
Expand Down Expand Up @@ -46,14 +44,34 @@ assertEquals(improperFraction, false);
// target output: true
// Explanation: The fraction -4/7 is a proper fraction because the absolute value of the numerator (4) is less than the denominator (7). The function should return true.
const negativeFraction = isProperFraction(-4, 7);
// ====> complete with your assertion
assertEquals(negativeFraction, true);

// Equal Numerator and Denominator check:
// Input: numerator = 3, denominator = 3
// target output: false
// Explanation: The fraction 3/3 is not a proper fraction because the numerator is equal to the denominator. The function should return false.
const equalFraction = isProperFraction(3, 3);
// ====> complete with your assertion
assertEquals(equalFraction, false);

// Stretch:
// What other scenarios could you test for?
// Zero Numerator check:
// Input: numerator = 0, denominator = 5
// target output: true
// Explanation: The fraction 0/5 is a proper fraction because the numerator (0) is less than the denominator (5). The function should return true.
const zeroNumerator = isProperFraction(0, 5);
assertEquals(zeroNumerator, true);

// Negative Numerator check:
// Input: numerator = -3, denominator = 4
// target output: true
// Explanation: The fraction -3/4 is a proper fraction because the absolute value of numerator (3) is less than denominator (4)
const negativeNumerator = isProperFraction(-3, 4);
assertEquals(negativeNumerator, true);

// Equal Values check:
// Input: numerator = 7, denominator = 7
// target output: false
// Explanation: The fraction 7/7 is NOT a proper fraction because the numerator equals the denominator (not less than)
const equalValues = isProperFraction(7, 7);
assertEquals(equalValues, false);
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,23 @@
// write one test at a time, and make it pass, build your solution up methodically
// just make one change at a time -- don't rush -- programmers are deep and careful thinkers
function getCardValue(card) {
let rank = card.slice(0, -1);

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

}

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

const num = parseInt(rank, 10);
if (num >= 2 && num <= 10) {
return num;
}
throw new Error("Invalid card rank.")

}

// The line below allows us to load the getCardValue function into tests in other files.
Expand Down Expand Up @@ -39,19 +53,35 @@ assertEquals(aceofSpades, 11);
// When the function is called with such a card,
// Then it should return the numeric value corresponding to the rank (e.g., "5" should return 5).
const fiveofHearts = getCardValue("5♥");
// ====> write your test here, and then add a line to pass the test in the function above
assertEquals(fiveofHearts, 5);

// Handle Face Cards (J, Q, K):
// Given a card with a rank of "10," "J," "Q," or "K",
// When the function is called with such a card,
// Then it should return the value 10, as these cards are worth 10 points each in blackjack.
const cardOfJ = getCardValue("J♥");
assertEquals(cardOfJ, 10);
const cardOfQ = getCardValue("Q♠");
assertEquals(cardOfQ, 10);
const cardOfK = getCardValue("K♠");
assertEquals(cardOfK, 10);
const cardOf10 = getCardValue("10♣");
assertEquals(cardOf10, 10);


// Handle Ace (A):
// Given a card with a rank of "A",
// When the function is called with an Ace,
// Then it should, by default, assume the Ace is worth 11 points, which is a common rule in blackjack.
const aceOfHeart = getCardValue("A♥");
assertEquals(aceOfHeart, 11);

// Handle Invalid Cards:
// Given a card with an invalid rank (neither a number nor a recognized face card),
// When the function is called with such a card,
// Then it should throw an error indicating "Invalid card rank."
try {
assertEquals(getCardValue("X♥"), "Invalid card rank");
} catch (error) {
console.log(error.message);
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,15 +12,35 @@ test("should identify right angle (90°)", () => {
// Case 2: Identify Acute Angles:
// When the angle is less than 90 degrees,
// Then the function should return "Acute angle"
test("should identify acute angle (<90°)", () => {
expect(getAngleType(45)).toEqual("Acute angle");
});

// Case 3: Identify Obtuse Angles:
// When the angle is greater than 90 degrees and less than 180 degrees,
// Then the function should return "Obtuse angle"
test("should identify obtuse angle (>90° and <180°)", () => {
expect(getAngleType(120)).toEqual("Obtuse angle");
});

// Case 4: Identify Straight Angles:
// When the angle is exactly 180 degrees,
// Then the function should return "Straight angle"
test("should identify straight angle (180°)", () => {
expect(getAngleType(180)).toEqual("Straight angle");
});

// Case 5: Identify Reflex Angles:
// When the angle is greater than 180 degrees and less than 360 degrees,
// Then the function should return "Reflex angle"
test("should identify reflex angle (>180° and <360°)", () => {
expect(getAngleType(270)).toEqual("Reflex angle");
});

// Additional test: Identify Invalid Angle:
// When the angle is less than 0 degrees or greater than or equal to 360 degrees,
// Then the function should return "Invalid angle"
test("should identify invalid angle (<0° or >=360°)", () => {
expect(getAngleType(-10)).toEqual("Invalid angle");
expect(getAngleType(360)).toEqual("Invalid angle");
});
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,28 @@ const isProperFraction = require("../implement/2-is-proper-fraction");

test("should return true for a proper fraction", () => {
expect(isProperFraction(2, 3)).toEqual(true);
});
});

// Case 2: Identify Improper Fractions:
test("should return false for improper fraction", () => {
expect(isProperFraction(5, 2)).toEqual(false);
});

// Case 3: Identify Negative Fractions:
test("should return true for negative fraction", () => {
expect(isProperFraction(-4, 7)).toEqual(true);
});

// Case 4: Identify Equal Numerator and Denominator:
test("should return false for Equal Numerator fraction", () => {
expect(isProperFraction(3, 3)).toEqual(false);
});

// Improper fractions as decimals
test('1.5 should not be proper (3/2)', () => {
expect(isProperFraction(1.5)).toBe(false);
});

test('2.25 should not be proper (9/4)', () => {
expect(isProperFraction(2.25)).toBe(false);
});
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,40 @@ test("should return 11 for Ace of Spades", () => {
});

// Case 2: Handle Number Cards (2-10):
test("should return correct value for number cards", () => {
const fiveHeart = getCardValue("5♥");
expect(fiveHeart).toEqual(5);
});

// Case 3: Handle Face Cards (J, Q, K):
test("Case 3: Handle Face Card (J)", () => {
const cardOfJ = getCardValue("J♥");
expect(cardOfJ).toEqual(10);
});
test("Case 3: Handle Face Cards (Q)", () => {
const cardOfQ = getCardValue("Q♠");
expect(cardOfQ).toEqual(10);
});
test("Case 3: Handle Face Cards (K)", () => {
const cardOfK = getCardValue("K♠");
expect(cardOfK).toEqual(10);
});

// Case 4: Handle Ace (A):
test("Case 4: Handle Face Cards (A)", () => {
const aceOfHeart = getCardValue("A♥");
expect(aceOfHeart).toEqual(11);
});

// Case 5: Handle Invalid Cards:
test("Case 5: Handle Invalid Cards", () => {
expect(() => {
getCardValue("21♠");
}).toThrow("Invalid card rank");
});

test("Case 6: Handle card with invalid rank", () => {
expect(() => {
getCardValue("ZC");
}).toThrow("Invalid card rank");
});
Loading