Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,31 @@ test("Classifies right angles", () => {
const right = getAngleType(90);
assert.equal(right, "Right angle");
});
test("Classifies acute angles", () => {
assert.equal(getAngleType(1), "Acute angle");
assert.equal(getAngleType(45), "Acute angle");
assert.equal(getAngleType(89), "Acute angle");
});

test("Classifies obtuse angles", () => {
assert.equal(getAngleType(91), "Obtuse angle");
assert.equal(getAngleType(135), "Obtuse angle");
assert.equal(getAngleType(179), "Obtuse angle");
});

test("Classifies straight angles", () => {
assert.equal(getAngleType(180), "Straight angle");
});

test("Classifies reflex angles", () => {
assert.equal(getAngleType(181), "Reflex angle");
assert.equal(getAngleType(270), "Reflex angle");
assert.equal(getAngleType(359), "Reflex angle");
});

test("Classifies invalid angles", () => {
assert.equal(getAngleType(0), "Invalid angle");
assert.equal(getAngleType(-45), "Invalid angle");
assert.equal(getAngleType(360), "Invalid angle");
assert.equal(getAngleType(500), "Invalid angle");
});
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,33 @@ test("Basic proper fraction", () => {
// Example: 1/2 is a proper fraction
assert.equal(isProperFraction(1, 2), true);
});
test("Zero numerator is a proper fraction", () => {
assert.equal(isProperFraction(0, 5), true);
});

test("Numerator smaller than denominator is proper", () => {
assert.equal(isProperFraction(3, 4), true);
assert.equal(isProperFraction(99, 100), true);
});

test("Numerator equal to denominator is not proper", () => {
assert.equal(isProperFraction(1, 1), false);
assert.equal(isProperFraction(5, 5), false);
});

test("Numerator larger than denominator is not proper", () => {
assert.equal(isProperFraction(5, 2), false);
assert.equal(isProperFraction(7, 3), false);
});

test("Negative numerator or denominator uses the absolute values", () => {
assert.equal(isProperFraction(-1, 2), true);
assert.equal(isProperFraction(1, -2), true);
assert.equal(isProperFraction(-1, -2), true);
assert.equal(isProperFraction(-3, 2), false);
assert.equal(isProperFraction(3, -2), false);
});

test("Zero denominator is not a proper fraction", () => {
assert.equal(isProperFraction(1, 0), false);
});
Original file line number Diff line number Diff line change
Expand Up @@ -14,3 +14,44 @@ test("Arbitrary non-card string", () => {
});

// TODO: What other invalid card cases can you think of?
test("Aces are worth 11", () => {
assert.equal(getCardValue("A♠"), 11);
assert.equal(getCardValue("A♥"), 11);
assert.equal(getCardValue("A♦"), 11);
assert.equal(getCardValue("A♣"), 11);
});

test("Number cards are worth their number", () => {
assert.equal(getCardValue("2♠"), 2);
assert.equal(getCardValue("5♦"), 5);
assert.equal(getCardValue("9♣"), 9);
});

test("A 10 card has a two-digit rank and is worth 10", () => {
assert.equal(getCardValue("10♥"), 10);
});

test("Face cards are worth 10", () => {
assert.equal(getCardValue("J♠"), 10);
assert.equal(getCardValue("Q♥"), 10);
assert.equal(getCardValue("K♦"), 10);
});

test("Missing rank or suit throws an error", () => {
assert.throws(() => getCardValue(""));
assert.throws(() => getCardValue("A"));
assert.throws(() => getCardValue("♠"));
assert.throws(() => getCardValue("10"));
});

test("Invalid rank throws an error", () => {
assert.throws(() => getCardValue("0♠"));
assert.throws(() => getCardValue("1♠"));
assert.throws(() => getCardValue("11♠"));
assert.throws(() => getCardValue("Z♠"));
});

test("Invalid suit throws an error", () => {
assert.throws(() => getCardValue("5x"));
assert.throws(() => getCardValue("A$"));
});
7 changes: 6 additions & 1 deletion implement-and-rewrite-tests/implement/1-get-angle-type.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,5 +17,10 @@
// execute the code to ensure all tests pass.

export 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";
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,5 +14,5 @@
// execute the code to ensure all tests pass.

export function isProperFraction(numerator, denominator) {
// TODO: Implement this function
return Math.abs(numerator) < Math.abs(denominator);
}
13 changes: 12 additions & 1 deletion implement-and-rewrite-tests/implement/3-get-card-value.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,5 +24,16 @@
// execute the code to ensure all tests pass.

export function getCardValue(card) {
// TODO: Implement this function
const rank = card.slice(0, -1);
const suit = card.slice(-1);

const validRanks = ["A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"];
const validSuits = ["♠", "♥", "♦", "♣"];

if (!validRanks.includes(rank) || !validSuits.includes(suit)) {
throw new Error(`Expected a number followed by a suit, but got "${card}"`); }

if (rank === "A") return 11;
if (["J", "Q", "K"].includes(rank)) return 10;
return Number(rank);
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,33 @@ test(`should return "Acute angle" when (0 < angle < 90)`, () => {
});

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

// Case 3: Obtuse angles
test(`should return "Obtuse angle" when (90 < angle < 180)`, () => {
expect(getAngleType(91)).toEqual("Obtuse angle");
expect(getAngleType(135)).toEqual("Obtuse angle");
expect(getAngleType(179)).toEqual("Obtuse angle");
});

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

// Case 5: Reflex angles
test(`should return "Reflex angle" when (180 < angle < 360)`, () => {
expect(getAngleType(181)).toEqual("Reflex angle");
expect(getAngleType(270)).toEqual("Reflex angle");
expect(getAngleType(359)).toEqual("Reflex angle");
});

// Case 6: Invalid angles
test(`should return "Invalid angle" when (angle <= 0 or angle >= 360)`, () => {
expect(getAngleType(0)).toEqual("Invalid angle");
expect(getAngleType(-45)).toEqual("Invalid angle");
expect(getAngleType(360)).toEqual("Invalid angle");
expect(getAngleType(500)).toEqual("Invalid angle");
});
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,34 @@ import { isProperFraction } from "../implement/2-is-proper-fraction.js";
test(`should return false when denominator is zero`, () => {
expect(isProperFraction(1, 0)).toEqual(false);
});
// Special case: numerator is zero
test(`should return true when numerator is zero`, () => {
expect(isProperFraction(0, 5)).toEqual(true);
});

// Numerator smaller than denominator
test(`should return true when numerator is smaller than denominator`, () => {
expect(isProperFraction(3, 4)).toEqual(true);
expect(isProperFraction(99, 100)).toEqual(true);
});

// Numerator equal to denominator
test(`should return false when numerator equals denominator`, () => {
expect(isProperFraction(1, 1)).toEqual(false);
expect(isProperFraction(5, 5)).toEqual(false);
});

// Numerator larger than denominator
test(`should return false when numerator is larger than denominator`, () => {
expect(isProperFraction(5, 2)).toEqual(false);
expect(isProperFraction(7, 3)).toEqual(false);
});

// Negative numbers
test(`should compare absolute values when either number is negative`, () => {
expect(isProperFraction(-1, 2)).toEqual(true);
expect(isProperFraction(1, -2)).toEqual(true);
expect(isProperFraction(-1, -2)).toEqual(true);
expect(isProperFraction(-3, 2)).toEqual(false);
expect(isProperFraction(3, -2)).toEqual(false);
});
Original file line number Diff line number Diff line change
Expand Up @@ -16,3 +16,53 @@ test(`Should return 11 when given an ace card`, () => {
// please refer to the Jest documentation:
// https://jestjs.io/docs/expect#tothrowerror

// Case 1 (continued): every suit of ace
test(`Should return 11 for an ace of any suit`, () => {
expect(getCardValue("A♥")).toEqual(11);
expect(getCardValue("A♦")).toEqual(11);
expect(getCardValue("A♣")).toEqual(11);
});

// Number cards (2-10)
test(`Should return the number for cards 2 to 9`, () => {
expect(getCardValue("2♠")).toEqual(2);
expect(getCardValue("5♦")).toEqual(5);
expect(getCardValue("9♣")).toEqual(9);
});

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

// Face cards (J, Q, K)
test(`Should return 10 for face cards`, () => {
expect(getCardValue("J♠")).toEqual(10);
expect(getCardValue("Q♥")).toEqual(10);
expect(getCardValue("K♦")).toEqual(10);
});

// Invalid cards
test(`Should throw an error when the rank or suit is missing`, () => {
expect(() => getCardValue("")).toThrow();
expect(() => getCardValue("A")).toThrow();
expect(() => getCardValue("♠")).toThrow();
expect(() => getCardValue("10")).toThrow();
});

test(`Should throw an error for an invalid rank`, () => {
expect(() => getCardValue("0♠")).toThrow();
expect(() => getCardValue("1♠")).toThrow();
expect(() => getCardValue("11♠")).toThrow();
expect(() => getCardValue("Z♠")).toThrow();
});

test(`Should throw an error for an invalid suit`, () => {
expect(() => getCardValue("5x")).toThrow();
expect(() => getCardValue("A$")).toThrow();
});

test(`Should throw an error with a helpful message`, () => {
expect(() => getCardValue("invalid")).toThrow(
/Expected a number followed by a suit/
);
});
Loading