diff --git a/Sprint-1/1-key-exercises/1-count.js b/Sprint-1/1-key-exercises/1-count.js
index 117bcb2b6..9818641e3 100644
--- a/Sprint-1/1-key-exercises/1-count.js
+++ b/Sprint-1/1-key-exercises/1-count.js
@@ -4,3 +4,4 @@ count = count + 1;
// Line 1 is a variable declaration, creating the count variable with an initial value of 0
// Describe what line 3 is doing, in particular focus on what = is doing
+// Answer: "count + 1" is a value being assigned to the variable count and "=" is the assignement operator used to assign values to a variable
\ No newline at end of file
diff --git a/Sprint-1/Module-Structuring-and-Testing-Data b/Sprint-1/Module-Structuring-and-Testing-Data
new file mode 160000
index 000000000..9b108f242
--- /dev/null
+++ b/Sprint-1/Module-Structuring-and-Testing-Data
@@ -0,0 +1 @@
+Subproject commit 9b108f242a001dd0ad82f7d4c96bb142b00d35c2
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..c668f6cdc 100644
--- a/Sprint-3/1-key-implement/1-get-angle-type.js
+++ b/Sprint-3/1-key-implement/1-get-angle-type.js
@@ -8,10 +8,16 @@
// Then, write the next test! :) Go through this process until all the cases are implemented
function getAngleType(angle) {
- if (angle === 90) return "Right angle";
- // read to the end, complete line 36, then pass your test here
+ if (angle === 90) return "Right angle";
+ if (angle < 90 && angle > 0) 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";
+ return "Invalid angle";
}
+ // read to the end, complete line 36, then pass your test here
+
// we're going to use this helper function to make our assertions easier to read
// if the actual output matches the target output, the test will pass
function assertEquals(actualOutput, targetOutput) {
@@ -43,14 +49,20 @@ 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);
-// ====> 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
+const reflex = getAngleType(270);
+assertEquals(reflex, "Reflex angle");
+
+
+
+module.exports = getAngleType; // added export
\ 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..73c027050 100644
--- a/Sprint-3/1-key-implement/2-is-proper-fraction.js
+++ b/Sprint-3/1-key-implement/2-is-proper-fraction.js
@@ -8,17 +8,18 @@
// write one test at a time, and make it pass, build your solution up methodically
function isProperFraction(numerator, denominator) {
- if (numerator < denominator) return true;
+ return Math.abs(numerator) < Math.abs(denominator);
}
// here's our helper again
function assertEquals(actualOutput, targetOutput) {
- console.assert(
- actualOutput === targetOutput,
+ console.assert(actualOutput === targetOutput,
+
`Expected ${actualOutput} to equal ${targetOutput}`
);
}
+
// Acceptance criteria:
// Proper Fraction check:
@@ -40,14 +41,13 @@ 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?
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..fee9f76bd 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) {
- if (rank === "A") return 11;
+ const rank = card.slice(0, -1)
+
+ if (rank === "A" || rank == "A") return 11;
+ if (rank >= "2" && rank <= "9") return Number(rank);
+ if (rank === "10" || rank ==="Q"|| rank === "J" || rank === "K") return 10;
+ return "Invalid card rank";
}
// You need to write assertions for your function to check it works in different cases
@@ -32,8 +37,8 @@ assertEquals(aceofSpades, 11);
// 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♥");
-// ====> write your test here, and then add a line to pass the test in the function above
+const fiveofHearts = getCardValue("3♥");
+assertEquals(fiveofHearts, 3);
// Handle Face Cards (J, Q, K):
// Given a card with a rank of "10," "J," "Q," or "K",
@@ -48,4 +53,7 @@ const fiveofHearts = getCardValue("5♥");
// 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."
+// Then it should throw an error indicating "Invalid card rank.assertEquals(getCardValue("Q♣"), 10); // face card
+assertEquals(getCardValue("10♦"), 10); // 10
+assertEquals(getCardValue("9♠"), 9); // number card
+assertEquals(getCardValue("B♦"), "Invalid card rank"); // invalid
diff --git a/Sprint-3/1-key-implement/get-angle-type.test.js b/Sprint-3/1-key-implement/get-angle-type.test.js
new file mode 100644
index 000000000..940b66d11
--- /dev/null
+++ b/Sprint-3/1-key-implement/get-angle-type.test.js
@@ -0,0 +1,11 @@
+const getAngleType = require('./getAngleType');
+
+describe('getAngleType', () => {
+ test('returns Right angle for 90', () => {
+ expect(getAngleType(90)).toBe('Right angle');
+ });
+
+ test('returns Acute angle for 45', () => {
+ expect(getAngleType(45)).toBe('Acute angle');
+ });
+});
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..5f1020423 100644
--- a/Sprint-3/2-mandatory-rewrite/1-get-angle-type.js
+++ b/Sprint-3/2-mandatory-rewrite/1-get-angle-type.js
@@ -1,16 +1,14 @@
function getAngleType(angle) {
if (angle === 90) return "Right angle";
- // replace with your completed function from key-implement
-
+ if (angle < 90 && angle > 0) 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";
+ return "Invalid angle";
}
-
-
-
-
-
// Don't get bogged down in this detail
// Jest uses CommonJS module syntax by default as it's quite old
// We will upgrade our approach to ES6 modules in the next course module, so for now
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..4d769729e 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,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 (less than 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 (greater than 90° and less than 180°)", () => {
+ 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 (greater than 180° and less than 360°)", () => {
+ expect(getAngleType(270)).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..5271482a5 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,5 @@
function isProperFraction(numerator, denominator) {
- if (numerator < denominator) return true;
- // add your completed function from key-implement here
+ return Math.abs(numerator) < Math.abs(denominator);
}
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..9538d97be 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
@@ -4,8 +4,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 a negative proper fraction", () => {
+ expect(isProperFraction(-4, 7)).toEqual(true);
+});
-// Case 4: Identify Equal Numerator and Denominator:
+test("should return false for equal numerator and denominator", () => {
+ expect(isProperFraction(3, 3)).toEqual(false);
+});
\ No newline at end of file
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..56cc3f28c 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,11 @@
function getCardValue(card) {
- // replace with your code from key-implement
- return 11;
+ const rank = card.slice(0, -1)
+
+ if (rank === "A" || rank == "A") return 11;
+ if (rank >= "2" && rank <= "9") return Number(rank);
+ if (rank === "10" || rank ==="Q"|| rank === "J" || rank === "K") return 10;
+ return "Invalid card rank";
}
+
+
module.exports = getCardValue;
\ No newline at end of file
diff --git a/Sprint-3/3-mandatory-practice/implement/count.js b/Sprint-3/3-mandatory-practice/implement/count.js
index fce249650..e76ebbe31 100644
--- a/Sprint-3/3-mandatory-practice/implement/count.js
+++ b/Sprint-3/3-mandatory-practice/implement/count.js
@@ -1,5 +1,15 @@
function countChar(stringOfCharacters, findCharacter) {
- return 5
+ let countString = 0;
+
+ for(let i = 0; i < stringOfCharacters.length; i++) {
+ if (stringOfCharacters[i] === findCharacter) {
+ countString++;
+ }
+ }
+ return countString++;
}
-module.exports = countChar;
\ No newline at end of file
+module.exports = countChar;
+
+// how many times a charactor appears in a string
+// what are the inputs and outputs
diff --git a/Sprint-3/3-mandatory-practice/implement/count.test.js b/Sprint-3/3-mandatory-practice/implement/count.test.js
index 42baf4b4b..0bdcfe3fc 100644
--- a/Sprint-3/3-mandatory-practice/implement/count.test.js
+++ b/Sprint-3/3-mandatory-practice/implement/count.test.js
@@ -11,10 +11,10 @@ const countChar = require("./count");
// Then it should correctly count overlapping occurrences of char (e.g., 'a' appears five times in 'aaaaa').
test("should count multiple occurrences of a character", () => {
- const str = "aaaaa";
+ const str = "aaaaaaa";
const char = "a";
const count = countChar(str, char);
- expect(count).toEqual(5);
+ expect(count).toEqual(7);
});
// Scenario: No Occurrences
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..bf851dff5 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,11 @@
function getOrdinalNumber(num) {
- return "1st";
-}
+ const lastNumber = num % 10;
+ const secondLastNumber = num % 100;
+ if(secondLastNumber === 11 || secondLastNumber === 12 || secondLastNumber === 13) {
+
+ return num + "th";
+ }
+ return num + "th"; // this will return all the other number + th
+}
module.exports = getOrdinalNumber;
\ No newline at end of file
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..e05ce7fed 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
@@ -8,6 +8,22 @@ const getOrdinalNumber = require("./get-ordinal-number");
// When the number is 1,
// Then the function should return "1st"
-test("should return '1st' for 1", () => {
+ test("should return '1st' for 1", () => {
expect(getOrdinalNumber(1)).toEqual("1st");
});
+
+ test("should return '3rd' for 3rd", () => {
+ expect(getOrdinalNumber(3)).toEqual("3rd");
+ });
+
+ test("should return '10th' for 10", () => {
+ expect(getOrdinalNumber(10)).toEqual("10th");
+ });
+
+ test("should return '4th' for 4", () => {
+ expect(getOrdinalNumber(4)).toEqual("4th");
+ });
+
+ test("should return '499th' for 499", () => {
+ expect(getOrdinalNumber(499)).toEqual("499th");
+ });
\ 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..c2ec1b9e2 100644
--- a/Sprint-3/3-mandatory-practice/implement/repeat.js
+++ b/Sprint-3/3-mandatory-practice/implement/repeat.js
@@ -1,5 +1,14 @@
-function repeat() {
- return "hellohellohello";
-}
+function repeat(str, count) {
+ let repeatedStr = ""; // stores the string
+
+ if(count < 0) return "this is an invalid count";
+ if(count === 0) return "";
+ // check errors before function runs
+ for (let i = 0; i < count; i++) {
+ repeatedStr = repeatedStr + str;
+}
+ return repeatedStr;
+}
+console.log(repeat("hi there... ", 5));
module.exports = repeat;
\ No newline at end of file
diff --git a/Sprint-3/3-mandatory-practice/implement/repeat.test.js b/Sprint-3/3-mandatory-practice/implement/repeat.test.js
index 8a4ab42ef..9970478a3 100644
--- a/Sprint-3/3-mandatory-practice/implement/repeat.test.js
+++ b/Sprint-3/3-mandatory-practice/implement/repeat.test.js
@@ -11,9 +11,9 @@ const repeat = require("./repeat");
test("should repeat the string count times", () => {
const str = "hello";
- const count = 3;
+ const count = 6;
const repeatedStr = repeat(str, count);
- expect(repeatedStr).toEqual("hellohellohello");
+ expect(repeatedStr).toEqual("hellohellohellohellohellohello");
});
// case: handle Count of 1:
diff --git a/Sprint-3/coverage/clover.xml b/Sprint-3/coverage/clover.xml
new file mode 100644
index 000000000..83682c03b
--- /dev/null
+++ b/Sprint-3/coverage/clover.xml
@@ -0,0 +1,63 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Sprint-3/coverage/coverage-final.json b/Sprint-3/coverage/coverage-final.json
new file mode 100644
index 000000000..4f58e5d57
--- /dev/null
+++ b/Sprint-3/coverage/coverage-final.json
@@ -0,0 +1,8 @@
+{"C:\\CYF May\\Module-Structuring-and-Testing-Data\\Module-Structuring-and-Testing-Data\\Sprint-3\\2-mandatory-rewrite\\1-get-angle-type.js": {"path":"C:\\CYF May\\Module-Structuring-and-Testing-Data\\Module-Structuring-and-Testing-Data\\Sprint-3\\2-mandatory-rewrite\\1-get-angle-type.js","statementMap":{"0":{"start":{"line":2,"column":2},"end":{"line":2,"column":41}},"1":{"start":{"line":2,"column":20},"end":{"line":2,"column":41}},"2":{"start":{"line":3,"column":2},"end":{"line":3,"column":52}},"3":{"start":{"line":3,"column":31},"end":{"line":3,"column":52}},"4":{"start":{"line":4,"column":2},"end":{"line":4,"column":55}},"5":{"start":{"line":4,"column":33},"end":{"line":4,"column":55}},"6":{"start":{"line":5,"column":2},"end":{"line":5,"column":45}},"7":{"start":{"line":5,"column":21},"end":{"line":5,"column":45}},"8":{"start":{"line":6,"column":2},"end":{"line":6,"column":56}},"9":{"start":{"line":6,"column":34},"end":{"line":6,"column":56}},"10":{"start":{"line":7,"column":2},"end":{"line":7,"column":25}},"11":{"start":{"line":16,"column":0},"end":{"line":16,"column":30}}},"fnMap":{"0":{"name":"getAngleType","decl":{"start":{"line":1,"column":9},"end":{"line":1,"column":21}},"loc":{"start":{"line":1,"column":29},"end":{"line":8,"column":1}},"line":1}},"branchMap":{"0":{"loc":{"start":{"line":2,"column":2},"end":{"line":2,"column":41}},"type":"if","locations":[{"start":{"line":2,"column":2},"end":{"line":2,"column":41}},{"start":{},"end":{}}],"line":2},"1":{"loc":{"start":{"line":3,"column":2},"end":{"line":3,"column":52}},"type":"if","locations":[{"start":{"line":3,"column":2},"end":{"line":3,"column":52}},{"start":{},"end":{}}],"line":3},"2":{"loc":{"start":{"line":3,"column":6},"end":{"line":3,"column":29}},"type":"binary-expr","locations":[{"start":{"line":3,"column":6},"end":{"line":3,"column":16}},{"start":{"line":3,"column":20},"end":{"line":3,"column":29}}],"line":3},"3":{"loc":{"start":{"line":4,"column":2},"end":{"line":4,"column":55}},"type":"if","locations":[{"start":{"line":4,"column":2},"end":{"line":4,"column":55}},{"start":{},"end":{}}],"line":4},"4":{"loc":{"start":{"line":4,"column":6},"end":{"line":4,"column":31}},"type":"binary-expr","locations":[{"start":{"line":4,"column":6},"end":{"line":4,"column":16}},{"start":{"line":4,"column":20},"end":{"line":4,"column":31}}],"line":4},"5":{"loc":{"start":{"line":5,"column":2},"end":{"line":5,"column":45}},"type":"if","locations":[{"start":{"line":5,"column":2},"end":{"line":5,"column":45}},{"start":{},"end":{}}],"line":5},"6":{"loc":{"start":{"line":6,"column":2},"end":{"line":6,"column":56}},"type":"if","locations":[{"start":{"line":6,"column":2},"end":{"line":6,"column":56}},{"start":{},"end":{}}],"line":6},"7":{"loc":{"start":{"line":6,"column":6},"end":{"line":6,"column":32}},"type":"binary-expr","locations":[{"start":{"line":6,"column":6},"end":{"line":6,"column":17}},{"start":{"line":6,"column":21},"end":{"line":6,"column":32}}],"line":6}},"s":{"0":5,"1":1,"2":4,"3":1,"4":3,"5":1,"6":2,"7":1,"8":1,"9":1,"10":0,"11":1},"f":{"0":5},"b":{"0":[1,4],"1":[1,3],"2":[4,1],"3":[1,2],"4":[3,3],"5":[1,1],"6":[1,0],"7":[1,1]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"668fa5fc818d0937bd70e1b22276002ae0c3fb11"}
+,"C:\\CYF May\\Module-Structuring-and-Testing-Data\\Module-Structuring-and-Testing-Data\\Sprint-3\\2-mandatory-rewrite\\2-is-proper-fraction.js": {"path":"C:\\CYF May\\Module-Structuring-and-Testing-Data\\Module-Structuring-and-Testing-Data\\Sprint-3\\2-mandatory-rewrite\\2-is-proper-fraction.js","statementMap":{"0":{"start":{"line":2,"column":5},"end":{"line":2,"column":56}},"1":{"start":{"line":5,"column":0},"end":{"line":5,"column":34}}},"fnMap":{"0":{"name":"isProperFraction","decl":{"start":{"line":1,"column":9},"end":{"line":1,"column":25}},"loc":{"start":{"line":1,"column":50},"end":{"line":3,"column":1}},"line":1}},"branchMap":{},"s":{"0":4,"1":1},"f":{"0":4},"b":{},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"2f278ae0e70c1dc44db8ddaa57605aa61b9ec367"}
+,"C:\\CYF May\\Module-Structuring-and-Testing-Data\\Module-Structuring-and-Testing-Data\\Sprint-3\\2-mandatory-rewrite\\3-get-card-value.js": {"path":"C:\\CYF May\\Module-Structuring-and-Testing-Data\\Module-Structuring-and-Testing-Data\\Sprint-3\\2-mandatory-rewrite\\3-get-card-value.js","statementMap":{"0":{"start":{"line":2,"column":17},"end":{"line":2,"column":34}},"1":{"start":{"line":4,"column":4},"end":{"line":4,"column":47}},"2":{"start":{"line":4,"column":37},"end":{"line":4,"column":47}},"3":{"start":{"line":5,"column":4},"end":{"line":5,"column":56}},"4":{"start":{"line":5,"column":36},"end":{"line":5,"column":56}},"5":{"start":{"line":6,"column":4},"end":{"line":6,"column":79}},"6":{"start":{"line":6,"column":69},"end":{"line":6,"column":79}},"7":{"start":{"line":7,"column":4},"end":{"line":7,"column":31}},"8":{"start":{"line":11,"column":0},"end":{"line":11,"column":30}}},"fnMap":{"0":{"name":"getCardValue","decl":{"start":{"line":1,"column":9},"end":{"line":1,"column":21}},"loc":{"start":{"line":1,"column":28},"end":{"line":8,"column":1}},"line":1}},"branchMap":{"0":{"loc":{"start":{"line":4,"column":4},"end":{"line":4,"column":47}},"type":"if","locations":[{"start":{"line":4,"column":4},"end":{"line":4,"column":47}},{"start":{},"end":{}}],"line":4},"1":{"loc":{"start":{"line":4,"column":8},"end":{"line":4,"column":35}},"type":"binary-expr","locations":[{"start":{"line":4,"column":8},"end":{"line":4,"column":20}},{"start":{"line":4,"column":24},"end":{"line":4,"column":35}}],"line":4},"2":{"loc":{"start":{"line":5,"column":4},"end":{"line":5,"column":56}},"type":"if","locations":[{"start":{"line":5,"column":4},"end":{"line":5,"column":56}},{"start":{},"end":{}}],"line":5},"3":{"loc":{"start":{"line":5,"column":8},"end":{"line":5,"column":34}},"type":"binary-expr","locations":[{"start":{"line":5,"column":8},"end":{"line":5,"column":19}},{"start":{"line":5,"column":23},"end":{"line":5,"column":34}}],"line":5},"4":{"loc":{"start":{"line":6,"column":4},"end":{"line":6,"column":79}},"type":"if","locations":[{"start":{"line":6,"column":4},"end":{"line":6,"column":79}},{"start":{},"end":{}}],"line":6},"5":{"loc":{"start":{"line":6,"column":8},"end":{"line":6,"column":67}},"type":"binary-expr","locations":[{"start":{"line":6,"column":8},"end":{"line":6,"column":21}},{"start":{"line":6,"column":25},"end":{"line":6,"column":36}},{"start":{"line":6,"column":39},"end":{"line":6,"column":51}},{"start":{"line":6,"column":55},"end":{"line":6,"column":67}}],"line":6}},"s":{"0":1,"1":1,"2":1,"3":0,"4":0,"5":0,"6":0,"7":0,"8":1},"f":{"0":1},"b":{"0":[1,0],"1":[1,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0,0,0]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"5ad80cf59ba3d181933f448a1f6766e6a62fe678"}
+,"C:\\CYF May\\Module-Structuring-and-Testing-Data\\Module-Structuring-and-Testing-Data\\Sprint-3\\3-mandatory-practice\\implement\\count.js": {"path":"C:\\CYF May\\Module-Structuring-and-Testing-Data\\Module-Structuring-and-Testing-Data\\Sprint-3\\3-mandatory-practice\\implement\\count.js","statementMap":{"0":{"start":{"line":2,"column":16},"end":{"line":2,"column":17}},"1":{"start":{"line":4,"column":4},"end":{"line":8,"column":5}},"2":{"start":{"line":4,"column":16},"end":{"line":4,"column":17}},"3":{"start":{"line":5,"column":8},"end":{"line":7,"column":5}},"4":{"start":{"line":6,"column":6},"end":{"line":6,"column":14}},"5":{"start":{"line":9,"column":4},"end":{"line":9,"column":17}},"6":{"start":{"line":12,"column":0},"end":{"line":12,"column":27}}},"fnMap":{"0":{"name":"countChar","decl":{"start":{"line":1,"column":9},"end":{"line":1,"column":18}},"loc":{"start":{"line":1,"column":54},"end":{"line":10,"column":1}},"line":1}},"branchMap":{"0":{"loc":{"start":{"line":5,"column":8},"end":{"line":7,"column":5}},"type":"if","locations":[{"start":{"line":5,"column":8},"end":{"line":7,"column":5}},{"start":{},"end":{}}],"line":5}},"s":{"0":1,"1":1,"2":1,"3":5,"4":5,"5":1,"6":1},"f":{"0":1},"b":{"0":[5,0]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"5a68b30b61a6a25f0c5c99d7908feeac65292323"}
+,"C:\\CYF May\\Module-Structuring-and-Testing-Data\\Module-Structuring-and-Testing-Data\\Sprint-3\\3-mandatory-practice\\implement\\get-ordinal-number.js": {"path":"C:\\CYF May\\Module-Structuring-and-Testing-Data\\Module-Structuring-and-Testing-Data\\Sprint-3\\3-mandatory-practice\\implement\\get-ordinal-number.js","statementMap":{"0":{"start":{"line":2,"column":1},"end":{"line":2,"column":14}},"1":{"start":{"line":5,"column":0},"end":{"line":5,"column":34}}},"fnMap":{"0":{"name":"getOrdinalNumber","decl":{"start":{"line":1,"column":9},"end":{"line":1,"column":25}},"loc":{"start":{"line":1,"column":31},"end":{"line":3,"column":1}},"line":1}},"branchMap":{},"s":{"0":1,"1":1},"f":{"0":1},"b":{},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"14167c3f96e9ba6492c52463a7f392753b9f3461"}
+,"C:\\CYF May\\Module-Structuring-and-Testing-Data\\Module-Structuring-and-Testing-Data\\Sprint-3\\3-mandatory-practice\\implement\\repeat.js": {"path":"C:\\CYF May\\Module-Structuring-and-Testing-Data\\Module-Structuring-and-Testing-Data\\Sprint-3\\3-mandatory-practice\\implement\\repeat.js","statementMap":{"0":{"start":{"line":2,"column":4},"end":{"line":2,"column":29}},"1":{"start":{"line":5,"column":0},"end":{"line":5,"column":24}}},"fnMap":{"0":{"name":"repeat","decl":{"start":{"line":1,"column":9},"end":{"line":1,"column":15}},"loc":{"start":{"line":1,"column":18},"end":{"line":3,"column":1}},"line":1}},"branchMap":{},"s":{"0":1,"1":1},"f":{"0":1},"b":{},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"2de786d4a9d0307056d547c04425125ae82895f5"}
+,"C:\\CYF May\\Module-Structuring-and-Testing-Data\\Module-Structuring-and-Testing-Data\\Sprint-3\\4-stretch-investigate\\password-validator.js": {"path":"C:\\CYF May\\Module-Structuring-and-Testing-Data\\Module-Structuring-and-Testing-Data\\Sprint-3\\4-stretch-investigate\\password-validator.js","statementMap":{"0":{"start":{"line":2,"column":4},"end":{"line":2,"column":45}},"1":{"start":{"line":6,"column":0},"end":{"line":6,"column":35}}},"fnMap":{"0":{"name":"passwordValidator","decl":{"start":{"line":1,"column":9},"end":{"line":1,"column":26}},"loc":{"start":{"line":1,"column":37},"end":{"line":3,"column":1}},"line":1}},"branchMap":{"0":{"loc":{"start":{"line":2,"column":11},"end":{"line":2,"column":45}},"type":"cond-expr","locations":[{"start":{"line":2,"column":33},"end":{"line":2,"column":38}},{"start":{"line":2,"column":41},"end":{"line":2,"column":45}}],"line":2}},"s":{"0":1,"1":1},"f":{"0":1},"b":{"0":[0,1]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"667ca0ca10d3acdc2a192c61b1ff3343fba2499b"}
+}
diff --git a/Sprint-3/coverage/lcov-report/2-mandatory-rewrite/1-get-angle-type.js.html b/Sprint-3/coverage/lcov-report/2-mandatory-rewrite/1-get-angle-type.js.html
new file mode 100644
index 000000000..f344735a9
--- /dev/null
+++ b/Sprint-3/coverage/lcov-report/2-mandatory-rewrite/1-get-angle-type.js.html
@@ -0,0 +1,130 @@
+
+
+
+
+
function getAngleType(angle) {
+ if (angle === 90) return "Right angle";
+ if (angle < 90 && angle > 0) return "Acute angle";
+ if (angle > 90 && angle < 180) return "Obtuse angle";
+ if (angle === 180) return "Straight angle";
+ Eif (angle > 180 && angle < 360) return "Reflex angle";
+ return "Invalid angle";
+}
+
+
+
+// Don't get bogged down in this detail
+// Jest uses CommonJS module syntax by default as it's quite old
+// We will upgrade our approach to ES6 modules in the next course module, so for now
+// we have just written the CommonJS module.exports syntax for you
+module.exports = getAngleType;
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Sprint-3/coverage/lcov-report/2-mandatory-rewrite/2-is-proper-fraction.js.html b/Sprint-3/coverage/lcov-report/2-mandatory-rewrite/2-is-proper-fraction.js.html
new file mode 100644
index 000000000..10ef286b1
--- /dev/null
+++ b/Sprint-3/coverage/lcov-report/2-mandatory-rewrite/2-is-proper-fraction.js.html
@@ -0,0 +1,97 @@
+
+
+
+
+
+ Code coverage report for 2-mandatory-rewrite/2-is-proper-fraction.js
+
+
+
+
+
+
+
+
+
+
function countChar(stringOfCharacters, findCharacter) {
+ let count = 0;
+
+ for(let i = 0; i < stringOfCharacters.length; i++) {
+ Eif (stringOfCharacters[i] === findCharacter) {
+ count++;
+ }
+ }
+ return count;
+}
+
+module.exports = countChar;
+
+// how many times a charactor appears in a string
+// what are the inputs and outputs
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Sprint-3/coverage/lcov-report/3-mandatory-practice/implement/get-ordinal-number.js.html b/Sprint-3/coverage/lcov-report/3-mandatory-practice/implement/get-ordinal-number.js.html
new file mode 100644
index 000000000..f96605ec3
--- /dev/null
+++ b/Sprint-3/coverage/lcov-report/3-mandatory-practice/implement/get-ordinal-number.js.html
@@ -0,0 +1,97 @@
+
+
+
+
+
+ Code coverage report for 3-mandatory-practice/implement/get-ordinal-number.js
+
+
+
+
+
+
+
+
+
+
function getAngleType(angle) {
+ Eif (angle === 90) return "Right angle";
+ // replace with your completed function from key-implement
+
+}
+
+
+
+
+
+
+
+
+// Don't get bogged down in this detail
+// Jest uses CommonJS module syntax by default as it's quite old
+// We will upgrade our approach to ES6 modules in the next course module, so for now
+// we have just written the CommonJS module.exports syntax for you
+module.exports = getAngleType;
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Sprint-3/coverage/lcov-report/Sprint-3/2-mandatory-rewrite/2-is-proper-fraction.js.html b/Sprint-3/coverage/lcov-report/Sprint-3/2-mandatory-rewrite/2-is-proper-fraction.js.html
new file mode 100644
index 000000000..afd270690
--- /dev/null
+++ b/Sprint-3/coverage/lcov-report/Sprint-3/2-mandatory-rewrite/2-is-proper-fraction.js.html
@@ -0,0 +1,100 @@
+
+
+
+
+
+ Code coverage report for Sprint-3/2-mandatory-rewrite/2-is-proper-fraction.js
+
+
+
+
+
+
+
+
+
+
function isProperFraction(numerator, denominator) {
+ Eif (numerator < denominator) return true;
+ // add your completed function from key-implement here
+}
+
+module.exports = isProperFraction;
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Sprint-3/coverage/lcov-report/Sprint-3/2-mandatory-rewrite/3-get-card-value.js.html b/Sprint-3/coverage/lcov-report/Sprint-3/2-mandatory-rewrite/3-get-card-value.js.html
new file mode 100644
index 000000000..7e87d3d14
--- /dev/null
+++ b/Sprint-3/coverage/lcov-report/Sprint-3/2-mandatory-rewrite/3-get-card-value.js.html
@@ -0,0 +1,97 @@
+
+
+
+
+
+ Code coverage report for Sprint-3/2-mandatory-rewrite/3-get-card-value.js
+
+
+
+
+
+
+
+
+
+