summaryrefslogtreecommitdiffstats
path: root/venv/lib/python3.9/site-packages/trio/tests/test_scheduler_determinism.py
diff options
context:
space:
mode:
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.py40
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