diff --git a/Sprint-3/1-key-implement/1-get-angle-type.js b/Sprint-3/1-key-implement/1-get-angle-type.js index 08d1f0cba..4bffb4319 100644 --- a/Sprint-3/1-key-implement/1-get-angle-type.js +++ b/Sprint-3/1-key-implement/1-get-angle-type.js @@ -10,6 +10,10 @@ function getAngleType(angle) { if (angle === 90) return "Right angle"; // read to the end, complete line 36, then pass your test here + else if (angle<90) return "Acute angle" + else if (angle>90 && angle<180) return "Obtuse angle" + else if (angle === 180) return "Straight angle"; + else if (angle>180) return "Reflex angle"; } // we're going to use this helper function to make our assertions easier to read @@ -44,13 +48,18 @@ 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 \ No newline at end of file +// ====> write your test here, and then add a line to pass the test in the function above +const reflex = getAngleType(220); +assertEquals(reflex,"Reflex angle"); \ No newline at end of file diff --git a/Sprint-3/1-key-implement/2-is-proper-fraction.js b/Sprint-3/1-key-implement/2-is-proper-fraction.js index 91583e941..29239e2bc 100644 --- a/Sprint-3/1-key-implement/2-is-proper-fraction.js +++ b/Sprint-3/1-key-implement/2-is-proper-fraction.js @@ -6,12 +6,27 @@ // the first test and first case is written for you // complete the rest of the tests and cases // write one test at a time, and make it pass, build your solution up methodically +/* +I fixed this code below ,with a better version of it. +function isProperFraction(numerator, denominator) { + if (numerator < denominator) return true; + else if (numerator > denominator) return false; // Improper Fraction check + else if (numerator < 0 && denominator > numerator) + return true; // Negative Fraction check + else if (numerator === denominator) return false; //equalFraction + //down here are part of the Stretch goals + else if (numerator === 0) return true; //Proper fraction + else if (denominator === 0) return false; //Invalid input + else if (numerator < 0 && denominator < 0 && numerator > denominator) + return true; //Negative cancellation +}*/ function isProperFraction(numerator, denominator) { - if (numerator < denominator) return true; + if (denominator === 0) return false; //Invalid fraction(division by zero) + if (Math.abs(numerator) < Math.abs(denominator)) return true; //Proper fraction check + return false; // Otherwise, it's an improper fraction } -// here's our helper again function assertEquals(actualOutput, targetOutput) { console.assert( actualOutput === targetOutput, @@ -19,35 +34,13 @@ function assertEquals(actualOutput, targetOutput) { ); } -// Acceptance criteria: - -// 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. -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. -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. -const negativeFraction = isProperFraction(-4, 7); -// ====> 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); -// ====> complete with your assertion - -// Stretch: -// What other scenarios could you test for? +//Test Cases +assertEquals(isProperFraction(2, 3), true); //proper fraction +assertEquals(isProperFraction(5, 2), false);//improper Fraction +assertEquals(isProperFraction(-4, 7), true);// negative Proper Fraction +assertEquals(isProperFraction(3, 3), false);// equal Numerator and Denominator +assertEquals(isProperFraction(0, 3), true);// numerator is 0 +assertEquals(isProperFraction(1, 0), false);// denominator is 0 +assertEquals(isProperFraction(-2, -4), true);// both Numerator and Denominator are negative +assertEquals(isProperFraction(-5, 3), false);// improper Negative Fraction +assertEquals(isProperFraction(-7, 2), false);// numerator larger but negative \ No newline at end of file diff --git a/Sprint-3/1-key-implement/3-get-card-value.js b/Sprint-3/1-key-implement/3-get-card-value.js index aa1cc9f90..da7410c76 100644 --- a/Sprint-3/1-key-implement/3-get-card-value.js +++ b/Sprint-3/1-key-implement/3-get-card-value.js @@ -8,7 +8,12 @@ // 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.slice(0, -1); if (rank === "A") return 11; + else if (rank>="2" && rank<="9") return Number(rank); + else if (rank==="10" || rank==="J" || rank==="Q" || rank==="K") return 10; + else return "Invalid card rank"; + } // You need to write assertions for your function to check it works in different cases @@ -25,21 +30,22 @@ 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♥"); // ====> 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 blackJack = getCardValue("10") +assertEquals(blackJack, 10); // Handle Ace (A): // Given a card with a rank of "A", // When the function is called with an Ace, @@ -49,3 +55,6 @@ const fiveofHearts = getCardValue("5♥"); // 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 invalidSampleForTest = getCardValue("22"); +assertEquals(invalidSampleForTest, "Invalid card rank.") + diff --git a/Sprint-3/2-mandatory-rewrite/1-get-angle-type.js b/Sprint-3/2-mandatory-rewrite/1-get-angle-type.js index d61254bd7..eda832761 100644 --- a/Sprint-3/2-mandatory-rewrite/1-get-angle-type.js +++ b/Sprint-3/2-mandatory-rewrite/1-get-angle-type.js @@ -1,7 +1,10 @@ function getAngleType(angle) { if (angle === 90) return "Right angle"; // replace with your completed function from key-implement - + else if (angle<90) return "Acute angle" + else if (angle>90 && angle<180) return "Obtuse angle" + else if (angle === 180) return "Straight angle"; + else if (angle>180) return "Reflex angle"; } diff --git a/Sprint-3/2-mandatory-rewrite/1-get-angle-type.test.js b/Sprint-3/2-mandatory-rewrite/1-get-angle-type.test.js index b62827b7c..d6727fb7f 100644 --- a/Sprint-3/2-mandatory-rewrite/1-get-angle-type.test.js +++ b/Sprint-3/2-mandatory-rewrite/1-get-angle-type.test.js @@ -4,21 +4,23 @@ 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("this test should identify any Acute Angles (less than 90°)", () => { + expect(getAngleType(75)).toEqual("Acute angle"); +}); + + +test("this test should identify any obtuse Angles (angles between 90 and 180 degrees)", () => { + expect(getAngleType(125)).toEqual("Obtuse angle"); +}); + + +test("should identify any Straight angles(180 degrees)", () => { + expect(getAngleType(180)).toEqual("Straight 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" -// Case 4: Identify Straight Angles: -// When the angle is exactly 180 degrees, -// Then the function should return "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("this test should identify any Reflex Angles (angles between 180 and 360 degrees)", () => { + expect(getAngleType(200)).toEqual("Reflex angle"); +}); \ No newline at end of file diff --git a/Sprint-3/2-mandatory-rewrite/2-is-proper-fraction.js b/Sprint-3/2-mandatory-rewrite/2-is-proper-fraction.js index 9836fe398..3c3a4bb26 100644 --- a/Sprint-3/2-mandatory-rewrite/2-is-proper-fraction.js +++ b/Sprint-3/2-mandatory-rewrite/2-is-proper-fraction.js @@ -1,6 +1,13 @@ function isProperFraction(numerator, denominator) { if (numerator < denominator) return true; // add your completed function from key-implement here + else if (numerator > denominator) return false; // Improper Fraction check + else if (numerator<0 && denominator>numerator) return true;// Negative Fraction check + else if (numerator===denominator) return false;//equalFraction + //down here are part of the Stretch goals + else if (numerator === 0 ) return true; //Proper fraction + else if (denominator === 0) return false; //Invalid input + else if (numerator < 0 && denominator < 0 && numerator > denominator) return true; //Negative cancellation } module.exports = isProperFraction; \ No newline at end of file diff --git a/Sprint-3/2-mandatory-rewrite/2-is-proper-fraction.test.js b/Sprint-3/2-mandatory-rewrite/2-is-proper-fraction.test.js index ff1cc8173..b57f26cb8 100644 --- a/Sprint-3/2-mandatory-rewrite/2-is-proper-fraction.test.js +++ b/Sprint-3/2-mandatory-rewrite/2-is-proper-fraction.test.js @@ -5,7 +5,16 @@ test("should return true for a proper fraction", () => { }); // Case 2: Identify Improper Fractions: +test("should return false for an Improper fraction", () => { + expect(isProperFraction(3, 2)).toEqual(false); +}); // Case 3: Identify Negative Fractions: +test("should return true for Negative Fraction", () => { + expect(isProperFraction(-2, 3)).toEqual(true); +}); // Case 4: Identify Equal Numerator and Denominator: +test("should return false for a Fraction with equal numerator and denominator", () => { + expect(isProperFraction(3, 3)).toEqual(false); +}); diff --git a/Sprint-3/2-mandatory-rewrite/3-get-card-value.js b/Sprint-3/2-mandatory-rewrite/3-get-card-value.js index 0d95d3736..9d3e987b3 100644 --- a/Sprint-3/2-mandatory-rewrite/3-get-card-value.js +++ b/Sprint-3/2-mandatory-rewrite/3-get-card-value.js @@ -1,5 +1,8 @@ function getCardValue(card) { - // replace with your code from key-implement - return 11; + let rank = card.slice(0, -1); + if (rank === "A") return 11; + else if (rank>="2" && rank<="9") return Number(rank); + else if (rank==="10" || rank==="J" || rank==="Q" || rank==="K") return 10; + else return "Invalid card rank"; } module.exports = getCardValue; \ No newline at end of file diff --git a/Sprint-3/2-mandatory-rewrite/3-get-card-value.test.js b/Sprint-3/2-mandatory-rewrite/3-get-card-value.test.js index 03a8e2f34..b95e9e83c 100644 --- a/Sprint-3/2-mandatory-rewrite/3-get-card-value.test.js +++ b/Sprint-3/2-mandatory-rewrite/3-get-card-value.test.js @@ -1,11 +1,27 @@ const getCardValue = require("./3-get-card-value"); test("should return 11 for Ace of Spades", () => { - const aceofSpades = getCardValue("A♠"); - expect(aceofSpades).toEqual(11); + const aceOfSpades = getCardValue("A♠"); + expect(aceOfSpades).toEqual(11); }); // Case 2: Handle Number Cards (2-10): +test("should return 5 for 5 of Spades", () => { + const aceOfSpades = getCardValue("5♠"); + expect(aceOfSpades).toEqual(5); + }); // Case 3: Handle Face Cards (J, Q, K): +test("should return 10 for Q of Spades", () => { + const aceOfSpades = getCardValue("Q♠"); + expect(aceOfSpades).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 rank for Invalid Inputs", () => { + const aceOfSpades = getCardValue("M♠"); + expect(aceOfSpades).toEqual("Invalid card rank"); + }); diff --git a/Sprint-3/3-mandatory-practice/implement/count.js b/Sprint-3/3-mandatory-practice/implement/count.js index fce249650..86c0175c1 100644 --- a/Sprint-3/3-mandatory-practice/implement/count.js +++ b/Sprint-3/3-mandatory-practice/implement/count.js @@ -1,5 +1,6 @@ function countChar(stringOfCharacters, findCharacter) { - return 5 + let splitArr = stringOfCharacters.split(findCharacter); + return splitArr.length-1; } module.exports = countChar; \ No newline at end of file diff --git a/Sprint-3/3-mandatory-practice/implement/count.test.js b/Sprint-3/3-mandatory-practice/implement/count.test.js index 42baf4b4b..0d2d6bc77 100644 --- a/Sprint-3/3-mandatory-practice/implement/count.test.js +++ b/Sprint-3/3-mandatory-practice/implement/count.test.js @@ -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 count multiple occurrences of a character", () => { + const str = "abcdefghjkl"; + const char = "z"; + const count = countChar(str, char); + expect(count).toEqual(0); +}); \ No newline at end of file diff --git a/Sprint-3/3-mandatory-practice/implement/get-ordinal-number.js b/Sprint-3/3-mandatory-practice/implement/get-ordinal-number.js index 24f528b0d..773d034e1 100644 --- a/Sprint-3/3-mandatory-practice/implement/get-ordinal-number.js +++ b/Sprint-3/3-mandatory-practice/implement/get-ordinal-number.js @@ -1,5 +1,9 @@ function getOrdinalNumber(num) { - return "1st"; + if(num ===1 ) return "1st"; + else if(num === 2 ) return "2nd"; + else if(num === 3 ) return "3rd"; + else return num + "th"; + } -module.exports = getOrdinalNumber; \ No newline at end of file +module.exports = getOrdinalNumber; diff --git a/Sprint-3/3-mandatory-practice/implement/get-ordinal-number.test.js b/Sprint-3/3-mandatory-practice/implement/get-ordinal-number.test.js index 6d55dfbb4..cfe615e40 100644 --- a/Sprint-3/3-mandatory-practice/implement/get-ordinal-number.test.js +++ b/Sprint-3/3-mandatory-practice/implement/get-ordinal-number.test.js @@ -7,7 +7,15 @@ const getOrdinalNumber = require("./get-ordinal-number"); // 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 '4th' for 4", () => { + expect(getOrdinalNumber(4)).toEqual("4th"); +}); \ No newline at end of file diff --git a/Sprint-3/3-mandatory-practice/implement/repeat.js b/Sprint-3/3-mandatory-practice/implement/repeat.js index 621f9bd35..d853a6e9a 100644 --- a/Sprint-3/3-mandatory-practice/implement/repeat.js +++ b/Sprint-3/3-mandatory-practice/implement/repeat.js @@ -1,5 +1,15 @@ -function repeat() { - return "hellohellohello"; +function repeat(strToRepeat, howMuchRep) { + if (!Number.isInteger(howMuchRep)) { + return "Float values are invalid"; + } + if (howMuchRep < 0) { + return "Negative Counts are not valid"; + } + return strToRepeat.repeat(howMuchRep); } -module.exports = repeat; \ No newline at end of file +module.exports = repeat; + + + +module.exports = repeat; diff --git a/Sprint-3/3-mandatory-practice/implement/repeat.test.js b/Sprint-3/3-mandatory-practice/implement/repeat.test.js index 8a4ab42ef..6befc9cc3 100644 --- a/Sprint-3/3-mandatory-practice/implement/repeat.test.js +++ b/Sprint-3/3-mandatory-practice/implement/repeat.test.js @@ -20,13 +20,37 @@ test("should repeat the string count times", () => { // Given a target string str and a count equal to 1, // 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 repeat the string count times", () => { + const str = "hello"; + const count = 1; + const repeatedStr = repeat(str, count); + expect(repeatedStr).toEqual("hello"); + }); // 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 repeat the string 0 times", () => { + const str = "hello"; + 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 repeat the string count times", () => { + const str = "hello"; + const count = -3; + const repeatedStr = repeat(str, count); + expect(repeatedStr).toEqual("Negative Counts are not valid"); + }); +test("should repeat the string count times", () => { + const str = "hello"; + const count = 2.5; + const repeatedStr = repeat(str, count); + expect(repeatedStr).toEqual("Negative Counts are not valid"); + }); \ No newline at end of file diff --git a/Sprint-3/4-stretch-investigate/cc-number-validator.js b/Sprint-3/4-stretch-investigate/cc-number-validator.js new file mode 100644 index 000000000..c2accc0e9 --- /dev/null +++ b/Sprint-3/4-stretch-investigate/cc-number-validator.js @@ -0,0 +1,40 @@ +function crCardNumberValidator(cardNumber){ + if (typeof cardNumber === "number"){ + cardNumber = cardNumber.toString(); + } //here i check for data type if it is number i changed it to string not to loss zero at the begining of the password since a number + //starting with zero is treated without the zero. then now i will check the type if it is string + if(typeof cardNumber !== "string"){ + return false; + } + if(cardNumber.length !== 16){ //i am checking if my credit card length is 16 if not return false. + return false; + } + //here i check if cardNumber isnot a number and if its content is empty return false. + if (isNaN(Number(cardNumber)) || cardNumber.trim() === "") return false; + + let sum = 0 ; + let uniqueDigits= new Set(); //i use this to create a new set of unique digits + let lastDigit= Number(cardNumber[cardNumber.length-1]); //to get the last digit + //for all characters of cardNumber i add each digits to the sum and i added my digits to my new set uniqueDigits. + for(let char of cardNumber){ + let digit = Number(char); + sum += digit; + uniqueDigits.add(digit); + } + if(uniqueDigits.size < 2){ + return false; + }//this checks if there are at least 2 different digits + if(lastDigit % 2 !== 0){ + return false; + } + if (sum<=16){ + return false; + } + +} +// tests +// Test cases +console.log(crCardNumberValidator("9939737788480000")); //true +console.log(crCardNumberValidator("1111111111111110")); //false since sum is less than 16 +console.log(crCardNumberValidator("1234567890123456")); //true +console.log(crCardNumberValidator("3333333333333333")); //false since i provide only one unique digit \ No newline at end of file diff --git a/Sprint-3/4-stretch-investigate/find.js b/Sprint-3/4-stretch-investigate/find.js index c7e79a2f2..9dd94b4ee 100644 --- a/Sprint-3/4-stretch-investigate/find.js +++ b/Sprint-3/4-stretch-investigate/find.js @@ -20,6 +20,11 @@ console.log(find("code your future", "z")); // Pay particular attention to the following: // a) How the index variable updates during the call to find +//the index variable starts from 0 and updates within the while loop until it reaches str.length value with an increment 1 (index ++) +//the update continues as long as it didn't find a char in str on that specific index. if it finds the character it immediately returns that index and stops the function. // b) What is the if statement used to check +//it is used to check if the character is found in that specific index(i.e str[index]) while looping using the while loop. // c) Why is index++ being used? +//it is used to change/increment the value of index so the while loop executes for all index values // d) What is the condition index < str.length used for? +//it is used to loop from initial value of the index as long as it is less than length of the string/str. diff --git a/Sprint-3/4-stretch-investigate/password-validator.js b/Sprint-3/4-stretch-investigate/password-validator.js index b55d527db..4bb7186a6 100644 --- a/Sprint-3/4-stretch-investigate/password-validator.js +++ b/Sprint-3/4-stretch-investigate/password-validator.js @@ -1,6 +1,35 @@ -function passwordValidator(password) { - return password.length < 5 ? false : true -} +//I have used AI help for this problem i cant write this kind of function at this time but i understand how it is working +//i will have a look for details with a mentor . +//i included my own comment on how it is working +function passwordValidator(password, previousPasswords = []) { // here we have a fun with an input password and arrays of previous passwords + // Here i checked for its length to be greater than 5 ,if it is less than 5 it return false + if (password.length < 5) return false; +// i defined this cases to use them in my condition latter + let hasUpperCase = false; //initially we set all the conditions to be false and later we will check if they are true + let hasLowerCase = false; + let hasNumber = false; + let hasSpecialChar = false; + const specialChars = "!#$%.*&"; //here i define the special characters. + + // Loop through each character in the password + for (let char of password) { //for this loop for each char in the string password + if (char >= "A" && char <= "Z") hasUpperCase = true; //if the char is between all upper cases update the value of hasUpperCase to true which means the value is accepted. + else if (char >= "a" && char <= "z") hasLowerCase = true; + else if (char >= "0" && char <= "9") hasNumber = true; + else if (specialChars.includes(char)) hasSpecialChar = true; //if specialChars includes the char update hasSpecialChar to true + } + + // I check if all conditions are met i.e. if they are not met just return false. + if (!hasUpperCase || !hasLowerCase || !hasNumber || !hasSpecialChar) { + return false; + } + // if the array of previous password contain our new password return false + if (previousPasswords.includes(password)) { + return false; + } + + return true; // Password is valid +} -module.exports = passwordValidator; \ No newline at end of file +module.exports = passwordValidator; diff --git a/Sprint-3/4-stretch-investigate/password-validator.test.js b/Sprint-3/4-stretch-investigate/password-validator.test.js index 8fa3089d6..10e150431 100644 --- a/Sprint-3/4-stretch-investigate/password-validator.test.js +++ b/Sprint-3/4-stretch-investigate/password-validator.test.js @@ -23,4 +23,14 @@ test("password has at least 5 characters", () => { // Assert expect(result).toEqual(true); } +); + +test("password has at least 5 valid characters", () => { + // Arrange + const password = "123Az@5"; + // Act + const result = isValidPassword(password); + // Assert + expect(result).toEqual(true); +} ); \ No newline at end of file