Skip to content
Closed
Show file tree
Hide file tree
Changes from 1 commit
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
9 changes: 9 additions & 0 deletions Sprint-3/1-key-implement/1-get-angle-type.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,10 @@

function getAngleType(angle) {
if (angle === 90) return "Right angle";
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";
// read to the end, complete line 36, then pass your test here
}

Expand Down Expand Up @@ -43,14 +47,19 @@ 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);
assertEquals(obtuse, "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"
const straight = getAngleType(180);
assertEquals(straight, "Straight angle");
// ====> write your test here, and then add a line to pass the test in the function above

// 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"
const reflex = getAngleType(270);
assertEquals(reflex, "Reflex angle");
// ====> write your test here, and then add a line to pass the test in the function above
45 changes: 40 additions & 5 deletions Sprint-3/1-key-implement/2-is-proper-fraction.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,11 @@
// write one test at a time, and make it pass, build your solution up methodically

function isProperFraction(numerator, denominator) {
if (numerator < denominator) return true;
// A proper fraction has a non-zero denominator,
// and the absolute value of the numerator is less than the denominator.
if (denominator === 0) return false;
return Math.abs(numerator) < Math.abs(denominator);

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What is the Math.abs function doing to our inputs?


}

// here's our helper again
Expand All @@ -24,30 +28,61 @@ function assertEquals(actualOutput, targetOutput) {
// Proper Fraction check:
// Input: numerator = 2, denominator = 3
// target output: true
// Explanation: The fraction 2/3 is a proper fraction, where the numerator is less than the denominator. The function should return true.
// Explanation: The fraction 2/3 is a proper fraction, where the numerator
// is less than the denominator. The function should return true.
const properFraction = isProperFraction(2, 3);
assertEquals(properFraction, true);

// Improper Fraction check:
// Input: numerator = 5, denominator = 2
// target output: false
// Explanation: The fraction 5/2 is an improper fraction, where the numerator is greater than or equal to the denominator. The function should return false.
// Explanation: The fraction 5/2 is an improper fraction, where the numerator
// is greater than or equal to the denominator. The function should return false.
const improperFraction = isProperFraction(5, 2);
assertEquals(improperFraction, false);

// Negative Fraction check:
// Input: numerator = -4, denominator = 7
// 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.
// 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.
// 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?
// Zero Numerator check:
// Input: numerator = 0, denominator = 5
// target output: true
// Explanation: The fraction 0/5 is a proper fraction because the numerator
// is less than the denominator. The function should return true.
const zeroNumerator = isProperFraction(0, 5);
assertEquals(zeroNumerator, true);

// Zero Denominator check:
// Input: numerator = 3, denominator = 0
// target output: false
// Explanation: A fraction with a zero denominator is undefined,
// so the function should return false.
const zeroDenominator = isProperFraction(3, 0);
assertEquals(zeroDenominator, false);

// Negative Denominator check:
// Input: numerator = 3, denominator = -5
// target output: true
// Explanation: The fraction 3/-5 is a proper fraction because the absolute
// value of the numerator is less than the absolute value of the denominator.
// The function should return true.
const negativeDenominator = isProperFraction(3, -5);
assertEquals(negativeDenominator, true);
41 changes: 41 additions & 0 deletions Sprint-3/1-key-implement/3-get-card-value.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,22 @@
// 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 from the card string
const rank = card.slice(0, -1);
// If the rank is "A", return 11
if (rank === "A") return 11;

// If the rank is a number between "2" and "10", return its numeric value
if (["2", "3", "4", "5", "6", "7", "8", "9", "10"].includes(rank)) {
return parseInt(rank, 10); // Convert string to number

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What is the purpose of 10 in parseInt?

}

// If the rank is "J", "Q", or "K", return 10
if (["J", "Q", "K"].includes(rank)) return 10;

// If the rank is invalid, throw an error
throw new Error("Invalid card rank");

}

// You need to write assertions for your function to check it works in different cases
Expand All @@ -33,19 +48,45 @@ 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♥");
assertEquals(fiveofHearts, 5);

const twoOfClubs = getCardValue("2♣");
assertEquals(twoOfClubs, 2);

const nineOfDiamonds = getCardValue("9♦");
assertEquals(nineOfDiamonds, 9);

// ====> 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 tenOfSpades = getCardValue("10♠");
assertEquals(tenOfSpades, 10);

const jackOfDiamonds = getCardValue("J♦");
assertEquals(jackOfDiamonds, 10);

const queenOfSpades = getCardValue("Q♠");
assertEquals(queenOfSpades, 10);

const kingOfClubs = getCardValue("K♣");
assertEquals(kingOfClubs, 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 aceOfClubs = getCardValue("A♣");
assertEquals(aceOfClubs, 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."
try {
getCardValue("X♠"); // Invalid card
} catch (error) {
assertEquals(error.message, "Invalid card rank");
}
27 changes: 15 additions & 12 deletions Sprint-3/2-mandatory-rewrite/1-get-angle-type.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,18 +7,21 @@ test("should identify right angle (90°)", () => {
// 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 angles (less than 90°)", () => {
expect(getAngleType(45)).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 (greater than 90° and less than 180°)", () => {
expect(getAngleType(120)).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 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 angles (greater than 180° and less than 360°)", () => {
expect(getAngleType(200)).toEqual("Reflex angle");
expect(getAngleType(359)).toEqual("Reflex angle");
});
14 changes: 11 additions & 3 deletions Sprint-3/2-mandatory-rewrite/2-is-proper-fraction.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,16 @@ test("should return true for a proper fraction", () => {
expect(isProperFraction(2, 3)).toEqual(true);
});

// Case 2: Identify Improper Fractions:
test("should return false for an improper fraction (numerator > denominator)", () => {
expect(isProperFraction(5, 4)).toEqual(false);
});

// Case 3: Identify Negative Fractions:
test("should return false for negative fractions", () => {
expect(isProperFraction(-2, 3)).toEqual(false);
expect(isProperFraction(2, -3)).toEqual(false);
expect(isProperFraction(-2, -3)).toEqual(false);
});

// Case 4: Identify Equal Numerator and Denominator:
test("should return false when numerator equals denominator", () => {
expect(isProperFraction(3, 3)).toEqual(false);
});
40 changes: 40 additions & 0 deletions Sprint-3/2-mandatory-rewrite/3-get-card-value.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,46 @@ test("should return 11 for Ace of Spades", () => {
});

// Case 2: Handle Number Cards (2-10):
test("should return correct value for number cards (2-10)", () => {
const twoOfClubs = getCardValue("2♣");
expect(twoOfClubs).toEqual(2);

const fiveOfDiamonds = getCardValue("5♦");
expect(fiveOfDiamonds).toEqual(5);

const tenOfHearts = getCardValue("10♥");
expect(tenOfHearts).toEqual(10);
});

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

const queenOfClubs = getCardValue("Q♣");
expect(queenOfClubs).toEqual(10);

const kingOfDiamonds = getCardValue("K♦");
expect(kingOfDiamonds).toEqual(10);
});

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

const aceOfDiamonds = getCardValue("A♦");
expect(aceOfDiamonds).toEqual(11);

const aceOfHearts = getCardValue("A♥");
expect(aceOfHearts).toEqual(11);
});

// Case 5: Handle Invalid Cards:
test("should return null for invalid cards", () => {
const invalidCard = getCardValue("1♠");
expect(invalidCard).toBeNull();

const emptyCard = getCardValue("");
expect(emptyCard).toBeNull();
});
7 changes: 7 additions & 0 deletions Sprint-3/3-mandatory-practice/implement/count.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,3 +22,10 @@ test("should count multiple occurrences of a character", () => {
// And a character char that does not exist within the case-sensitive str,
// When the function is called with these inputs,
// Then it should return 0, indicating that no occurrences of the char were found in the case-sensitive str.

test("should return 0 if character does not exist in string", () => {
const str = "hello";
const char = "z";
const count = countChar(str, char);
expect(count).toEqual(0);
});
48 changes: 48 additions & 0 deletions Sprint-3/3-mandatory-practice/implement/get-ordinal-number.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,3 +11,51 @@ const getOrdinalNumber = require("./get-ordinal-number");
test("should return '1st' for 1", () => {
expect(getOrdinalNumber(1)).toEqual("1st");
});

// Case 2: Identify the ordinal number for 2
// When the number is 2,
// Then the function should return "2nd"
test("should return '2nd' for 2", () => {
expect(getOrdinalNumber(2)).toEqual("2nd");
});

// Case 3: Identify the ordinal number for 3
// When the number is 3,
// Then the function should return "3rd"
test("should return '3rd' for 3", () => {
expect(getOrdinalNumber(3)).toEqual("3rd");
});

// Case 4: Identify the ordinal number for numbers between 4 to 20
// including teens
// When the number is between 4 to 20,
// Then the function should return the appropriate ordinal number
// with "th" at the end
test("should return '13th' for 13", () => {
expect(getOrdinalNumber(13)).toEqual("13th");
});

test("should return '11th' for 11", () => {
expect(getOrdinalNumber(11)).toEqual("11th");
});

test("should return '7th' for 7", () => {
expect(getOrdinalNumber(7)).toEqual("7th");
});

// Case 5: Identify ordinal for numbers ending with 1, 2, or 3
// excluding teens
// When the number ends with 1, 2, or 3,
// Then the function should return the appropriate ordinal number
// with "st", "nd", or "rd" at the end
test("should return '21st' for 21", () => {
expect(getOrdinalNumber(21)).toEqual("21st");
});

test("should return '22nd' for 22", () => {
expect(getOrdinalNumber(22)).toEqual("22nd");
});

test("should return '23rd' for 23", () => {
expect(getOrdinalNumber(23)).toEqual("23rd");
});
20 changes: 20 additions & 0 deletions Sprint-3/3-mandatory-practice/implement/repeat.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,32 @@ test("should repeat the string count times", () => {
// When the repeat function is called with these inputs,
// Then it should return the original str without repetition, ensuring that a count of 1 results in no repetition.

test("should return the original string when count is 1", () => {
const str = "busy";
const count = 1;
const repeatedStr = repeat(str, count);
expect(repeatedStr).toEqual("busy");
});

// case: Handle Count of 0:
// Given a target string str and a count equal to 0,
// When the repeat function is called with these inputs,
// Then it should return an empty string, ensuring that a count of 0 results in an empty output.

test("should return an empty string when count is 0", () => {
const str = "you";
const count = 0;
const repeatedStr = repeat(str, count);
expect(repeatedStr).toEqual("");
});

// case: Negative Count:
// Given a target string str and a negative integer count,
// When the repeat function is called with these inputs,
// Then it should throw an error or return an appropriate error message, as negative counts are not valid.

test("should throw an error when count is negative", () => {
const str = "square";
const count = -4;
expect(() => repeat(str, count)).toThrow("Count must be a non-negative integer");
});
Loading