Anyone can produce practice questions. Being sure the answer is right is the hard part — one wrong answer, taught confidently, is worse than no practice at all. This is the machinery that stands behind every question we serve, and the numbers it currently reports.
Two computations, every question
The answer is worked out twice, two different ways
Every template ships a solver and an independent verifier, and the verifier has to reach the answer by a different route — substituting numbers where the solver did algebra, brute-forcing where it used a formula. The check is not a release step: the generator runs the verifier on every question it produces, including the one in your mock, and refuses to serve a question the two disagree on.
1558 of 1558 templates carry an independent verifier
Before a template merges
500 seeds, every template, every run
A template is a parameter space, so testing one question proves nothing. Each exam template is swept across 500 seeds and each drill warm-up across 120, on every run of the test suite — not once at review time.
✓Four distinct options — no accidental duplicate
✓Verifier agrees with the solver
✓Every LaTeX string parses and renders
✓Parameters stay inside their declared range
290,700 generated questions checked per suite run
Benchmarked, not asserted
Measured against 14 years of real papers
Topic mix, Section A/B placement and the difficulty curve are compared against every HKDSE Maths (Compulsory Part) Paper 2 from 2012 to 2025 — 630 question slots, reduced to topic labels, section positions and the HKEAA's published territory-wide correct rates. A change to the question bank that pulls a paper away from that distribution fails the build.
What that dataset is
Statistics, and nothing else. It holds a topic label, a position and a correct rate per slot. No HKEAA question text, numbers, figures or answer options appear in it — or anywhere else in this product. Every question you sit was written from a syllabus learning objective.
630 real question slots · 14 years · 2012–2025
Where the answers live
Your paper is marked on the server, not in your browser
A stored paper is 45 pairs of (template, seed) — the answers are not in the page you are sitting. When you submit, the server regenerates all 45 questions from those pairs and marks them there. It is the reason a score means something, and the reason your topic analytics can be trusted.
45 (template, seed) pairs per paper · 0 answers sent before you submit
Every bank change is recorded
Adding a question type is a gated change
Adding, retiring or re-tiering a template requires a fresh row in a committed ledger: reachable parameter space, repeat rate across papers, difficulty fit, distractor and style conformance. The build recomputes the row and fails when it disagrees with what was committed. When a gate goes red the fix is the bank, never the threshold.
1558 templates · 42 topics · one ledger row per change
The honest part
What we don't claim
We don't predict your grade. Nobody can calibrate that without real HKDSE outcome data per student, so we report what you got right, by topic, and leave the forecasting alone.
No plan is unlimited. Every paid plan says exactly how many mocks it includes in 30 days, and the free plan — a real plan, not a trial — gives you the current curated mock, with a new one each time we publish.
We are not affiliated with the HKEAA, and this is not a past-paper archive. If you want the real papers, get them from the HKEAA.
Machines check the mathematics; they can still miss awkward wording. Every question carries a report button, and a report names the template and seed — so we regenerate the exact question you saw, not one like it.
See it for yourself
The free plan includes a full 45-question mock — same engine, same verification, same server-side marking as the paid plans — and a new one each time we publish.