]> git.scottworley.com Git - inverse-tax/commitdiff
Test merge_tax_tables
authorScott Worley <scottworley@scottworley.com>
Thu, 23 May 2019 09:21:14 +0000 (02:21 -0700)
committerScott Worley <scottworley@scottworley.com>
Thu, 23 May 2019 09:21:14 +0000 (02:21 -0700)
tax.js
tax.test.js

diff --git a/tax.js b/tax.js
index 2b5bd4a1a820a0299683a68fd2aba9d0cbbb8add..2319d21e0e44d4ed29b5aeb56eace3bf3790d819 100644 (file)
--- a/tax.js
+++ b/tax.js
@@ -28,8 +28,8 @@ function apply_deductible(table, deductible) {
 function merge_tax_tables(t1, t2) {
   if (t1.length == 0) return t2;
   if (t2.length == 0) return t1;
-  [start1, end1, rate1] = t1[0];
-  [start2, end2, rate2] = t2[0];
+  const [start1, end1, rate1] = t1[0];
+  const [start2, end2, rate2] = t2[0];
   if (start1 == start2) {
     if (end1 == end2) {
       return [[start1, end1, rate1 + rate2]].concat(merge_tax_tables(t1.slice(1), t2.slice(1)));
index 6fcc15c74dbc39ad806c7c3961b495360ed7edf1..067ca91029035482ae4adcbacfbf26bca39a48b4 100644 (file)
@@ -22,3 +22,24 @@ test("sum", () => {
 test("tax", () => {
   assert.strictEqual(tax([[10, 100, .01], [100, Infinity, .1]], 150), 5.9);
 });
+
+test("merge tax tables", () => {
+  function rand(limit = 100) {
+    return Math.round(Math.random() * limit);
+  }
+  function make_random_tax_table(min_threshold) {
+    if (rand(2)) return [];
+    const start = min_threshold === undefined ? rand() : min_threshold;
+    const end = start + 1 + rand();
+    return [[start, end, rand()]].concat(make_random_tax_table(end));
+  }
+  for (var i = 0; i < 1000; i++) {
+    const t1 = make_random_tax_table();
+    const t2 = make_random_tax_table();
+    const combined = merge_tax_tables(t1, t2);
+    for (var j = 0; j < 10; j++) {
+      const income = rand(250);
+      assert.strictEqual(tax(t1, income) + tax(t2, income), tax(combined, income));
+    }
+  }
+});