Major fixes and new features
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
145
venv/lib/python3.12/site-packages/mypyc/test-data/run-async.test
Normal file
145
venv/lib/python3.12/site-packages/mypyc/test-data/run-async.test
Normal file
@@ -0,0 +1,145 @@
|
||||
# async test cases (compile and run)
|
||||
|
||||
[case testAsync]
|
||||
import asyncio
|
||||
|
||||
async def h() -> int:
|
||||
return 1
|
||||
|
||||
async def g() -> int:
|
||||
await asyncio.sleep(0)
|
||||
return await h()
|
||||
|
||||
async def f() -> int:
|
||||
return await g()
|
||||
|
||||
[file asyncio/__init__.pyi]
|
||||
async def sleep(t: float) -> None: ...
|
||||
|
||||
[typing fixtures/typing-full.pyi]
|
||||
|
||||
[file driver.py]
|
||||
from native import f
|
||||
import asyncio
|
||||
|
||||
result = asyncio.run(f())
|
||||
assert result == 1
|
||||
|
||||
[case testAsyncWith]
|
||||
from testutil import async_val
|
||||
|
||||
class async_ctx:
|
||||
async def __aenter__(self) -> str:
|
||||
await async_val("enter")
|
||||
return "test"
|
||||
|
||||
async def __aexit__(self, x, y, z) -> None:
|
||||
await async_val("exit")
|
||||
|
||||
|
||||
async def async_with() -> str:
|
||||
async with async_ctx() as x:
|
||||
return await async_val("body")
|
||||
|
||||
|
||||
[file driver.py]
|
||||
from native import async_with
|
||||
from testutil import run_generator
|
||||
|
||||
yields, val = run_generator(async_with(), [None, 'x', None])
|
||||
assert yields == ('enter', 'body', 'exit'), yields
|
||||
assert val == 'x', val
|
||||
|
||||
|
||||
[case testAsyncReturn]
|
||||
from testutil import async_val
|
||||
|
||||
async def async_return() -> str:
|
||||
try:
|
||||
return 'test'
|
||||
finally:
|
||||
await async_val('foo')
|
||||
|
||||
[file driver.py]
|
||||
from native import async_return
|
||||
from testutil import run_generator
|
||||
|
||||
yields, val = run_generator(async_return())
|
||||
assert yields == ('foo',)
|
||||
assert val == 'test', val
|
||||
|
||||
|
||||
[case testAsyncFor]
|
||||
from typing import AsyncIterable, List, Set, Dict
|
||||
|
||||
async def async_iter(xs: AsyncIterable[int]) -> List[int]:
|
||||
ys = []
|
||||
async for x in xs:
|
||||
ys.append(x)
|
||||
return ys
|
||||
|
||||
async def async_comp(xs: AsyncIterable[int]) -> List[int]:
|
||||
ys = [x async for x in xs]
|
||||
return ys
|
||||
|
||||
async def async_comp_set(xs: AsyncIterable[int]) -> Set[int]:
|
||||
return {x async for x in xs}
|
||||
|
||||
async def async_comp_dict(xs: AsyncIterable[int]) -> Dict[int, str]:
|
||||
return {x: str(x) async for x in xs}
|
||||
|
||||
[typing fixtures/typing-full.pyi]
|
||||
|
||||
[file driver.py]
|
||||
from native import async_iter, async_comp, async_comp_set, async_comp_dict
|
||||
from testutil import run_generator, async_val
|
||||
from typing import AsyncIterable, List
|
||||
|
||||
# defined here since we couldn't do it inside the test yet...
|
||||
async def foo() -> AsyncIterable[int]:
|
||||
for x in range(3):
|
||||
await async_val(x)
|
||||
yield x
|
||||
|
||||
yields, val = run_generator(async_iter(foo()))
|
||||
assert val == [0,1,2], val
|
||||
assert yields == (0,1,2), yields
|
||||
|
||||
yields, val = run_generator(async_comp(foo()))
|
||||
assert val == [0,1,2], val
|
||||
assert yields == (0,1,2), yields
|
||||
|
||||
yields, val = run_generator(async_comp_set(foo()))
|
||||
assert val == {0,1,2}, val
|
||||
assert yields == (0,1,2), yields
|
||||
|
||||
yields, val = run_generator(async_comp_dict(foo()))
|
||||
assert val == {0: '0',1: '1', 2: '2'}, val
|
||||
assert yields == (0,1,2), yields
|
||||
|
||||
[case testAsyncFor2]
|
||||
from typing import AsyncIterable, List
|
||||
|
||||
async def async_iter(xs: AsyncIterable[int]) -> List[int]:
|
||||
ys = []
|
||||
async for x in xs:
|
||||
ys.append(x)
|
||||
return ys
|
||||
|
||||
[typing fixtures/typing-full.pyi]
|
||||
|
||||
[file driver.py]
|
||||
from native import async_iter
|
||||
from testutil import run_generator, async_val
|
||||
from typing import AsyncIterable, List
|
||||
|
||||
# defined here since we couldn't do it inside the test yet...
|
||||
async def foo() -> AsyncIterable[int]:
|
||||
for x in range(3):
|
||||
await async_val(x)
|
||||
yield x
|
||||
raise Exception('lol no')
|
||||
|
||||
yields, val = run_generator(async_iter(foo()))
|
||||
assert yields == (0,1,2), yields
|
||||
assert val == 'lol no', val
|
||||
Reference in New Issue
Block a user