summaryrefslogtreecommitdiffstatshomepage
path: root/tests/extmod/uasyncio_gather.py
diff options
context:
space:
mode:
authorDamien George <damien.p.george@gmail.com>2019-11-13 21:08:22 +1100
committerDamien George <damien.p.george@gmail.com>2020-03-26 01:25:45 +1100
commitc4935f30490d0446e16a51dbf7a6397b771cf804 (patch)
treeb095dd91914950939d4d0cdc10e7be3625fff00d /tests/extmod/uasyncio_gather.py
parent63b99443820f53afbdab5201044629d2bfecd73b (diff)
downloadmicropython-c4935f30490d0446e16a51dbf7a6397b771cf804.tar.gz
micropython-c4935f30490d0446e16a51dbf7a6397b771cf804.zip
tests/extmod: Add uasyncio tests.
All .exp files are included because they require CPython 3.8 which may not always be available.
Diffstat (limited to 'tests/extmod/uasyncio_gather.py')
-rw-r--r--tests/extmod/uasyncio_gather.py49
1 files changed, 49 insertions, 0 deletions
diff --git a/tests/extmod/uasyncio_gather.py b/tests/extmod/uasyncio_gather.py
new file mode 100644
index 0000000000..2697a6278b
--- /dev/null
+++ b/tests/extmod/uasyncio_gather.py
@@ -0,0 +1,49 @@
+# test uasyncio.gather() function
+
+try:
+ import uasyncio as asyncio
+except ImportError:
+ try:
+ import asyncio
+ except ImportError:
+ print("SKIP")
+ raise SystemExit
+
+
+async def factorial(name, number):
+ f = 1
+ for i in range(2, number + 1):
+ print("Task {}: Compute factorial({})...".format(name, i))
+ await asyncio.sleep(0.01)
+ f *= i
+ print("Task {}: factorial({}) = {}".format(name, number, f))
+ return f
+
+
+async def task(id):
+ print("start", id)
+ await asyncio.sleep(0.2)
+ print("end", id)
+
+
+async def gather_task():
+ print("gather_task")
+ await asyncio.gather(task(1), task(2))
+ print("gather_task2")
+
+
+async def main():
+ # Simple gather with return values
+ print(await asyncio.gather(factorial("A", 2), factorial("B", 3), factorial("C", 4),))
+
+ # Cancel a multi gather
+ # TODO doesn't work, Task should not forward cancellation from gather to sub-task
+ # but rather CancelledError should cancel the gather directly, which will then cancel
+ # all sub-tasks explicitly
+ # t = asyncio.create_task(gather_task())
+ # await asyncio.sleep(0.1)
+ # t.cancel()
+ # await asyncio.sleep(0.01)
+
+
+asyncio.run(main())