What this page reports
Every calculator on this site is backed by a test file that runs its actual shipped calculation engine against expected results. Those files are executed as a release gate: if one fails, or if a published calculator has no mapped test file at all, the site does not ship. This page publishes what that gate found, per calculator, so the claim can be checked rather than believed.
Coverage — 80/80 calculators have a suite — is the claim this site is willing to defend. The sitewide assertion total is reported further down for completeness, but it is a poor summary statistic and it is not the headline here: a handful of generated suites dominate it, so quoting it alone would flatter the thin pages and mislead you about the well-covered ones.
Built, tested, and maintained by Jay Sudha. See Methodology for how a calculator gets built in the first place.
How to read a row
Each case is classified by what kind of evidence it actually supplies, weakest to strongest. Where a case could plausibly sit in two categories, it is recorded as the weaker one — understating the evidence is safe, overstating it is not.
- Independent cross-check — The expected value comes from outside this site entirely — a published worked example, an official schedule, a statute, or a standard textbook formula, cited in the test file next to the case.
- Golden — The expected value was worked out by hand, with the arithmetic written into the test file so a reader can re-derive it. A number produced by calling our own engine does not count as golden.
- Boundary — Zero, negative, empty, very large, or degenerate inputs, and the rounding or threshold points where a formula changes behaviour.
- Property — An identity, reconciliation, or monotonic relationship that must hold for any admissible input — for example that a schedule closes to a zero balance, or that a bigger deposit never lowers the result.
- Structural — Output shape and type sanity: the field exists, the number is finite, no NaN, the array is the right length. Real checks, but the weakest evidence here.
A high total made mostly of structural and property cases is weaker evidence than a small total made of golden and independent ones, which is exactly why the table breaks the count out by kind instead of showing a single number.
The distribution, stated plainly
Across 80 calculators and 83 test suites there are 9,968 distinct passing assertions. Counted per calculator — a suite that legitimately covers several closely-related calculators counts toward each of them — that comes to 9,721. Neither figure is evenly distributed:
- Median: 48 cases per calculator. 39 of 80 calculators sit below it. The range runs from 14 (UAE Gratuity Calculator) to 3,622 (401(k) Calculator).
- The top 5 calculators hold 58.2% of the per-calculator total (5,656 of 9,721). Any average computed over this data is dominated by them.
- 2 suites are property-based and account for 49.6% of all distinct assertions (4,941 of 9,968): 401(k) engine, Retirement engine. These generate thousands of checks from loops over input ranges. That is genuinely useful — it explores far more of the input space than hand-written cases can — but one generated assertion is not equivalent in weight to one hand-derived expected value, and lumping them into a single sitewide number pretends otherwise.
- Case mix sitewide: 124 independent cross-check, 1,849 golden, 1,368 boundary, 4,305 property, 2,075 structural.
- 22 of 80 calculators carry at least one case checked against an outside authority rather than only against our own reasoning.
Every calculator, with its case mix
All 80 calculators, largest suite first. Every row links to the live calculator and names the test file that produced the counts. Cases marked with the strongest kinds appear leftmost.
| Calculator | Independent | Golden | Boundary | Property | Structural | Total | Test file |
|---|---|---|---|---|---|---|---|
| 401(k) Calculator | 4 | 20 | 27 | 2836 | 735 | 3,622 | validate-401k.mjs |
| Retirement Calculator | — | — | 3 | 650 | 666 | 1,319 | validate-retirement.mjs |
| Salary & Take-Home Pay Calculator | — | 51 | 22 | 151 | 38 | 262 | validate-take-home-pay-engine.cjs |
| LTV:CAC Calculator | — | 99 | 53 | 20 | 62 | 234 | validate-ltv-cac-engine.cjs |
| Savings Calculator | — | 2 | 6 | 112 | 99 | 219 | validate-savings.mjs |
| Income Tax Calculator | 8 | 68 | 44 | 20 | 20 | 160 | validate-income-tax-engine.cjsvalidate-income-tax-india.cjsvalidate-income-tax-presets.cjs |
| VAT/GST Calculator | — | 35 | 53 | 16 | 41 | 145 | validate-vat-engine.cjs |
| Break-Even ROAS Calculator | — | 56 | 44 | 9 | 19 | 128 | validate-break-even-roas-engine.cjs |
| Profit Margin Calculator | — | 70 | 38 | 3 | 14 | 125 | validate-profit-margin-engine.cjs |
| Scientific Calculator | — | 78 | 46 | — | — | 124 | validate-scientific-calculator-engine.cjs |
| Ecommerce Profit Calculator | — | 60 | 18 | 37 | 8 | 123 | validate-ecommerce-profit-engine.cjs |
| 50/30/20 Budget Calculator | — | 52 | 59 | 1 | 10 | 122 | validate-ftt-engine.cjs |
| Break-Even Calculator | — | 63 | 24 | 6 | 27 | 120 | validate-break-even-engine.cjs |
| Budget Calculator | — | 32 | 58 | 7 | 17 | 114 | validate-budget-engine.cjs |
| Calorie Deficit Calculator | — | 13 | 52 | 32 | 15 | 112 | validate-calorie-deficit-engine.mjs |
| Net Worth Calculator | — | 55 | 39 | 4 | 11 | 109 | validate-net-worth-engine.cjs |
| Market Equilibrium Calculator | 16 | 35 | 37 | 12 | 2 | 102 | validate-market-equilibrium-engine.cjs |
| AI Agent Cost Calculator | — | 50 | 27 | 16 | 7 | 100 | validate-ai-agent-cost.mjs |
| Financial Needs Pyramid Calculator | — | 17 | 51 | 9 | 19 | 96 | validate-financial-needs-pyramid-engine.cjs |
| Markup Calculator | — | 47 | 25 | 7 | 14 | 93 | validate-markup-engine.cjs |
| Dividend Reinvestment Calculator | — | 24 | 23 | 16 | 22 | 85 | validate-drip-engine.cjs |
| Credit Card Payoff Calculator | — | 19 | 24 | 22 | 18 | 83 | validate-cc-payoff-engine.cjs |
| DDP vs DAP Cost Calculator | 14 | 25 | 18 | 10 | 7 | 74 | validate-ddp-dap-calculator-engine.cjs |
| Debt Payoff Calculator | — | 10 | 20 | 31 | 12 | 73 | validate-debt-payoff-engine.cjs |
| Percentage Change Calculator | — | 44 | 23 | 3 | 3 | 73 | validate-percentage-change-engine.cjs |
| BMI Calculator | — | 19 | 35 | 10 | 5 | 69 | validate-bmi.mjs |
| Standard Deviation Calculator | 6 | 33 | 20 | 6 | 3 | 68 | validate-standard-deviation-engine.cjs |
| TDEE Calculator | — | 8 | 20 | 29 | 11 | 68 | validate-tdee-engine.mjs |
| Mortgage Calculator | 4 | 25 | 26 | 8 | 3 | 66 | validate-mortgage-engine.cjs |
| Auto Loan Calculator | 5 | 18 | 18 | 14 | 6 | 61 | validate-auto-loan-engine.cjs |
| Marginal Utility Calculator | — | 12 | 8 | 14 | 26 | 60 | validate-marginal-utility-engine.cjs |
| Opportunity Cost Calculator | — | 32 | 6 | 2 | 17 | 57 | validate-opportunity-cost-engine.cjs |
| Price Elasticity of Demand Calculator | — | 43 | 5 | 4 | 3 | 55 | validate-price-elasticity-engine.cjs |
| Loan Calculator | — | 25 | 10 | 16 | 3 | 54 | validate-loan-engine.cjs |
| Mortgage Refinance Calculator | 4 | 21 | 14 | 11 | 2 | 52 | validate-refinance-engine.cjs |
| Amortization Schedule Calculator | 2 | 21 | 12 | 11 | 5 | 51 | validate-amortization-engine.cjs |
| Diminishing Returns Calculator | — | 34 | 10 | 2 | 5 | 51 | validate-diminishing-returns-engine.cjs |
| Percentage Calculator | — | 36 | 9 | 1 | 3 | 49 | validate-percentage-engine.cjs |
| Compound Interest Calculator | 8 | 20 | 9 | 9 | 2 | 48 | validate-compound-interest-engine.cjs |
| Home Affordability Calculator | 7 | 14 | 15 | 8 | 4 | 48 | validate-home-affordability-engine.cjs |
| Retirement Withdrawal Calculator | 6 | 13 | 17 | 8 | 4 | 48 | validate-retirement-withdrawal-engine.cjs |
| Debt Consolidation Calculator | — | 26 | 10 | 3 | 2 | 41 | validate-debt-consolidation-engine.cjs |
| Days Calculator | — | 27 | 10 | 2 | 1 | 40 | validate-days-calculator-engine.cjs |
| Regular Investment Calculator | 4 | 14 | 13 | 7 | 2 | 40 | validate-regular-investment-engine.cjs |
| APR Calculator | — | 4 | 7 | 20 | 7 | 38 | validate-apr-engine.cjs |
| Grade Calculator | — | 13 | 17 | 3 | 5 | 38 | validate-grade-calculator-engine.cjs |
| Age Calculator | — | 13 | 24 | — | — | 37 | validate-age-calculator-engine.cjs |
| Timesheet Calculator | — | 22 | 7 | 3 | 5 | 37 | validate-timesheet-calculator-engine.cjs |
| Rent vs Buy Calculator | — | 24 | 7 | 3 | 2 | 36 | validate-rent-vs-buy-engine.cjs |
| Gutter Calculator | 2 | 15 | 11 | 2 | 3 | 33 | validate-gutter-calculator-engine.cjs |
| Roofing Calculator | 2 | 20 | 8 | 1 | 1 | 32 | validate-roofing-calculator-engine.cjs |
| Investment Calculator | 10 | 3 | — | 10 | 8 | 31 | validate-investment-engine.cjs |
| Gratuity Calculator | 3 | 11 | 9 | 5 | 2 | 30 | validate-gratuity-calculator-engine.cjs |
| Car Lease vs Buy Calculator | — | 14 | 11 | 2 | 2 | 29 | validate-car-lease-vs-buy-engine.cjs |
| Fence Calculator | 3 | 18 | 7 | 1 | — | 29 | validate-fence-calculator-engine.cjs |
| Solar Panel Roof-Fit Calculator | — | 16 | 12 | — | — | 28 | validate-solar-roof-fit-engine.cjs |
| Time Zone Converter | — | 16 | 5 | 4 | 3 | 28 | validate-timezone-converter-engine.cjs |
| Gravel Calculator | — | 8 | 9 | 5 | 4 | 26 | validate-gravel-calculator-engine.cjs |
| Comparative Advantage Calculator | — | 14 | 7 | 4 | — | 25 | validate-comparative-advantage-engine.cjs |
| GPA Calculator | — | 10 | 11 | 3 | 1 | 25 | validate-gpa-calculator-engine.cjs |
| Insulation Calculator | — | 11 | 1 | 1 | 12 | 25 | validate-insulation-calculator-engine.cjs |
| Real Estate Investment Calculator | 7 | 7 | 11 | — | — | 25 | validate-real-estate-investment-engine.cjs |
| Time Percentage Calculator | — | 14 | 6 | — | 5 | 25 | validate-time-percentage-engine.cjs |
| Sales Tax Calculator | — | 8 | 10 | 3 | 2 | 23 | validate-sales-tax-engine.cjs |
| Debt Payoff vs Investing Calculator | 1 | 7 | 6 | 6 | 2 | 22 | validate-debt-vs-investing-engine.cjs |
| Global Import Duty Calculator | — | 15 | 4 | — | 1 | 20 | validate-import-duty-calculator-engine.cjs |
| Paint Calculator | — | 7 | 7 | 6 | — | 20 | validate-paint-calculator-engine.cjs |
| Consumer Surplus Calculator | — | 9 | 5 | 1 | 4 | 19 | validate-economics-surplus-engine.cjs |
| Deadweight Loss Calculator | — | 9 | 5 | 1 | 4 | 19 | validate-economics-surplus-engine.cjs |
| Decking Calculator | — | 14 | 3 | 2 | — | 19 | validate-decking-calculator-engine.cjs |
| Producer Surplus Calculator | — | 9 | 5 | 1 | 4 | 19 | validate-economics-surplus-engine.cjs |
| Concrete Calculator | — | 6 | 9 | 3 | — | 18 | validate-concrete-calculator-engine.cjs |
| Freelancer vs Employee Calculator | — | 12 | 6 | — | — | 18 | validate-freelancer-vs-employee-engine.cjs |
| Bicycle Tire Pressure Calculator | 1 | 4 | 9 | 3 | — | 17 | validate-tire-pressure-calculator-engine.cjs |
| Tip Calculator | — | 11 | 6 | — | — | 17 | validate-tip-calculator-engine.cjs |
| Barista FIRE Calculator | — | 4 | 7 | 3 | — | 14 | validate-barista-fire-engine.cjs |
| Coast FIRE Calculator | — | 4 | 8 | 2 | — | 14 | validate-coast-fire-engine.cjs |
| Personal Loan Calculator | — | 3 | 2 | 7 | 2 | 14 | validate-personal-loan-engine.cjs |
| ROI Calculator | — | 8 | 1 | 2 | 3 | 14 | validate-roi-engine.cjs |
| UAE Gratuity Calculator | 7 | — | 4 | 3 | — | 14 | validate-uae-gratuity-calculator-engine.cjs |
A dash means that calculator has no case of that kind. The test files live in the project's scripts/ directory under the exact filenames shown; the repository itself is private, so the filename is given as a stable identifier you can cite or ask about through contact rather than as a public source link.
The largest suites
The 10 biggest test files, so you can see directly where the sitewide total comes from. A suite listed as generated produces its cases from loops over input ranges rather than from individually written scenarios.
| Suite | Covers | Kind | Cases | Share |
|---|---|---|---|---|
401(k) enginescripts/validate-401k.mjs | 1 calculator | Generated (property-based) | 3,622 | 36.3% |
Retirement enginescripts/validate-retirement.mjs | 1 calculator | Generated (property-based) | 1,319 | 13.2% |
Take-home-pay enginescripts/validate-take-home-pay-engine.cjs | 1 calculator | Hand-written cases | 262 | 2.6% |
LTV:CAC enginescripts/validate-ltv-cac-engine.cjs | 1 calculator | Hand-written cases | 234 | 2.3% |
Savings enginescripts/validate-savings.mjs | 1 calculator | Hand-written cases | 219 | 2.2% |
CD enginescripts/validate-cd.mjs | 1 calculator | Hand-written cases | 179 | 1.8% |
VAT enginescripts/validate-vat-engine.cjs | 1 calculator | Hand-written cases | 145 | 1.5% |
Break-even ROAS enginescripts/validate-break-even-roas-engine.cjs | 1 calculator | Hand-written cases | 128 | 1.3% |
Income tax enginescripts/validate-income-tax-engine.cjs | 1 calculator | Hand-written cases | 127 | 1.3% |
Profit-margin enginescripts/validate-profit-margin-engine.cjs | 1 calculator | Hand-written cases | 125 | 1.3% |
What this does not prove
- It is not an independent audit. The tests were written by the same person who wrote the calculators. A case checked against an outside authority is stronger evidence than one checked against my own arithmetic, which is why those are counted separately above.
- A passing suite only proves the formula matches the cases that were chosen. It cannot prove the right formula was chosen for your situation, and it says nothing about inputs nobody thought to test.
- It is not a guarantee of a result. A lender, tax authority, or supplier applies your exact rate, fees, rounding, and local rules. Every calculator here is a planning estimate under the assumptions printed on its own page. See the Disclaimer.
- Counts are not comparable across calculators. A two-input formula can be exhaustively covered in a couple of dozen cases; an amortisation engine cannot. Read a row against what that calculator actually has to get right, not against the row above it.
- If you find a result that is wrong, the corrections process is how it gets reproduced, fixed at the formula, and re-verified.
Machine-readable version
The same data, generated by the same run, is published as JSON at /formula-verification.json so it can be cited, diffed between releases, and checked without scraping this page. It carries the generation date, the per-calculator counts and case mix, and the per-suite breakdown. It is free to cite and republish with attribution.
Both this page and that file are rendered from one generated source file. There is deliberately no second derivation path, because a trust page whose numbers drift from its own source data is worse than no page.
How the numbers get here
A single gate discovers every test file, bundles each calculator's shipped engine from source, runs the file, and reads a structured result the file writes as it goes: the calculator slug it covers, every case name, that case's kind, and whether it passed. Nothing on this page is typed in by hand, and the aggregation never re-counts or re-interprets a suite's output.
A file that runs cleanly but produces no structured result is treated as a failure and blocks the report outright, rather than quietly contributing zero. Two further cross-checks run on every regeneration: each slug a suite claims must be a genuinely live public calculator, and it must match the separate, hand-maintained release-gate inventory that maps each calculator to its test file. Any mismatch stops the report from being written at all.
Regeneration happens whenever a formula changes. The date at the top of this page is the date the run above was produced, not the date this page was last deployed.