1# Test MicroPython extensions on CPython asyncio:
2# - sleep_ms
3# - wait_for_ms
4
5try:
6    import utime, uasyncio
7except ImportError:
8    print("SKIP")
9    raise SystemExit
10
11
12async def task(id, t):
13    print("task start", id)
14    await uasyncio.sleep_ms(t)
15    print("task end", id)
16    return id * 2
17
18
19async def main():
20    # Simple sleep_ms
21    t0 = utime.ticks_ms()
22    await uasyncio.sleep_ms(1)
23    print(utime.ticks_diff(utime.ticks_ms(), t0) < 100)
24
25    # When task finished before the timeout
26    print(await uasyncio.wait_for_ms(task(1, 5), 50))
27
28    # When timeout passes and task is cancelled
29    try:
30        print(await uasyncio.wait_for_ms(task(2, 50), 5))
31    except uasyncio.TimeoutError:
32        print("timeout")
33
34    print("finish")
35
36
37uasyncio.run(main())
38