diff --git a/Sprint-3/1-implement-and-rewrite-tests/implement/1-get-angle-type.js b/Sprint-3/1-implement-and-rewrite-tests/implement/1-get-angle-type.js
index ca1dfe7f2..3d9123b03 100644
--- a/Sprint-3/1-implement-and-rewrite-tests/implement/1-get-angle-type.js
+++ b/Sprint-3/1-implement-and-rewrite-tests/implement/1-get-angle-type.js
@@ -11,8 +11,22 @@ 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";
+ }
}
// The line below allows us to load the getAngleType function into tests in other files.
@@ -50,14 +64,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
+// ====> write your test here, and then add a line to pass the test in the function above
+const reflex = getAngleType(270);
+assertEquals(reflex, "Reflex angle");
\ No newline at end of file
diff --git a/Sprint-3/1-implement-and-rewrite-tests/implement/2-is-proper-fraction.js b/Sprint-3/1-implement-and-rewrite-tests/implement/2-is-proper-fraction.js
index a4739af77..2aceb3160 100644
--- a/Sprint-3/1-implement-and-rewrite-tests/implement/2-is-proper-fraction.js
+++ b/Sprint-3/1-implement-and-rewrite-tests/implement/2-is-proper-fraction.js
@@ -8,9 +8,12 @@
// 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 if (numerator >= denominator) {
+ return false;
+ }
}
// The line below allows us to load the isProperFraction function into tests in other files.
@@ -31,6 +34,7 @@ function assertEquals(actualOutput, targetOutput) {
// 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);
@@ -38,6 +42,8 @@ assertEquals(properFraction, true);
// 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);
@@ -45,15 +51,21 @@ assertEquals(improperFraction, false);
// 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
+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 invalidFraction = isProperFraction(0, 5);
+assertEquals(invalidFraction, true);
diff --git a/Sprint-3/1-implement-and-rewrite-tests/implement/3-get-card-value.js b/Sprint-3/1-implement-and-rewrite-tests/implement/3-get-card-value.js
index 266525d1b..08f446fca 100644
--- a/Sprint-3/1-implement-and-rewrite-tests/implement/3-get-card-value.js
+++ b/Sprint-3/1-implement-and-rewrite-tests/implement/3-get-card-value.js
@@ -8,11 +8,21 @@
// 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) {
+ const rank = card.slice(0, -1);
+
if (rank === "A") {
return 11;
}
+ else if (["2","3","4","5","6","7","8","9"].includes(rank)) {
+ return Number(rank);
+}
+ else if (rank === "10" || rank === "J" || rank === "Q" || rank === "K") {
+ return 10;
+ }
+ else {
+ throw new Error("Invalid card rank.");
+ }
}
-
// The line below allows us to load the getCardValue function into tests in other files.
// This will be useful in the "rewrite tests with jest" step.
module.exports = getCardValue;
@@ -40,18 +50,32 @@ assertEquals(aceofSpades, 11);
// 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 tenofDiamonds = getCardValue("10♦");
+const jackofClubs = getCardValue("J♣");
+const queenofHearts = getCardValue("Q♥");
+const kingofSpades = getCardValue("K♠");
+assertEquals(tenofDiamonds, 10);
+assertEquals(jackofClubs, 10);
+assertEquals(queenofHearts, 10);
+assertEquals(kingofSpades, 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 aceofDiamonds = getCardValue("A♦");
+assertEquals(aceofDiamonds, 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 invalidCard1 = () => getCardValue("1♠");
+assertEquals(invalidCard1 instanceof Function, true);
+
+const invalidCard2 = () => getCardValue("B♥");
+assertEquals(invalidCard2 instanceof Function, true);
\ No newline at end of file
diff --git a/Sprint-3/1-implement-and-rewrite-tests/rewrite-tests-with-jest/1-get-angle-type.test.js b/Sprint-3/1-implement-and-rewrite-tests/rewrite-tests-with-jest/1-get-angle-type.test.js
index 4a92a3e82..0519b120a 100644
--- a/Sprint-3/1-implement-and-rewrite-tests/rewrite-tests-with-jest/1-get-angle-type.test.js
+++ b/Sprint-3/1-implement-and-rewrite-tests/rewrite-tests-with-jest/1-get-angle-type.test.js
@@ -1,5 +1,6 @@
// This statement loads the getAngleType function you wrote in the implement directory.
// We will use the same function, but write tests for it using Jest in this file.
+//const { test } = require("picomatch");
const getAngleType = require("../implement/1-get-angle-type");
test("should identify right angle (90°)", () => {
@@ -13,14 +14,30 @@ test("should identify right angle (90°)", () => {
// 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° and <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 (>180° and <360°)", () => {
+ expect(getAngleType(270)).toEqual("Reflex angle");
+})
\ No newline at end of file
diff --git a/Sprint-3/1-implement-and-rewrite-tests/rewrite-tests-with-jest/2-is-proper-fraction.test.js b/Sprint-3/1-implement-and-rewrite-tests/rewrite-tests-with-jest/2-is-proper-fraction.test.js
index caf08d15b..30a50c86d 100644
--- a/Sprint-3/1-implement-and-rewrite-tests/rewrite-tests-with-jest/2-is-proper-fraction.test.js
+++ b/Sprint-3/1-implement-and-rewrite-tests/rewrite-tests-with-jest/2-is-proper-fraction.test.js
@@ -7,7 +7,22 @@ test("should return true for a proper fraction", () => {
});
// 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 negative proper fraction", () => (
+ expect(isProperFraction(-4,7)).toEqual(true)
+));
// Case 4: Identify Equal Numerator and Denominator:
+test("should return false when numerator equals denominator", () => {
+ expect(isProperFraction(3,3)).toEqual(false);
+});
+
+// Stretch:
+// What other scenarios could you test for?
+test("should return true for negative proper fraction with negative denominator", () => {
+ expect(isProperFraction(4,-7)).toEqual(true);
+});
\ No newline at end of file
diff --git a/Sprint-3/1-implement-and-rewrite-tests/rewrite-tests-with-jest/3-get-card-value.test.js b/Sprint-3/1-implement-and-rewrite-tests/rewrite-tests-with-jest/3-get-card-value.test.js
index 04418ff72..6c76f8c37 100644
--- a/Sprint-3/1-implement-and-rewrite-tests/rewrite-tests-with-jest/3-get-card-value.test.js
+++ b/Sprint-3/1-implement-and-rewrite-tests/rewrite-tests-with-jest/3-get-card-value.test.js
@@ -1,5 +1,6 @@
// This statement loads the getCardValue function you wrote in the implement directory.
// We will use the same function, but write tests for it using Jest in this file.
+// const { test } = require("picomatch");
const getCardValue = require("../implement/3-get-card-value");
test("should return 11 for Ace of Spades", () => {
@@ -8,6 +9,27 @@ test("should return 11 for Ace of Spades", () => {
});
// Case 2: Handle Number Cards (2-10):
+test("should return numeric value for number cards (2-10)", () => {
+ const fiveofHearts = getCardValue("5♥");
+ expect(fiveofHearts).toEqual(5);
+});
// Case 3: Handle Face Cards (J, Q, K):
+test("should return 10 for face cards (J, Q, K) and 10", () => {
+ expect(getCardValue("10♦")).toEqual(10);
+ 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 (A)", () => {
+ expect(getCardValue("A♦")).toEqual(11);
+});
// Case 5: Handle Invalid Cards:
+test("should throw an error for invalid card rank", () => {
+ expect(() => {
+ getCardValue("1♠");
+ }).toThrow("Invalid card rank.");
+ expect(() => {
+ getCardValue("B♥");
+ }).toThrow("Invalid card rank.");
+});
diff --git a/Sprint-3/1-implement-and-rewrite-tests/rewrite-tests-with-jest/coverage/clover.xml b/Sprint-3/1-implement-and-rewrite-tests/rewrite-tests-with-jest/coverage/clover.xml
new file mode 100644
index 000000000..bd796bd37
--- /dev/null
+++ b/Sprint-3/1-implement-and-rewrite-tests/rewrite-tests-with-jest/coverage/clover.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/Sprint-3/1-implement-and-rewrite-tests/rewrite-tests-with-jest/coverage/coverage-final.json b/Sprint-3/1-implement-and-rewrite-tests/rewrite-tests-with-jest/coverage/coverage-final.json
new file mode 100644
index 000000000..0967ef424
--- /dev/null
+++ b/Sprint-3/1-implement-and-rewrite-tests/rewrite-tests-with-jest/coverage/coverage-final.json
@@ -0,0 +1 @@
+{}
diff --git a/Sprint-3/1-implement-and-rewrite-tests/rewrite-tests-with-jest/coverage/lcov-report/base.css b/Sprint-3/1-implement-and-rewrite-tests/rewrite-tests-with-jest/coverage/lcov-report/base.css
new file mode 100644
index 000000000..f418035b4
--- /dev/null
+++ b/Sprint-3/1-implement-and-rewrite-tests/rewrite-tests-with-jest/coverage/lcov-report/base.css
@@ -0,0 +1,224 @@
+body, html {
+ margin:0; padding: 0;
+ height: 100%;
+}
+body {
+ font-family: Helvetica Neue, Helvetica, Arial;
+ font-size: 14px;
+ color:#333;
+}
+.small { font-size: 12px; }
+*, *:after, *:before {
+ -webkit-box-sizing:border-box;
+ -moz-box-sizing:border-box;
+ box-sizing:border-box;
+ }
+h1 { font-size: 20px; margin: 0;}
+h2 { font-size: 14px; }
+pre {
+ font: 12px/1.4 Consolas, "Liberation Mono", Menlo, Courier, monospace;
+ margin: 0;
+ padding: 0;
+ -moz-tab-size: 2;
+ -o-tab-size: 2;
+ tab-size: 2;
+}
+a { color:#0074D9; text-decoration:none; }
+a:hover { text-decoration:underline; }
+.strong { font-weight: bold; }
+.space-top1 { padding: 10px 0 0 0; }
+.pad2y { padding: 20px 0; }
+.pad1y { padding: 10px 0; }
+.pad2x { padding: 0 20px; }
+.pad2 { padding: 20px; }
+.pad1 { padding: 10px; }
+.space-left2 { padding-left:55px; }
+.space-right2 { padding-right:20px; }
+.center { text-align:center; }
+.clearfix { display:block; }
+.clearfix:after {
+ content:'';
+ display:block;
+ height:0;
+ clear:both;
+ visibility:hidden;
+ }
+.fl { float: left; }
+@media only screen and (max-width:640px) {
+ .col3 { width:100%; max-width:100%; }
+ .hide-mobile { display:none!important; }
+}
+
+.quiet {
+ color: #7f7f7f;
+ color: rgba(0,0,0,0.5);
+}
+.quiet a { opacity: 0.7; }
+
+.fraction {
+ font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace;
+ font-size: 10px;
+ color: #555;
+ background: #E8E8E8;
+ padding: 4px 5px;
+ border-radius: 3px;
+ vertical-align: middle;
+}
+
+div.path a:link, div.path a:visited { color: #333; }
+table.coverage {
+ border-collapse: collapse;
+ margin: 10px 0 0 0;
+ padding: 0;
+}
+
+table.coverage td {
+ margin: 0;
+ padding: 0;
+ vertical-align: top;
+}
+table.coverage td.line-count {
+ text-align: right;
+ padding: 0 5px 0 20px;
+}
+table.coverage td.line-coverage {
+ text-align: right;
+ padding-right: 10px;
+ min-width:20px;
+}
+
+table.coverage td span.cline-any {
+ display: inline-block;
+ padding: 0 5px;
+ width: 100%;
+}
+.missing-if-branch {
+ display: inline-block;
+ margin-right: 5px;
+ border-radius: 3px;
+ position: relative;
+ padding: 0 4px;
+ background: #333;
+ color: yellow;
+}
+
+.skip-if-branch {
+ display: none;
+ margin-right: 10px;
+ position: relative;
+ padding: 0 4px;
+ background: #ccc;
+ color: white;
+}
+.missing-if-branch .typ, .skip-if-branch .typ {
+ color: inherit !important;
+}
+.coverage-summary {
+ border-collapse: collapse;
+ width: 100%;
+}
+.coverage-summary tr { border-bottom: 1px solid #bbb; }
+.keyline-all { border: 1px solid #ddd; }
+.coverage-summary td, .coverage-summary th { padding: 10px; }
+.coverage-summary tbody { border: 1px solid #bbb; }
+.coverage-summary td { border-right: 1px solid #bbb; }
+.coverage-summary td:last-child { border-right: none; }
+.coverage-summary th {
+ text-align: left;
+ font-weight: normal;
+ white-space: nowrap;
+}
+.coverage-summary th.file { border-right: none !important; }
+.coverage-summary th.pct { }
+.coverage-summary th.pic,
+.coverage-summary th.abs,
+.coverage-summary td.pct,
+.coverage-summary td.abs { text-align: right; }
+.coverage-summary td.file { white-space: nowrap; }
+.coverage-summary td.pic { min-width: 120px !important; }
+.coverage-summary tfoot td { }
+
+.coverage-summary .sorter {
+ height: 10px;
+ width: 7px;
+ display: inline-block;
+ margin-left: 0.5em;
+ background: url(sort-arrow-sprite.png) no-repeat scroll 0 0 transparent;
+}
+.coverage-summary .sorted .sorter {
+ background-position: 0 -20px;
+}
+.coverage-summary .sorted-desc .sorter {
+ background-position: 0 -10px;
+}
+.status-line { height: 10px; }
+/* yellow */
+.cbranch-no { background: yellow !important; color: #111; }
+/* dark red */
+.red.solid, .status-line.low, .low .cover-fill { background:#C21F39 }
+.low .chart { border:1px solid #C21F39 }
+.highlighted,
+.highlighted .cstat-no, .highlighted .fstat-no, .highlighted .cbranch-no{
+ background: #C21F39 !important;
+}
+/* medium red */
+.cstat-no, .fstat-no, .cbranch-no, .cbranch-no { background:#F6C6CE }
+/* light red */
+.low, .cline-no { background:#FCE1E5 }
+/* light green */
+.high, .cline-yes { background:rgb(230,245,208) }
+/* medium green */
+.cstat-yes { background:rgb(161,215,106) }
+/* dark green */
+.status-line.high, .high .cover-fill { background:rgb(77,146,33) }
+.high .chart { border:1px solid rgb(77,146,33) }
+/* dark yellow (gold) */
+.status-line.medium, .medium .cover-fill { background: #f9cd0b; }
+.medium .chart { border:1px solid #f9cd0b; }
+/* light yellow */
+.medium { background: #fff4c2; }
+
+.cstat-skip { background: #ddd; color: #111; }
+.fstat-skip { background: #ddd; color: #111 !important; }
+.cbranch-skip { background: #ddd !important; color: #111; }
+
+span.cline-neutral { background: #eaeaea; }
+
+.coverage-summary td.empty {
+ opacity: .5;
+ padding-top: 4px;
+ padding-bottom: 4px;
+ line-height: 1;
+ color: #888;
+}
+
+.cover-fill, .cover-empty {
+ display:inline-block;
+ height: 12px;
+}
+.chart {
+ line-height: 0;
+}
+.cover-empty {
+ background: white;
+}
+.cover-full {
+ border-right: none !important;
+}
+pre.prettyprint {
+ border: none !important;
+ padding: 0 !important;
+ margin: 0 !important;
+}
+.com { color: #999 !important; }
+.ignore-none { color: #999; font-weight: normal; }
+
+.wrapper {
+ min-height: 100%;
+ height: auto !important;
+ height: 100%;
+ margin: 0 auto -48px;
+}
+.footer, .push {
+ height: 48px;
+}
diff --git a/Sprint-3/1-implement-and-rewrite-tests/rewrite-tests-with-jest/coverage/lcov-report/block-navigation.js b/Sprint-3/1-implement-and-rewrite-tests/rewrite-tests-with-jest/coverage/lcov-report/block-navigation.js
new file mode 100644
index 000000000..530d1ed2b
--- /dev/null
+++ b/Sprint-3/1-implement-and-rewrite-tests/rewrite-tests-with-jest/coverage/lcov-report/block-navigation.js
@@ -0,0 +1,87 @@
+/* eslint-disable */
+var jumpToCode = (function init() {
+ // Classes of code we would like to highlight in the file view
+ var missingCoverageClasses = ['.cbranch-no', '.cstat-no', '.fstat-no'];
+
+ // Elements to highlight in the file listing view
+ var fileListingElements = ['td.pct.low'];
+
+ // We don't want to select elements that are direct descendants of another match
+ var notSelector = ':not(' + missingCoverageClasses.join('):not(') + ') > '; // becomes `:not(a):not(b) > `
+
+ // Selector that finds elements on the page to which we can jump
+ var selector =
+ fileListingElements.join(', ') +
+ ', ' +
+ notSelector +
+ missingCoverageClasses.join(', ' + notSelector); // becomes `:not(a):not(b) > a, :not(a):not(b) > b`
+
+ // The NodeList of matching elements
+ var missingCoverageElements = document.querySelectorAll(selector);
+
+ var currentIndex;
+
+ function toggleClass(index) {
+ missingCoverageElements
+ .item(currentIndex)
+ .classList.remove('highlighted');
+ missingCoverageElements.item(index).classList.add('highlighted');
+ }
+
+ function makeCurrent(index) {
+ toggleClass(index);
+ currentIndex = index;
+ missingCoverageElements.item(index).scrollIntoView({
+ behavior: 'smooth',
+ block: 'center',
+ inline: 'center'
+ });
+ }
+
+ function goToPrevious() {
+ var nextIndex = 0;
+ if (typeof currentIndex !== 'number' || currentIndex === 0) {
+ nextIndex = missingCoverageElements.length - 1;
+ } else if (missingCoverageElements.length > 1) {
+ nextIndex = currentIndex - 1;
+ }
+
+ makeCurrent(nextIndex);
+ }
+
+ function goToNext() {
+ var nextIndex = 0;
+
+ if (
+ typeof currentIndex === 'number' &&
+ currentIndex < missingCoverageElements.length - 1
+ ) {
+ nextIndex = currentIndex + 1;
+ }
+
+ makeCurrent(nextIndex);
+ }
+
+ return function jump(event) {
+ if (
+ document.getElementById('fileSearch') === document.activeElement &&
+ document.activeElement != null
+ ) {
+ // if we're currently focused on the search input, we don't want to navigate
+ return;
+ }
+
+ switch (event.which) {
+ case 78: // n
+ case 74: // j
+ goToNext();
+ break;
+ case 66: // b
+ case 75: // k
+ case 80: // p
+ goToPrevious();
+ break;
+ }
+ };
+})();
+window.addEventListener('keydown', jumpToCode);
diff --git a/Sprint-3/1-implement-and-rewrite-tests/rewrite-tests-with-jest/coverage/lcov-report/favicon.png b/Sprint-3/1-implement-and-rewrite-tests/rewrite-tests-with-jest/coverage/lcov-report/favicon.png
new file mode 100644
index 000000000..c1525b811
Binary files /dev/null and b/Sprint-3/1-implement-and-rewrite-tests/rewrite-tests-with-jest/coverage/lcov-report/favicon.png differ
diff --git a/Sprint-3/1-implement-and-rewrite-tests/rewrite-tests-with-jest/coverage/lcov-report/index.html b/Sprint-3/1-implement-and-rewrite-tests/rewrite-tests-with-jest/coverage/lcov-report/index.html
new file mode 100644
index 000000000..0385382a4
--- /dev/null
+++ b/Sprint-3/1-implement-and-rewrite-tests/rewrite-tests-with-jest/coverage/lcov-report/index.html
@@ -0,0 +1,101 @@
+
+
+
+
+
+ Code coverage report for All files
+
+
+
+
+
+
+
+
+
+
+
+
All files
+
+
+
+ Unknown%
+ Statements
+ 0/0
+
+
+
+
+ Unknown%
+ Branches
+ 0/0
+
+
+
+
+ Unknown%
+ Functions
+ 0/0
+
+
+
+
+ Unknown%
+ Lines
+ 0/0
+
+
+
+
+
+ Press n or j to go to the next uncovered block, b, p or k for the previous block.
+