Skip to content
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,17 @@
function getAngleType(angle) {
if (angle === 90) {
return "Right angle";
} else if (angle === 45) {
return "Acute angle";
} else if (angle === 120) {
return "Obtuse angle";
} else if (angle === 180) {
return "Straight angle";
} else if (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.
// 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 @@ -51,13 +59,17 @@ assertEquals(acute, "Acute angle");
// 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
// ====> write your test here, and then add a line to pass the test in the function above
const reflex = getAngleType(240);
assertEquals(reflex, "Reflex angle");
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,9 @@
// 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;
}
} else return false;
}

// The line below allows us to load the isProperFraction function into tests in other files.
Expand Down Expand Up @@ -46,14 +46,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?
const doublenegativeFraction = isProperFraction(-3, -5);
assertEquals(doublenegativeFraction, true);

const zeronumeratorFraction = isProperFraction(0, 4);
assertEquals(zeronumeratorFraction, true);
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,17 @@
// 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) {
let rank = card.charAt(0);
if (rank === "A") {
return 11;
} else if (rank >= "2" && rank <= "9") {
return parseInt(rank);
} else if (rank === "K" || rank === "Q" || rank === "J") {
return 10;
} else if (rank === "1") {
return 10;
}
return "Invalid card rank.";
}

// The line below allows us to load the getCardValue function into tests in other files.
Expand Down Expand Up @@ -39,19 +47,26 @@ 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);

// 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("10" || "J" || "Q" || "K");
assertEquals(faceCards, 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 anyAce = getCardValue("A");
assertEquals(anyAce, 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."

const invalidCard = getCardValue("z");
assertEquals(invalidCard, "Invalid card rank.");
Original file line number Diff line number Diff line change
Expand Up @@ -6,21 +6,18 @@ 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°)", () => {
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°)", () => {
expect(getAngleType(240)).toEqual("Reflex angle");
});
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,14 @@ 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", () => {
expect(isProperFraction(5, 2)).toEqual(false);
});

// Case 3: Identify Negative Fractions:
test("should return true for an negative fraction", () => {
expect(isProperFraction(-4, 7)).toEqual(true);
});

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

// Case 2: Handle Number Cards (2-10):
// Case 3: Handle Face Cards (J, Q, K):
test("should return 5 for 5 of Hearts", () => {
const fiveofHearts = getCardValue("5♥");
expect(fiveofHearts).toEqual(5);
});

test("should return 10 for Face Cards", () => {
const faceCards = getCardValue("10" || "J" || "Q" || "K");
expect(faceCards).toEqual(10);
});

// Case 4: Handle Ace (A):
test("should return 11 for Aces", () => {
const anyAce = getCardValue("A");
expect(anyAce).toEqual(11);
});

// Case 5: Handle Invalid Cards:
test("should return 'Invalid card rank.' for invalid cards", () => {
const invalidCard = getCardValue("z");
expect(invalidCard).toEqual("Invalid card rank.");
});
2 changes: 1 addition & 1 deletion Sprint-3/2-practice-tdd/count.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
function countChar(stringOfCharacters, findCharacter) {
return 5
return stringOfCharacters.split(findCharacter).length - 1;
}

module.exports = countChar;
6 changes: 6 additions & 0 deletions Sprint-3/2-practice-tdd/count.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,3 +22,9 @@ 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 when there are occurrences of a character", () => {
const str = "aaaaa";
const char = "b";
const count = countChar(str, char);
expect(count).toEqual(0);
});
20 changes: 19 additions & 1 deletion Sprint-3/2-practice-tdd/get-ordinal-number.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,23 @@
function getOrdinalNumber(num) {
return "1st";
if (num % 100 >= 11 && num % 100 <= 13) {
return `${num}th`;
}
const lastDigit = num % 10;
let suffix = "th";

switch (lastDigit) {
case 1:
suffix = "st";
break;
case 2:
suffix = "nd";
break;
case 3:
suffix = "rd";
break;
}

return `${num}${suffix}`;
}

module.exports = getOrdinalNumber;
28 changes: 24 additions & 4 deletions Sprint-3/2-practice-tdd/get-ordinal-number.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,30 @@ const getOrdinalNumber = require("./get-ordinal-number");
// continue testing and implementing getOrdinalNumber for additional cases
// Write your tests using Jest - remember to run your tests often for continual feedback

// Case 1: Identify the ordinal number for 1
// When the number is 1,
// Then the function should return "1st"

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

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

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

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

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

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

test("should return '221st' for 221", () => {
expect(getOrdinalNumber(221)).toEqual("221st");
});
8 changes: 6 additions & 2 deletions Sprint-3/2-practice-tdd/repeat-str.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
function repeatStr() {
return "hellohellohello";
function repeatStr(str, count) {
if (count < 0) {
return "Error, negative integer";
}

return str.repeat(count);
}

module.exports = repeatStr;
30 changes: 18 additions & 12 deletions Sprint-3/2-practice-tdd/repeat-str.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,17 +16,23 @@ test("should repeat the string count times", () => {
expect(repeatedStr).toEqual("hellohellohello");
});

// case: handle Count of 1:
// Given a target string str and a count equal to 1,
// When the repeatStr 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 without repetition", () => {
const str = "hello";
const count = 1;
const repeatedStr = repeatStr(str, count);
expect(repeatedStr).toEqual("hello");
});

// case: Handle Count of 0:
// Given a target string str and a count equal to 0,
// When the repeatStr 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 if count is 0", () => {
const str = "hello";
const count = 0;
const repeatedStr = repeatStr(str, count);
expect(repeatedStr).toEqual("");
});

// case: Negative Count:
// Given a target string str and a negative integer count,
// When the repeatStr 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 if count is negative", () => {
const str = "hello";
const count = -1;
const repeatedStr = repeatStr(str, count);
expect(repeatedStr).toEqual("Error, negative integer");
});
24 changes: 24 additions & 0 deletions Sprint-3/prep/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
<script defer src="script.js"></script>
</head>
<body>
<section>
<h3>Character limit</h3>
<label for="comment-input"
>Please enter your comment in the text area below
</label>
<textarea
id="comment-input"
name="comment-input"
rows="5"
maxlength="200"
></textarea>
<p id="character-limit-info"></p>
</section>
</body>
</html>
15 changes: 15 additions & 0 deletions Sprint-3/prep/script alt.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
const textarea = document.querySelector("textarea");
const remainingCharacters = textarea.maxLength - textarea.value.length;
console.log(textarea.maxLength);

const charactersLeftP = document.querySelector("#character-limit-info");
charactersLeftP.innerText = `You have ${remainingCharacters} characters remaining`;



textarea.addEventListener("keyup",
() => const remainingCharacters = textarea.maxLength - textarea.value.length;
const charactersLeftP = document.querySelector("#character-limit-info");
charactersLeftP.innerText = `You have ${remainingCharacters} characters remaining`;
console.log(remainingCharacters);
);
12 changes: 12 additions & 0 deletions Sprint-3/prep/script.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
const textarea = document.querySelector("textarea");

updateCharacterLimit();

function updateCharacterLimit() {
const remainingCharacters = textarea.maxLength - textarea.value.length;
const charactersLeftP = document.querySelector("#character-limit-info");
charactersLeftP.innerText = `You have ${remainingCharacters} characters remaining`;
console.log(remainingCharacters);
}

textarea.addEventListener("keyup", updateCharacterLimit);