diff options
Diffstat (limited to 'venv/lib/python3.9/site-packages/trio/tests/test_scheduler_determinism.py')
-rw-r--r-- | venv/lib/python3.9/site-packages/trio/tests/test_scheduler_determinism.py | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/venv/lib/python3.9/site-packages/trio/tests/test_scheduler_determinism.py b/venv/lib/python3.9/site-packages/trio/tests/test_scheduler_determinism.py new file mode 100644 index 00000000..e2d3167e --- /dev/null +++ b/venv/lib/python3.9/site-packages/trio/tests/test_scheduler_determinism.py @@ -0,0 +1,40 @@ +import trio + + +async def scheduler_trace(): + """Returns a scheduler-dependent value we can use to check determinism.""" + trace = [] + + async def tracer(name): + for i in range(50): + trace.append((name, i)) + await trio.sleep(0) + + async with trio.open_nursery() as nursery: + for i in range(5): + nursery.start_soon(tracer, i) + + return tuple(trace) + + +def test_the_trio_scheduler_is_not_deterministic(): + # At least, not yet. See https://github.com/python-trio/trio/issues/32 + traces = [] + for _ in range(10): + traces.append(trio.run(scheduler_trace)) + assert len(set(traces)) == len(traces) + + +def test_the_trio_scheduler_is_deterministic_if_seeded(monkeypatch): + monkeypatch.setattr(trio._core._run, "_ALLOW_DETERMINISTIC_SCHEDULING", True) + traces = [] + for _ in range(10): + state = trio._core._run._r.getstate() + try: + trio._core._run._r.seed(0) + traces.append(trio.run(scheduler_trace)) + finally: + trio._core._run._r.setstate(state) + + assert len(traces) == 10 + assert len(set(traces)) == 1 |