How the calculators are tested
The About page claims the arithmetic on this site is checked before it ships. This page is that claim in table form: every test suite in the build, what it re-derives, and how many separate assertions it makes. The numbers below are not typed by hand. They are written into this page by the build script from the output of the suites themselves, so a suite that shrinks, breaks, or disappears changes this table on the next release.
Last built from a full run of the suites: 8,451 assertions across 34 of them, 31 mirroring one calculator each and 3 covering the guides and the site’s own published claims.
| Suite | What it re-derives | Assertions |
|---|---|---|
tests/mirror_attendance-grade-calculator.py | Attendance Grade Calculator and the numbers printed in its guide | 42 |
tests/mirror_australian-gpa-calculator.py | Australian GPA and WAM Calculator and the numbers printed in its guide | 170 |
tests/mirror_canadian-gpa-calculator.py | Canadian GPA Calculator (Percent to 4.0) and the numbers printed in its guide | 487 |
tests/mirror_cao-points-calculator.py | CAO Points Calculator (Leaving Cert) and the numbers printed in its guide | 302 |
tests/mirror_cgpa-to-percentage-calculator.py | CGPA to Percentage Calculator (India) and the numbers printed in its guide | 1,186 |
tests/mirror_class-rank-calculator.py | Class Rank Calculator and the numbers printed in its guide | 58 |
tests/mirror_college-gpa-calculator.py | College GPA Calculator and the numbers printed in its guide | 57 |
tests/mirror_cumulative-gpa-calculator.py | Cumulative GPA Calculator and the numbers printed in its guide | 53 |
tests/mirror_curve-applier.py | Curve Applier and the numbers printed in its guide | 78 |
tests/mirror_ects-grade-conversion-calculator.py | ECTS Grade Conversion Calculator and the numbers printed in its guide | 524 |
tests/mirror_exam-curve-calculator.py | Exam Curve Calculator and the numbers printed in its guide | 70 |
tests/mirror_extra-credit-calculator.py | Extra Credit Calculator and the numbers printed in its guide | 77 |
tests/mirror_final-grade-calculator.py | Final Grade Calculator and the numbers printed in its guide | 62 |
tests/mirror_german-grade-calculator.py | German Grade Calculator (Bavarian Formula) and the numbers printed in its guide | 2,386 |
tests/mirror_gpa-calculator-433.py | GPA Calculator (4.33 Scale) and the numbers printed in its guide | 59 |
tests/mirror_gpa-calculator.py | GPA Calculator and the numbers printed in its guide | 57 |
tests/mirror_grade-calculator.py | Grade Calculator and the numbers printed in its guide | 44 |
tests/mirror_grade-needed-calculator.py | Grade Needed Calculator and the numbers printed in its guide | 53 |
tests/mirror_gradebook-average-calculator.py | Gradebook Average Calculator and the numbers printed in its guide | 61 |
tests/mirror_high-school-gpa-calculator.py | High School GPA Calculator and the numbers printed in its guide | 59 |
tests/mirror_late-penalty-calculator.py | Late Penalty Calculator and the numbers printed in its guide | 594 |
tests/mirror_letter-grade-to-gpa.py | Letter Grade to GPA and the numbers printed in its guide | 59 |
tests/mirror_pass-fail-impact-calculator.py | Pass/Fail Impact Calculator and the numbers printed in its guide | 99 |
tests/mirror_percentage-to-gpa-calculator.py | Percentage to GPA and the numbers printed in its guide | 72 |
tests/mirror_percentage-to-letter-grade.py | Percentage to Letter Grade and the numbers printed in its guide | 58 |
tests/mirror_r-score-calculator.py | R Score Calculator (Quebec Cote R) and the numbers printed in its guide | 321 |
tests/mirror_raise-my-gpa-planner.py | Raise My GPA Planner and the numbers printed in its guide | 57 |
tests/mirror_semester-grade-calculator.py | Semester Grade Calculator and the numbers printed in its guide | 52 |
tests/mirror_test-average-calculator.py | Test Average Calculator and the numbers printed in its guide | 56 |
tests/mirror_uk-degree-classification-calculator.py | UK Degree Classification Calculator and the numbers printed in its guide | 127 |
tests/mirror_weighted-grade-calculator.py | Weighted Grade Calculator and the numbers printed in its guide | 56 |
tests/mirror_guides.py | The worked examples in five standalone guides: finals leverage, weighted against unweighted GPA, admissions recalculation, credit hours, and the 89.5 rounding question. | 64 |
tests/mirror_phase2_guides.py | Every cell of the two target-grade guides - what do I need to get an A, and what do I need to pass - recomputed from the final-grade formula. | 88 |
tests/mirror_prose.py | Figures stated in sentences rather than printed by a calculator, plus the site's claims about itself: the published counts, the citations each page promises, and the fetch log behind them. | 863 |
| 34 suites | Total | 8,451 |
What one assertion is
A mirror suite is a second implementation of a calculator, written in Python, that never imports the site’s JavaScript. It computes the same answer from the same inputs and compares. One assertion is one such comparison: this input, on this scale, must produce this output. A tool with 60 assertions has been asked 60 questions with known answers — ordinary cases, boundary scores, impossible targets, already-secured targets, malformed input, and the exact rounding the browser performs, which is not the rounding Python performs by default.
Where a calculator carries a published table — a letter ladder, a percentage band, a classification boundary — the mirror reads that table out of the JavaScript source and asserts it against its own copy, so a silent edit to a grading scale fails the build rather than shipping.
The suites at the foot of the table are not tied to one calculator. They re-derive the worked examples printed in the guides that have no calculator of their own, and they check the site’s own statements: that the counts on the homepage match the number of files, that the pages promising a source actually link one, and that the fetch log behind every outbound citation records a 200, from its latest check or, where the linked site’s robots.txt or bot defenses rule out a re-check, from the dated check that last confirmed it.
What this table does not prove
Two implementations that agree still rest on one reading of the source. A mirror catches arithmetic error, rounding drift, and a table edited in one place and not the other. It cannot tell you that a policy has been read correctly, that an institution has not changed its rules since the citation was checked, or that a calculator is answering the question you actually have. Those are what the sources on each page and the plain statements of limits are for, and they are why every tool says the same thing at the bottom: your syllabus wins.
The suites also run before a release, not in your browser. If you find a number here that disagrees with your own arithmetic, that is worth an email: a confirmed error becomes a failing assertion in the relevant suite first, and only then gets fixed, so the same mistake cannot return in a later change.