test job
python -m pytest -q
The repo's test_protocol.py, all of it. pytest 8.3.5 comes from the Pyodide distribution (the repo pins 8.4.2).
Live demo · one-time-pad allocation
Five parties share a pool of one-time pads, and no pad may ever be used twice. You send their messages and choose which undelivered one the network hands over next. The repo's own protocol code picks every pad, and each one is checked against every pad used before it.
Downloads Pyodide 0.29.5 from cdn.jsdelivr.net, about 5.3 MB compressed, once; your browser caches it. The test job in the CI tab adds pytest, about 1.6 MB more.
Parties: click one to send a message
In flight
Keys: 0–4 send · F L A deliver oldest, newest, adversarial · S one auto step · P play or pause
Or let the loop from simulation.run drive (changing these restarts)
Events, newest first
One call to simulation.run for each protocol in eval_protocol.PROTOCOLS, with the settings below, run in your browser. The default is the schedule that strands the most pads: every party but one sends once and goes quiet.
A committed summary.csv cell is the worst of 12 such runs (eval_protocol.measure: random and adversarial delivery, eager and lazy pressure, seeds 0 to 2). Its value is shown under each bar for n = 5,000.
The steps of the repo's .github/workflows/tests.yml that can run in a browser, on Pyodide's CPython. Not run here: ruff check and ruff format --check, because ruff has no Pyodide build.
test job
python -m pytest -q
The repo's test_protocol.py, all of it. pytest 8.3.5 comes from the Pyodide distribution (the repo pins 8.4.2).
test job
python main.py --m 5
The repo's walk-through: a hand-driven trace of the reserve map, then all three protocols when one party does the talking.
lint job
python eval_protocol.py --out /tmp/summary.csv
diff summary.csv /tmp/summary.csv
Regenerates the evaluation grid and compares it with the summary.csv committed at 662f578.