eqlx.org / How we test
Evidence
Every number checked against something that does not share its code.
A test that repeats the code's own formula proves nothing. These tools are checked against published figures, exact answers, slow second versions and simulation.
1,258tests in 6 repositories
42headline checks, listed below
4errors found in official documents
0customer files used, ever
Four kinds of independent truth
Every calculation is held to at least one of them.
Published examplesThe worked examples in standards, regulations and papers, reproduced to the printed digit.
Closed formsWhere a formula has an exact answer, the code must reach it.
Brute forceA slow, obvious second version of the calculation; both must agree.
SimulationMillions of random cases where a result is a probability or a band.
Tool by tool
The headline checks from each tool's page. The full list is in each repository's tests.
✓8 of 8 columnsBasel II Annex 5 risk weights · 152 figures, none off by more than 0.01
✓0.29 %, 0.33 %, 0.76 %Pluto and Tasche 2005 · the paper's worked example
✓94.5 % of 400simulated portfolios where the 95 % interval of the AUC held the true value
✓29 Februarydefault rates per year on hand-built cases, including the one-year boundary
✓1,250IFRS 9 Example 8 · 12-month loss
✓750 and 675Example 9 · loss-rate approach
✓25,000 and 45,000Example 10 · credit lines
✓580,000Example 12 · provision matrix
✓114 and 145IFRS 7 guidance · two matrices
✓92, not 70Standard-setter's scenario example
✓0.002736Israel, Rosenthal, Wei 2001 · rating matrix
✓73.80 and 26.20ECB review manual · collateral sale
✓84 and 216ECB guidance · sale after five years
✓46,476ECB review manual · cash flow times six
✓141.70 and 103.50ECB review manual · project loan
✓107.09 and 2.99CreditMetrics · value of one bond after a year, and its spread
✓3.18Same bond · with uncertain recovery
✓14 of 14CreditMetrics · rating thresholds of two borrowers
✓64 of 64CreditMetrics · joint rating table, each cell within 0.01 point
✓30 of 30CreditMetrics · simulated scenarios mapped to ratings
✓204.40CreditMetrics · worst 1 % value of two bonds
✓14,221,863CreditRisk+ · expected loss of its 25-borrower example
✓within 0.2 %CreditRisk+ · the example's 95th to 99.9th percentile losses
✓899.75 and 899.81Consumer credit regulation · 12-month plan, every row
✓1,718.61 and 1,718.72Same regulation · 36-month plan
✓888.49Housing finance regulation · Annex 1
✓1,345.94 and 1,344.88Partial prepayment · two examples
✓5.40Late interest · instalment 10 days late
✓8 of 8Directive 98/7/EC · cost rate examples
✓1.64 % and 2.23 %TCMB · early repayment fee examples
✓1 November 2026TCMB · card rate ceiling table
✓1.018229476Borsa İstanbul · TLREF example
✓0 false alarmson GİB's public e-Defter samples
✓Real findings onlyon GİB's e-Fatura samples: each one is an inconsistency in the sample
✓62 testsincluding malicious XML, ZIP bombs and attempts to read outside the folder
✓2 per checkone made-up document that triggers it, one that does not
✓Hostile XML refusedentity expansion and external entities
✓ZIP limitsread in memory; size, file count and compression ratio capped
✓Brute forcea slow second version tries every possibility; both agreed on hundreds of random transfer sets
✓Shuffled rowsthe result does not change with the order of the file
✓Fresh processnor with Python's randomised hashing
✓360 testsrun on every change
Errors found in official documents
Printed figures that do not follow from the document's own tables. Crossed out: what is printed. Below: what the tests assert, and why.
What the tests do not prove
That your inputs are rightDefault probabilities, rates and thresholds are yours. The tools compute; they do not estimate.
That a regulator agreesMatching a published example is evidence, not approval. No tool is a supervisory filing.
That every case is coveredEach tool lists what it does not do, on its page and in LIMITS.md in its repository.