Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
16 commits
Select commit Hold shift + click to select a range
0ae5f4b
updated getAngleType to check for acute angle
alexandru-pocovnicu Jan 30, 2026
dc90d42
wrote test to check for obtuse angle and implemented the function to …
alexandru-pocovnicu Jan 30, 2026
34d3bc5
Implement logic to identify straight angles in getAngleType function
alexandru-pocovnicu Jan 30, 2026
023c553
Implement logic to identify reflex angles in getAngleType function
alexandru-pocovnicu Jan 30, 2026
c17f6c3
Add tests for obtuse angles in getAngleType function
alexandru-pocovnicu Jan 30, 2026
c5b9e52
added additional tests to check for a properr fraction and implemente…
alexandru-pocovnicu Jan 30, 2026
9f3ed4f
assigned rang with the value of card[0]
alexandru-pocovnicu Jan 31, 2026
366621c
Implement logic to handle number and face cards in getCardValue function
alexandru-pocovnicu Jan 31, 2026
35c3083
Refactor isProperFraction function to handle NaN inputs and improve l…
alexandru-pocovnicu Feb 1, 2026
83a3f77
wrote tests to check cards validity and implemented the function to p…
alexandru-pocovnicu Feb 1, 2026
6c0b2c0
Add tests for angle type identification in getAngleType function
alexandru-pocovnicu Feb 1, 2026
79fd501
Add validation for card input in getCardValue function
alexandru-pocovnicu Feb 1, 2026
7049b83
Fix isProperFraction function to correctly handle equal absolute valu…
alexandru-pocovnicu Feb 1, 2026
0492fb4
Add additional test cases for isProperFraction function to cover impr…
alexandru-pocovnicu Feb 1, 2026
0efeb51
Refactor getCardValue function to improve error handling and code rea…
alexandru-pocovnicu Feb 1, 2026
cac4339
wrote jest tests for the getCardValue function
alexandru-pocovnicu Feb 2, 2026
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 @@ -11,8 +11,20 @@ function getAngleType(angle) {
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.
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"
}
// 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.
Expand Down Expand Up @@ -49,15 +61,26 @@ assertEquals(acute, "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"
const obtuse = getAngleType(120);
const obtuse = getAngleType(100);
assertEquals(obtuse, "Obtuse angle");

const obtuse1 = getAngleType(170);
assertEquals(obtuse1, "Obtuse angle");
// ====> write your test here, and then add a line to pass the test in the function above

// 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
// ====> write your test here, and then add a line to pass the test in the function above
const reflex = getAngleType(210);
assertEquals(reflex, "Reflex angle");

const reflex2 = getAngleType(350);
assertEquals(reflex2, "Reflex angle");
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,20 @@
// 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;
}
if (
Math.abs(numerator) > Math.abs(denominator) ||
Math.abs(numerator) === Math.abs(denominator)
) {
return false;
}
if (typeof numerator === "number" && typeof denominator === "number") {
return true;
}

}

// The line below allows us to load the isProperFraction function into tests in other files.
Expand Down Expand Up @@ -46,14 +57,38 @@ 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);
assertEquals(negativeFraction, true);
// ====> complete with your assertion

// 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);
assertEquals(equalFraction, false);
// ====> complete with your assertion

// Stretch:
// What other scenarios could you test for?

//Both Numerator and Denominator are negative check:
// Input: numerator = -4, denominator = -3
// target output: false
// Explanation:The fraction -4/-3 is not a proper fraction because the absolute value o the numerator is bigger than the absolute value of the denominator
const bothNegativeFraction = isProperFraction(-4, -3);
assertEquals(bothNegativeFraction, false);

//Numerator is bigger than the negative Denominator's absolute value:
// Input: numerator = 4, denominator = -9
// target output: true
// Explanation:The fraction 4/-9 is a proper fraction because the absolute value of the denominator is smaller than the the value of the numerator
const negativeDenominator=isProperFraction(4,-9)
assertEquals(negativeDenominator,true)





//got stuck on this one, don't know how to test
const notANumber=isProperFraction("a",2)
assertEquals(notANumber,false);
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,22 @@
// complete the rest of the tests and cases
// 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
const assert = require("assert");
function getCardValue(card) {
if (!/[♠♣♦♥]$/.test(card)) {
throw new Error("Invalid, card does not have a face");
}
let rank = card.slice(0, -1);
if (rank === "A") {
return 11;
}
if (rank >= 2 && rank <= 9) {
return +rank;
}
if (/^(10|J|Q|K)$/.test(rank)) {
return 10;
}
throw new Error("Invalid card rank");
}

// The line below allows us to load the getCardValue function into tests in other files.
Expand All @@ -31,27 +43,43 @@ function assertEquals(actualOutput, targetOutput) {
// 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),
// When the function getCardValue is called with this card string as input,
// Then it should return the numerical card value
const aceofSpades = getCardValue("A♠");
assertEquals(aceofSpades, 11);
const aceOfSpades = getCardValue("A♠");
assertEquals(aceOfSpades, 11);

// Handle Number Cards (2-10):
// Given a card with a rank between "2" and "9",
// 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♥");
const fiveOfHearts = getCardValue("5♥");
assertEquals(fiveOfHearts, 5);
// ====> write your test here, and then add a line to pass the test in the function above

// 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 faceCards = getCardValue("K♠");
assertEquals(faceCards, 10);
const faceCards1 = getCardValue("10♠");
assertEquals(faceCards1, 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 aceOfSpades1 = getCardValue("A♠");
assertEquals(aceOfSpades1, 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."

assert.throws(() => getCardValue("L♠"), Error, /Invalid card rank/);
assert.throws(() => getCardValue(), Error, /Invalid card rank/);
assert.throws(() => getCardValue(["A♠"]), Error, /Invalid card rank/);
assert.throws(
() => getCardValue("A2"),
Error,
/Invalid, card does not have a face/
);
Original file line number Diff line number Diff line change
Expand Up @@ -12,15 +12,27 @@ 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 (angle<90°)", () => {
expect(getAngleType(80)).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<angle<180)", () => {
expect(getAngleType(110)).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 (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<angle<360)", () => {
expect(getAngleType(210)).toEqual("Reflex angle");
});
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,19 @@ test("should return true for a proper fraction", () => {
});

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

// Case 3: Identify Negative Fractions:
test("should return true when the absolute value of the numerator is smaller than the absolute value of the denominator",()=>{
expect(isProperFraction(-2,9)).toEqual(true);
expect(isProperFraction(2,-9)).toEqual(true)
expect(isProperFraction(-2,-9)).toEqual(true)
})

// Case 4: Identify Equal Numerator and Denominator:
test("should return false for equal numerator and denominator ",()=>{
expect(isProperFraction(1,1)).toEqual(false)
expect(isProperFraction(-1, 1)).toEqual(false);
})
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,46 @@
// We will use the same function, but write tests for it using Jest in this file.
const getCardValue = require("../implement/3-get-card-value");

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


// Case 2: Handle Number Cards (2-10):
test("should return the number on the card ", () => {
expect(getCardValue("10♠")).toEqual(10);
expect(getCardValue("8♠")).toEqual(8);
expect(getCardValue("2♠")).toEqual(2);
});

// Case 3: Handle Face Cards (J, Q, K):
test("should return 10 for ( J or Q or K) of spades",()=>{
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 Ace of Spades", () => {
const aceOfSpades = getCardValue("A♠");
expect(aceOfSpades).toEqual(11);
});

// Case 5: Handle Invalid Cards:
test("should return 'Invalid, card does not have a face' for '5'",()=>{
expect(()=>{getCardValue("5")}).toThrow("Invalid, card does not have a face");
});

test("should return 'Invalid, card does not have a face' for 'AQ'", () => {
expect(() => {
getCardValue("AQ");
}).toThrow("Invalid, card does not have a face");
});

test("should return 'Invalid card rank' for 1 of spades",()=>{
expect(() => {
getCardValue("1♠");
}).toThrow("Invalid card rank");
});

test("should return 'Invalid card rank' for 15 of spades", () => {
expect(() => {
getCardValue("15♠");
}).toThrow("Invalid card rank");
});