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

function getAngleType(angle) {
// Case 1: Identify Right Angles
if (angle === 90) {
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.

// Case 2: Identify Acute Angles
if (angle < 90) {
return "Acute angle";
}

// Case 3: Identify Obtuse Angles
if (angle > 90 && angle < 180) {
return "Obtuse angle";
}

// Case 4: Identify Straight Angles
if (angle === 180) {
return "Straight angle";
}

// Case 5: Identify Reflex Angles
if (angle > 180 && angle < 360) {
return "Reflex angle";
}

// Optional: handle invalid angles
return "Invalid angle";
}

// The line below allows us to load the getAngleType function into tests in other files.
Expand Down Expand Up @@ -50,14 +72,18 @@ 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");

console.log("All tests ran! If no errors, all passed.");
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,11 @@
// write one test at a time, and make it pass, build your solution up methodically

function isProperFraction(numerator, denominator) {
if (numerator < denominator) {
// Proper fraction if absolute numerator is less than denominator
if (Math.abs(numerator) < denominator) {
return true;
} else {
return false;
}
}

Expand Down Expand Up @@ -46,14 +49,19 @@ 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?
// Example: numerator = 0, denominator = 5 (0/5 is a proper fraction)
const zeroNumerator = isProperFraction(0, 5);
assertEquals(zeroNumerator, true);

console.log("All tests ran! If no errors, all passed.");
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,26 @@
// 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) {
// Extract the rank (everything except the last character, which is the suit emoji)
const rank = card.slice(0, -1);

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

// Handle Face Cards (J, Q, K)
if (rank === "J" || rank === "Q" || rank === "K" || rank === "10") {
return 10;
}

// Handle Number Cards (2-9)
if (!isNaN(rank)) {
return Number(rank);
}

// Handle Invalid Cards
throw new Error("Invalid card rank.");
}

// The line below allows us to load the getCardValue function into tests in other files.
Expand All @@ -26,6 +43,7 @@ function assertEquals(actualOutput, targetOutput) {
`Expected ${actualOutput} to equal ${targetOutput}`
);
}

// Acceptance criteria:

// Given a card string in the format "A♠" (representing a card in blackjack - the last character will always be an emoji for a suit, and all characters before will be a number 2-10, or one letter of J, Q, K, A),
Expand All @@ -39,19 +57,32 @@ 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);

const tenofClubs = getCardValue("10♣");
assertEquals(tenofClubs, 10);

// Handle Face Cards (J, Q, K):
// Given a card with a rank of "10," "J," "Q," or "K",
// Given a card with a rank of "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 jackOfDiamonds = getCardValue("J♦");
assertEquals(jackOfDiamonds, 10);

const queenOfSpades = getCardValue("Q♠");
assertEquals(queenOfSpades, 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 kingOfHearts = getCardValue("K♥");
assertEquals(kingOfHearts, 10);

// 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 {
getCardValue("Z♠");
} catch (e) {
assertEquals(e.message, "Invalid card rank.");
}

console.log("All tests ran! If no errors, all passed.");
Original file line number Diff line number Diff line change
Expand Up @@ -6,21 +6,30 @@ test("should identify right angle (90°)", () => {
expect(getAngleType(90)).toEqual("Right angle");
});

// REPLACE the comments with the tests
// make your test descriptions as clear and readable as possible

// 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");
});
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,27 @@
// 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", () => {
test("should return true for a proper fraction (numerator < denominator)", () => {
expect(isProperFraction(2, 3)).toEqual(true);
});

// Case 2: Identify Improper Fractions:
// When the numerator is greater than or equal to the denominator,
// Then the function should return false
test("should return false for an improper fraction (numerator > denominator)", () => {
expect(isProperFraction(5, 2)).toEqual(false);
});

// Case 3: Identify Negative Fractions:
// When the numerator is negative but absolute value < denominator,
// Then the function should return true
test("should return true for a negative proper fraction (|numerator| < denominator)", () => {
expect(isProperFraction(-4, 7)).toEqual(true);
});

// Case 4: Identify Equal Numerator and Denominator:
// When the numerator is equal to the denominator,
// Then the function should return false
test("should return false when numerator equals denominator", () => {
expect(isProperFraction(3, 3)).toEqual(false);
});
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,32 @@ test("should return 11 for Ace of Spades", () => {
});

// Case 2: Handle Number Cards (2-10):
// When the card is a number between 2 and 10,
// Then the function should return the numeric value of the card
test("should return numeric value for number cards 2-10", () => {
expect(getCardValue("5♥")).toEqual(5);
expect(getCardValue("10♦")).toEqual(10);
});

// Case 3: Handle Face Cards (J, Q, K):
// When the card is J, Q, or K,
// Then the function should return 10
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):
// When the card is an Ace,
// Then the function should return 11
test("should return 11 for Ace cards", () => {
expect(getCardValue("A♥")).toEqual(11);
});

// Case 5: Handle Invalid Cards:
// When the card has an invalid rank,
// Then the function should throw an error
test("should throw an error for invalid cards", () => {
expect(() => getCardValue("Z♠")).toThrow("Invalid card rank.");
});