Skip to content
Open
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,97 @@ test("Classifies right angles", () => {
const right = getAngleType(90);
assert.equal(right, "Right angle");
});

test("Classifies Acute angles", () => {
const right = getAngleType(50);
assert.equal(right, "Acute angle");
});

test("Classifies Acute angles", () => {
const right = getAngleType(60.3);
assert.equal(right, "Acute angle");
});

test("Classifies Acute angles", () => {
const right = getAngleType(89.9);
assert.equal(right, "Acute angle");
});
test("Classifies Acute angles", () => {
const right = getAngleType(1);
assert.equal(right, "Acute angle");
});
test("Classifies Acute angles", () => {
const right = getAngleType(33.33);
assert.equal(right, "Acute angle");
});

test("Classifies Acute angles", () => {
const right = getAngleType(0.2);
assert.equal(right, "Acute angle");
});

test("Classifies Obtuse angles", () => {
const right = getAngleType(90.1);
assert.equal(right, "Obtuse angle");
});
test("Classifies Obtuse angles", () => {
const right = getAngleType(100.99);
assert.equal(right, "Obtuse angle");
});

test("Classifies Obtuse angles", () => {
const right = getAngleType(115);
assert.equal(right, "Obtuse angle");
});
test("Classifies Obtuse angles", () => {
const right = getAngleType(135);
assert.equal(right, "Obtuse angle");
});
test("Classifies Obtuse angles", () => {
const right = getAngleType(150);
assert.equal(right, "Obtuse angle");
});
test("Classifies Obtuse angles", () => {
const right = getAngleType(179);
assert.equal(right, "Obtuse angle");
});
test("Classifies Straight angle", () => {
const right = getAngleType(180);
assert.equal(right, "Straight angle");
});
test("Classifies Reflex angle", () => {
const right = getAngleType(190);
assert.equal(right, "Reflex angle");
});
test("Classifies Straight angle", () => {
const right = getAngleType(220);
assert.equal(right, "Reflex angle");
});
test("Classifies Reflex angle", () => {
const right = getAngleType(250);
assert.equal(right, "Reflex angle");
});
test("Classifies Reflex angle", () => {
const right = getAngleType(359);
assert.equal(right, "Reflex angle");
});
test("Classifies Invalid angle", () => {
const right = getAngleType(360);
assert.equal(right, "Invalid angle");
});
test("Classifies Invalid angle", () => {
const right = getAngleType(0);
assert.equal(right, "Invalid angle");
});
test("Classifies Invalid angle", () => {
const right = getAngleType(370);
assert.equal(right, "Invalid angle");
});
test("Classifies Invalid angle", () => {
const right = getAngleType(10000.01);
assert.equal(right, "Invalid angle");
});
test("Classifies Invalid angle", () => {
const right = getAngleType(-56);
assert.equal(right, "Invalid angle");
});
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import assert from "node:assert";

import test from "node:test";

import { isProperFraction } from "../implement/2-is-proper-fraction.js";
Expand All @@ -7,6 +8,21 @@ import { isProperFraction } from "../implement/2-is-proper-fraction.js";
// What combinations of numerators and denominators should you test?

test("Basic proper fraction", () => {
// Example: 1/2 is a proper fraction
assert.equal(isProperFraction(1, 2), true);
});
test("Basic proper fraction", () => {
assert.equal(isProperFraction(3, 5), true);
});
test("Basic proper fraction", () => {
assert.equal(isProperFraction(2, 2), false);
});
test("Basic proper fraction", () => {
assert.equal(isProperFraction(5, 3), false);
});
test("Basic proper fraction", () => {
assert.equal(isProperFraction(0, 2), true);
});
test("Basic proper fraction", () => {
// Example: 1/2 is a proper fraction
assert.equal(isProperFraction(1, 0), false);
});
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,92 @@ import test from "node:test";

import { getCardValue } from "../implement/3-get-card-value.js";

// TODO: Write tests to cover all outcomes, including throwing errors for invalid cards.

// Valid cards
test("Valid single-digit card", () => {
assert.equal(getCardValue("9♠"), 9);
});

test("Valid lowest number card", () => {
assert.equal(getCardValue("2♠"), 2);
});

test("Valid double-digit card", () => {
assert.equal(getCardValue("10♠"), 10);
});

test("Valid Ace card", () => {
assert.equal(getCardValue("A♠"), 11);
});

test("Valid Jack card", () => {
assert.equal(getCardValue("J♠"), 10);
});

test("Valid Queen card", () => {
assert.equal(getCardValue("Q♦"), 10);
});

test("Valid King card", () => {
assert.equal(getCardValue("K♥"), 10);
});

test("Valid card with clubs suit", () => {
assert.equal(getCardValue("5♣"), 5);
});

test("Arbitrary non-card string", () => {
assert.throws(() => getCardValue("invalid"), /Expected a number followed by a suit, but got "invalid"/, "Expected clear error");
assert.throws(
() => getCardValue("invalid"),
/Expected a number followed by a suit, but got "invalid"/,
"Expected clear error"
);
});

test("Card with no suit", () => {
assert.throws(
() => getCardValue("A"),
/Expected a number followed by a suit, but got "A"/
);
});

test("Invalid suit", () => {
assert.throws(
() => getCardValue("5X"),
/Expected a number followed by a suit, but got "5X"/
);
});

test("Invalid rank", () => {
assert.throws(
() => getCardValue("Z♠"),
/Expected a number followed by a suit, but got "Z♠"/
);
});

// TODO: What other invalid card cases can you think of?
test("Rank too low", () => {
assert.throws(
() => getCardValue("1♥"),
/Expected a number followed by a suit, but got "1♥"/
);
});

test("Rank too high", () => {
assert.throws(
() => getCardValue("11♦"),
/Expected a number followed by a suit, but got "11♦"/
);
});

test("Empty string", () => {
assert.throws(
() => getCardValue(""),
/Expected a number followed by a suit, but got ""/
);
});

test("Suit before rank", () => {
assert.throws(
() => getCardValue("♠A"),
/Expected a number followed by a suit, but got "♠A"/
);
});
14 changes: 13 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,17 @@
// execute the code to ensure all tests pass.

export function getAngleType(angle) {
// TODO: Implement this function
if (angle > 0 && angle < 90) {
return `Acute angle`;
} else if (angle == 90) {
return `Right 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`;
}
}
18 changes: 17 additions & 1 deletion implement-and-rewrite-tests/implement/2-is-proper-fraction.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,5 +14,21 @@
// execute the code to ensure all tests pass.

export function isProperFraction(numerator, denominator) {
// TODO: Implement this function
if (denominator === 0) {
return false;
}

if (numerator < 0) {
numerator = -numerator;
}

if (denominator < 0) {
denominator = -denominator;
}

if (numerator < denominator) {
return true;
} else {
return false;
}
}
28 changes: 27 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,31 @@
// execute the code to ensure all tests pass.

export function getCardValue(card) {
// TODO: Implement this function
const errorMessage = `Expected a number followed by a suit, but got "${card}"`;

if (typeof card !== "string") {
throw new Error(errorMessage);
}

const value = card.slice(0, -1);
const suit = card.slice(-1);

if (!["♠", "♥", "♦", "♣"].includes(suit)) {
throw new Error(errorMessage);
}

if (value === "A") {
return 11;
} else if (value === "J") {
return 10;
} else if (value === "Q") {
return 10;
} else if (value === "K") {
return 10;
} else if (["2", "3", "4", "5", "6", "7", "8", "9", "10"].includes(value)) {
return Number(value);
} else {
throw new Error(errorMessage);
}
}
console.log(getCardValue("10♠"));
Loading
Loading