Skip to content
Open
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,19 @@ function getAngleType(angle) {
return "Right 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.
// Then keep going for the other cases, one at a time.
if (angle < 90) {
return "Acute angle";
}
if (angle > 90 && angle < 180) {
return "Obtuse angle";
}
if (angle === 180) {
return "Straight angle";
}
if (angle > 180 && angle < 360) {
return "Reflex angle";
}
}

// The line below allows us to load the getAngleType function into tests in other files.
Expand Down Expand Up @@ -51,13 +63,18 @@ assertEquals(acute, "Acute angle");
// 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/line");

// 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
// ====> 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,10 @@
// write one test at a time, and make it pass, build your solution up methodically

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

// The line below allows us to load the isProperFraction function into tests in other files.
Expand Down Expand Up @@ -47,13 +48,34 @@ assertEquals(improperFraction, false);
// 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?
// What other scenarios could you test for? Zero numerator => always proper
const zeroNumerator = isProperFraction(0, 10);
assertEquals(zeroNumerator, true);

//Negarive denominator => use absoluet values
const negativeDenominator = isProperFraction(3, -5);
assertEquals(negativeDenominator, true);

//Both negatives
const bothNegative = isProperFraction(-2, -3);
assertEquals(bothNegative, true);

//fractions like 8/8 should be false
const improperEqual = isProperFraction(9, 9);
assertEquals(improperEqual, false);

//zero denominator - maths says undefined so can return false or throw error
const zeroDenominator = isProperFraction(1, 0);
assertEquals(zeroDenominator, false);

Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +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) {
if (rank === "A") {
return 11;
const rank = card.slice(0, -1);

// Numeric cards 2–10
if (["2", "3", "4", "5", "6", "7", "8", "9", "10"].includes(rank)) {
return Number(rank);
}

// Face cards
if (["J", "Q", "K"].includes(rank)) return 10;

// Ace
if (rank === "A") return 11;

throw new Error("Invalid card rank");
}


// The line below allows us to load the getCardValue function into tests in other files.
// This will be useful in the "rewrite tests with jest" step.
module.exports = getCardValue;
Expand Down Expand Up @@ -40,11 +52,24 @@ assertEquals(aceofSpades, 11);
// 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 jack = getCardValue("J♣");
assertEquals(jack, 10);

const queen = getCardValue("Q♦");
assertEquals(queen, 10);

const king = getCardValue("K♥");
assertEquals(king, 10);

const ten = getCardValue("10♠");
assertEquals(ten, 10);


// Handle Ace (A):
// Given a card with a rank of "A",
Expand All @@ -55,3 +80,10 @@ const fiveofHearts = getCardValue("5♥");
// 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 {
getCardValue("Z♠");
console.assert(false, "Expected an error for invalid rank");
} catch (e) {
assertEquals(e.message, "Invalid card rank");
}

Original file line number Diff line number Diff line change
Expand Up @@ -12,15 +12,34 @@ 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 angles (< 90°)", () => {
expect(getAngleType(30)).toEqual("Acute angle");
expect(getAngleType(1)).toEqual("Acute angle");
expect(getAngleType(89)).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 angles (90° < angle < 180°)", () => {
expect(getAngleType(120)).toEqual("Obtuse angle");
expect(getAngleType(100)).toEqual("Obtuse angle");
expect(getAngleType(179)).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 angles (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 angles (180° < angle < 360°)", () => {
expect(getAngleType(200)).toEqual("Reflex angle");
expect(getAngleType(250)).toEqual("Reflex angle");
expect(getAngleType(359)).toEqual("Reflex angle");
});
Original file line number Diff line number Diff line change
@@ -1,13 +1,23 @@
// This statement loads the isProperFraction function you wrote in the implement directory.
// We will use the same function, but write tests for it using Jest in this file.
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 fractions (numerator >= denominator)", () => {
expect(isProperFraction(5, 2)).toEqual(false); // 5/2
expect(isProperFraction(7, 3)).toEqual(false); // 7/3
});

// Case 3: Identify Negative Fractions:
test("should correctly handle negative fractions using absolute value of numerator", () => {
expect(isProperFraction(-4, 7)).toEqual(true); // |−4| < 7 → proper
expect(isProperFraction(-5, 2)).toEqual(false); // |−5| >= 2 → improper
});

// Case 4: Identify Equal Numerator and Denominator:
test("should return false when numerator equals denominator", () => {
expect(isProperFraction(3, 3)).toEqual(false); // 3/3
expect(isProperFraction(-6, -6)).toEqual(false); // -6/-6
});
Original file line number Diff line number Diff line change
@@ -1,13 +1,37 @@
// This statement loads the getCardValue function you wrote in the implement directory.
// We will use the same function, but write tests for it using Jest in this file.
const getCardValue = require("../implement/3-get-card-value");

// Case 1: Ace
test("should return 11 for Ace of Spades", () => {
const aceofSpades = getCardValue("A♠");
expect(aceofSpades).toEqual(11);
});

// Case 2: Handle Number Cards (2-10):
// Case 3: Handle Face Cards (J, Q, K):
// Case 4: Handle Ace (A):
// Case 5: Handle Invalid Cards:
// Case 2: Handle Number Cards (2–10)
test("should return numeric value for number cards 2–10", () => {
expect(getCardValue("2♥")).toEqual(2);
expect(getCardValue("7♦")).toEqual(7);
expect(getCardValue("9♣")).toEqual(9);
expect(getCardValue("10♠")).toEqual(10);
});

// Case 3: Handle Face Cards (J, Q, K)
test("should return 10 for face cards J, Q, K", () => {
expect(getCardValue("J♠")).toEqual(10);
expect(getCardValue("Q♦")).toEqual(10);
expect(getCardValue("K♥")).toEqual(10);
});

// Case 4: Handle Ace (A)
test("should return 11 for any Ace", () => {
expect(getCardValue("A♣")).toEqual(11);
expect(getCardValue("A♦")).toEqual(11);
expect(getCardValue("A♥")).toEqual(11);
});

// Case 5: Handle Invalid Cards
test("should throw an error for invalid card rank", () => {
expect(() => getCardValue("Z♠")).toThrow("Invalid card rank");
expect(() => getCardValue("1♦")).toThrow("Invalid card rank");
expect(() => getCardValue("XY")).toThrow("Invalid card rank");
});