Skip to content

Commit

Permalink
Add a minified file and introduce error catching
Browse files Browse the repository at this point in the history
  • Loading branch information
sd0e committed Oct 24, 2023
1 parent 4038f2d commit 54c24fb
Show file tree
Hide file tree
Showing 9 changed files with 697 additions and 522 deletions.
325 changes: 169 additions & 156 deletions coverage/clover.xml

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion coverage/coverage-final.json

Large diffs are not rendered by default.

38 changes: 19 additions & 19 deletions coverage/lcov-report/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -23,30 +23,30 @@ <h1>All files</h1>
<div class='clearfix'>

<div class='fl pad1y space-right2'>
<span class="strong">96.42% </span>
<span class="strong">91.98% </span>
<span class="quiet">Statements</span>
<span class='fraction'>189/196</span>
<span class='fraction'>195/212</span>
</div>


<div class='fl pad1y space-right2'>
<span class="strong">87.4% </span>
<span class="strong">85.23% </span>
<span class="quiet">Branches</span>
<span class='fraction'>118/135</span>
<span class='fraction'>127/149</span>
</div>


<div class='fl pad1y space-right2'>
<span class="strong">100% </span>
<span class="strong">97.22% </span>
<span class="quiet">Functions</span>
<span class='fraction'>35/35</span>
<span class='fraction'>35/36</span>
</div>


<div class='fl pad1y space-right2'>
<span class="strong">96.77% </span>
<span class="strong">93.96% </span>
<span class="quiet">Lines</span>
<span class='fraction'>180/186</span>
<span class='fraction'>187/199</span>
</div>


Expand Down Expand Up @@ -80,17 +80,17 @@ <h1>All files</h1>
</thead>
<tbody><tr>
<td class="file high" data-value="parsemath.js"><a href="parsemath.js.html">parsemath.js</a></td>
<td data-value="96.42" class="pic high">
<div class="chart"><div class="cover-fill" style="width: 96%"></div><div class="cover-empty" style="width: 4%"></div></div>
<td data-value="91.98" class="pic high">
<div class="chart"><div class="cover-fill" style="width: 91%"></div><div class="cover-empty" style="width: 9%"></div></div>
</td>
<td data-value="96.42" class="pct high">96.42%</td>
<td data-value="196" class="abs high">189/196</td>
<td data-value="87.4" class="pct high">87.4%</td>
<td data-value="135" class="abs high">118/135</td>
<td data-value="100" class="pct high">100%</td>
<td data-value="35" class="abs high">35/35</td>
<td data-value="96.77" class="pct high">96.77%</td>
<td data-value="186" class="abs high">180/186</td>
<td data-value="91.98" class="pct high">91.98%</td>
<td data-value="212" class="abs high">195/212</td>
<td data-value="85.23" class="pct high">85.23%</td>
<td data-value="149" class="abs high">127/149</td>
<td data-value="97.22" class="pct high">97.22%</td>
<td data-value="36" class="abs high">35/36</td>
<td data-value="93.96" class="pct high">93.96%</td>
<td data-value="199" class="abs high">187/199</td>
</tr>

</tbody>
Expand All @@ -101,7 +101,7 @@ <h1>All files</h1>
<div class='footer quiet pad2 space-top1 center small'>
Code coverage generated by
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
at 2023-02-06T17:49:39.735Z
at 2023-10-24T21:34:21.909Z
</div>
<script src="prettify.js"></script>
<script>
Expand Down
145 changes: 122 additions & 23 deletions coverage/lcov-report/parsemath.js.html
Original file line number Diff line number Diff line change
Expand Up @@ -23,30 +23,30 @@ <h1><a href="index.html">All files</a> parsemath.js</h1>
<div class='clearfix'>

<div class='fl pad1y space-right2'>
<span class="strong">96.42% </span>
<span class="strong">91.98% </span>
<span class="quiet">Statements</span>
<span class='fraction'>189/196</span>
<span class='fraction'>195/212</span>
</div>


<div class='fl pad1y space-right2'>
<span class="strong">87.4% </span>
<span class="strong">85.23% </span>
<span class="quiet">Branches</span>
<span class='fraction'>118/135</span>
<span class='fraction'>127/149</span>
</div>


<div class='fl pad1y space-right2'>
<span class="strong">100% </span>
<span class="strong">97.22% </span>
<span class="quiet">Functions</span>
<span class='fraction'>35/35</span>
<span class='fraction'>35/36</span>
</div>


<div class='fl pad1y space-right2'>
<span class="strong">96.77% </span>
<span class="strong">93.96% </span>
<span class="quiet">Lines</span>
<span class='fraction'>180/186</span>
<span class='fraction'>187/199</span>
</div>


Expand Down Expand Up @@ -399,7 +399,40 @@ <h1><a href="index.html">All files</a> parsemath.js</h1>
<a name='L334'></a><a href='#L334'>334</a>
<a name='L335'></a><a href='#L335'>335</a>
<a name='L336'></a><a href='#L336'>336</a>
<a name='L337'></a><a href='#L337'>337</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
<a name='L337'></a><a href='#L337'>337</a>
<a name='L338'></a><a href='#L338'>338</a>
<a name='L339'></a><a href='#L339'>339</a>
<a name='L340'></a><a href='#L340'>340</a>
<a name='L341'></a><a href='#L341'>341</a>
<a name='L342'></a><a href='#L342'>342</a>
<a name='L343'></a><a href='#L343'>343</a>
<a name='L344'></a><a href='#L344'>344</a>
<a name='L345'></a><a href='#L345'>345</a>
<a name='L346'></a><a href='#L346'>346</a>
<a name='L347'></a><a href='#L347'>347</a>
<a name='L348'></a><a href='#L348'>348</a>
<a name='L349'></a><a href='#L349'>349</a>
<a name='L350'></a><a href='#L350'>350</a>
<a name='L351'></a><a href='#L351'>351</a>
<a name='L352'></a><a href='#L352'>352</a>
<a name='L353'></a><a href='#L353'>353</a>
<a name='L354'></a><a href='#L354'>354</a>
<a name='L355'></a><a href='#L355'>355</a>
<a name='L356'></a><a href='#L356'>356</a>
<a name='L357'></a><a href='#L357'>357</a>
<a name='L358'></a><a href='#L358'>358</a>
<a name='L359'></a><a href='#L359'>359</a>
<a name='L360'></a><a href='#L360'>360</a>
<a name='L361'></a><a href='#L361'>361</a>
<a name='L362'></a><a href='#L362'>362</a>
<a name='L363'></a><a href='#L363'>363</a>
<a name='L364'></a><a href='#L364'>364</a>
<a name='L365'></a><a href='#L365'>365</a>
<a name='L366'></a><a href='#L366'>366</a>
<a name='L367'></a><a href='#L367'>367</a>
<a name='L368'></a><a href='#L368'>368</a>
<a name='L369'></a><a href='#L369'>369</a>
<a name='L370'></a><a href='#L370'>370</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">357x</span>
<span class="cline-any cline-yes">357x</span>
Expand Down Expand Up @@ -474,25 +507,46 @@ <h1><a href="index.html">All files</a> parsemath.js</h1>
<span class="cline-any cline-yes">1x</span>
<span class="cline-any cline-yes">25x</span>
<span class="cline-any cline-yes">64x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">2x</span>
<span class="cline-any cline-yes">2x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">37x</span>
<span class="cline-any cline-yes">14x</span>
<span class="cline-any cline-yes">5x</span>
<span class="cline-any cline-yes">10x</span>
<span class="cline-any cline-yes">7x</span>
<span class="cline-any cline-yes">2x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">4x</span>
<span class="cline-any cline-yes">4x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">3x</span>
<span class="cline-any cline-yes">1x</span>
<span class="cline-any cline-yes">1x</span>
<span class="cline-any cline-yes">3x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">2x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">1x</span>
<span class="cline-any cline-yes">2x</span>
<span class="cline-any cline-yes">1x</span>
<span class="cline-any cline-yes">3x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">1x</span>
<span class="cline-any cline-yes">178x</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">178x</span>
<span class="cline-any cline-yes">178x</span>
<span class="cline-any cline-yes">178x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
Expand Down Expand Up @@ -594,6 +648,15 @@ <h1><a href="index.html">All files</a> parsemath.js</h1>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">63x</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">63x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">63x</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">63x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">63x</span>
Expand Down Expand Up @@ -704,6 +767,8 @@ <h1><a href="index.html">All files</a> parsemath.js</h1>
<span class="cline-any cline-yes">44x</span>
<span class="cline-any cline-yes">44x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
Expand Down Expand Up @@ -735,7 +800,8 @@ <h1><a href="index.html">All files</a> parsemath.js</h1>
<span class="cline-any cline-yes">119x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">1x</span></td><td class="text"><pre class="prettyprint lang-js">class Stack {
<span class="cline-any cline-yes">1x</span>
<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">class Stack {
constructor() {
this.top = -1;
this.bottom = 0;
Expand Down Expand Up @@ -810,25 +876,46 @@ <h1><a href="index.html">All files</a> parsemath.js</h1>
const OPERATORS = {
"^": (number1, number2) =&gt; number1**number2,
"*": (number1, number2) =&gt; number1*number2,
"/": (number1, number2) =&gt; number1/number2,
"/": (number1, number2) =&gt; {
<span class="missing-if-branch" title="if path not taken" >I</span>if (number2 === 0) <span class="cstat-no" title="statement not covered" >throw new Error('Division by zero error');</span>
return number1/number2
},
"+": (number1, number2) =&gt; number1+number2,
"-": (number1, number2) =&gt; number1-number2,
"sqrt": (number1, _) =&gt; Math.sqrt(number1),
"sin": (number1, _, angleMode) =&gt; angleMode === 'rad' ? Math.sin(number1) : Math.sin(number1 * Math.PI / 180),
"cos": (number1, _, angleMode) =&gt; angleMode === 'rad' ? Math.cos(number1) : Math.cos(number1 * Math.PI / 180),
"tan": (number1, _, angleMode) =&gt; angleMode === 'rad' ? Math.tan(number1) : <span class="branch-1 cbranch-no" title="branch not covered" >Math.tan(number1 * Math.PI / 180),</span>
"asin": (number1, _, angleMode) =&gt; angleMode === 'rad' ? Math.asin(number1) : Math.asin(number1) * 180 / Math.PI,
"acos": (number1, _, angleMode) =&gt; angleMode === 'rad' ? Math.acos(number1) : <span class="branch-1 cbranch-no" title="branch not covered" >Math.acos(number1) * 180 / Math.PI,</span>
"atan": (number1, _, angleMode) =&gt; angleMode === 'rad' ? Math.atan(number1) : <span class="branch-1 cbranch-no" title="branch not covered" >Math.atan(number1) * 180 / Math.PI,</span>
"arcsin": (number1, _, angleMode) =&gt; angleMode === 'rad' ? Math.asin(number1) : <span class="branch-1 cbranch-no" title="branch not covered" >Math.asin(number1) * 180 / Math.PI,</span>
"arccos": (number1, _, angleMode) =&gt; angleMode === 'rad' ? Math.acos(number1) : Math.acos(number1) * 180 / Math.PI,
"arctan": (number1, _, angleMode) =&gt; angleMode === 'rad' ? Math.atan(number1) : <span class="branch-1 cbranch-no" title="branch not covered" >Math.atan(number1) * 180 / Math.PI,</span>
"asin": (number1, _, angleMode) =&gt; {
<span class="missing-if-branch" title="if path not taken" >I</span>if (number1 &lt; -1 || number1 &gt; 1) <span class="cstat-no" title="statement not covered" >throw new Error('Trigonometric error: asin value not in domain');</span>
return angleMode === 'rad' ? Math.asin(number1) : Math.asin(number1) * 180 / Math.PI
},
"acos": (number1, _, angleMode) =&gt; {
<span class="missing-if-branch" title="if path not taken" >I</span>if (number1 &lt; -1 || number1 &gt; 1) <span class="cstat-no" title="statement not covered" >throw new Error('Trigonometric error: acos value not in domain');</span>
return angleMode === 'rad' ? Math.acos(number1) : Math.acos(number1) * 180 / Math.PI
},
"atan": (number1, _, angleMode) =&gt; {
return angleMode === 'rad' ? Math.atan(number1) : <span class="branch-1 cbranch-no" title="branch not covered" >Math.atan(number1) * 180 / Math.PI</span>
},
"arcsin": (number1, _, angleMode) =&gt; OPERATORS["asin"](number1, _, angleMode),
"arccos": (number1, _, angleMode) =&gt; OPERATORS["acos"](number1, _, angleMode),
"arctan": (number1, _, angleMode) =&gt; OPERATORS["atan"](number1, _, angleMode),
"abs": (number1, _) =&gt; Math.abs(number1),
"ln": <span class="fstat-no" title="function not covered" >(n</span>umber1, _) =&gt; {
<span class="cstat-no" title="statement not covered" > if (number1 &lt;= 0) <span class="cstat-no" title="statement not covered" >throw new Error('Logarithm error: value not in domain')</span></span>
<span class="cstat-no" title="statement not covered" > return Math.log(number1)</span>
}
}
&nbsp;
const performCalculation = (number1, operator, number2 = <span class="branch-0 cbranch-no" title="branch not covered" >0,</span> angleMode) =&gt; {
<span class="missing-if-branch" title="if path not taken" >I</span>if (isNaN(number1) || isNaN(number2)) {
<span class="cstat-no" title="statement not covered" > throw new Error('Syntax error: performing an operation on a NaN type')</span>
}
&nbsp;
operator = operator.toLowerCase();
if (operator in OPERATORS) return OPERATORS[operator](number1, number2, angleMode)
if (operator in OPERATORS) {
return OPERATORS[operator](number1, number2, angleMode);
}
else <span class="cstat-no" title="statement not covered" ><span class="missing-if-branch" title="else path not taken" >E</span>return null;</span>
}
&nbsp;
Expand Down Expand Up @@ -928,8 +1015,17 @@ <h1><a href="index.html">All files</a> parsemath.js</h1>
previousBracketValue = currentValue;
}
});
&nbsp;
<span class="missing-if-branch" title="if path not taken" >I</span>if (lastBracketIdx === -1) {
<span class="cstat-no" title="statement not covered" > throw new Error('Bracket error: imbalanced brackets');</span>
}
&nbsp;
const extractedEquation = equation.substring(firstBracketIdx + 1, lastBracketIdx);
&nbsp;
<span class="missing-if-branch" title="if path not taken" >I</span>if (extractedEquation === '') {
<span class="cstat-no" title="statement not covered" > throw new Error('Bracket error: no expression within brackets');</span>
}
&nbsp;
let extractedEquationResult = ParseMath(extractedEquation, enableConstants, variables, angleMode);
&nbsp;
let firstPart = equation.substring(0, firstBracketIdx);
Expand Down Expand Up @@ -1028,7 +1124,7 @@ <h1><a href="index.html">All files</a> parsemath.js</h1>
prevItem = 'number';
} else if (equationValue === '.') {
pendingNumbers.push('.');
} else <span class="missing-if-branch" title="else path not taken" >E</span>if (equationValue in VARIABLES &amp;&amp; !letterIsPartOfFunction(equation, idx)) {
} else if (equationValue in VARIABLES &amp;&amp; !letterIsPartOfFunction(equation, idx)) {
// is a variable
&nbsp;
if (idx !== 0 &amp;&amp; prevItem === 'number') {
Expand All @@ -1039,6 +1135,8 @@ <h1><a href="index.html">All files</a> parsemath.js</h1>
equationValue = VARIABLES[equationValue].toString();
numbers.push(equationValue);
prevItem = 'number';
} else <span class="missing-if-branch" title="else path not taken" >E</span>{
<span class="cstat-no" title="statement not covered" > throw new Error('Syntax error: Variable \'' + equationValue + '\' not defined');</span>
}
}
});
Expand Down Expand Up @@ -1071,14 +1169,15 @@ <h1><a href="index.html">All files</a> parsemath.js</h1>
return result;
}
&nbsp;
module.exports = ParseMath;</pre></td></tr></table></pre>
module.exports = ParseMath;
&nbsp;</pre></td></tr></table></pre>

<div class='push'></div><!-- for sticky footer -->
</div><!-- /wrapper -->
<div class='footer quiet pad2 space-top1 center small'>
Code coverage generated by
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
at 2023-02-06T17:49:39.735Z
at 2023-10-24T21:34:21.909Z
</div>
<script src="prettify.js"></script>
<script>
Expand Down
Loading

0 comments on commit 54c24fb

Please sign in to comment.