JSFiddle - React, Tailwind, and code Playground
HTML
<script src="https://github.com/jquery/qunit/raw/master/qunit/qunit.js"></script>
<link rel="stylesheet" href="https://raw.github.com/jquery/qunit/master/qunit/qunit.css">
<ol id="qunit-tests"></ol>
JavaScript
function TaxCalculator(calcScheme)
{
return function(sum){
var totalTaxes = 0.0;
var prevBound = 0.0;
var calc = {
upTo : function(upToSum, pct){
var range = upToSum - prevBound;
prevBound = upToSum;
if(sum >= range)
{
totalTaxes += range * (pct / 100.0);
sum -= range;
} else
{
totalTaxes += sum * (pct / 100.0);
sum = 0;
}
},
rest : function(pct){
totalTaxes += sum * (pct / 100.0);
}
};
calcScheme(calc);
alert(totalTaxes)
return totalTaxes;
};
}
function calcScheme(c)
{
c.upTo(5070, 10);
c.upTo(8660, 14);
c.upTo(14070, 23);
c.upTo(21240, 30);
c.upTo(40230, 33);
c.rest(45);
}
function calc(sum)
{
var c = TaxCalculator(calcScheme);
return c(sum);
}
test("5000", function() {
alert('test');
equal(calc(5000), 500);
});
test("5800", function() {
equal(calc(5800), 609.2);
});
test("9000", function() {
equal(calc(9000), 1087.8);
});
test("15000", function() {
equal(calc(15000), 2532.9);
});
test("5000", function() {
equal(calc(50000), 15068.1);
});