1+ from functools import partial
12from typing import NoReturn
23
34import pytest
@@ -25,6 +26,10 @@ def f2(a: object, b: object) -> NoReturn:
2526 assert is_function (f1 , 1 )
2627 assert is_function (f2 , 2 )
2728
29+ assert is_function (f0 , 0 , coroutine = False )
30+ assert is_function (f1 , 1 , coroutine = False )
31+ assert is_function (f2 , 2 , coroutine = False )
32+
2833 assert not (is_function (f0 , 1 ) or is_function (f0 , 2 ))
2934 assert not (is_function (f1 , 0 ) or is_function (f1 , 2 ))
3035 assert not (is_function (f2 , 0 ) or is_function (f2 , 1 ))
@@ -36,6 +41,32 @@ def f2(a: object, b: object) -> NoReturn:
3641 is_function (f0 , - 1 )
3742
3843
44+ def test_function_partial () -> None :
45+ def f0 (one_arg : int ) -> int :
46+ return one_arg
47+
48+ f = partial (f0 , 1 )
49+ assert is_function (f , 0 )
50+ assert not is_function (f , 1 )
51+
52+
53+ def test_function_varargs () -> None :
54+ def f (* args ) -> None :
55+ return None
56+
57+ assert is_function (f , 0 )
58+ assert is_function (f , 1 )
59+ assert is_function (f , 100 )
60+
61+ def g (a , b = 1 , * args ) -> None :
62+ return None
63+
64+ assert not is_function (g , 0 )
65+ assert is_function (g , 1 )
66+ assert is_function (g , 2 )
67+ assert is_function (g , 100 )
68+
69+
3970class AClass :
4071 def method_a (self ) -> NoReturn :
4172 raise RuntimeError ("function should not get called" )
@@ -78,3 +109,4 @@ async def f_async() -> NoReturn:
78109 assert not is_function (f_async , 0 , coroutine = False )
79110 assert is_function (f_async , 0 , coroutine = True )
80111 assert not is_function (f_async , 0 )
112+ assert is_function (f_async , 0 , coroutine = None )
0 commit comments