From: Stefan Behnel Date: Sat, 2 Feb 2008 11:36:30 +0000 (+0100) Subject: test argument unpacking code for extension types and Python types X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=2e257fcf1996a76840f6031012527fb3a985b34d;p=cython.git test argument unpacking code for extension types and Python types --- diff --git a/tests/run/classkwonlyargs.pyx b/tests/run/classkwonlyargs.pyx new file mode 100644 index 00000000..31e5b36e --- /dev/null +++ b/tests/run/classkwonlyargs.pyx @@ -0,0 +1,110 @@ +__doc__ = """ + >>> spam = Spam() + >>> b,c,d,e,f,g,h,k = spam.b,spam.c,spam.d,spam.e,spam.f,spam.g,spam.h,spam.k + + >>> b(1,2,3) + >>> b(1,2,3,4) + Traceback (most recent call last): + TypeError: function takes exactly 4 arguments (5 given) + + >>> c(1,2) + >>> c(1,2,3) + >>> c(1,2,3,4) + Traceback (most recent call last): + TypeError: function takes at most 4 arguments (5 given) + + >>> d(1,2) + >>> d(1,2, c=1) + + >>> d(1,2,3) + Traceback (most recent call last): + TypeError: function takes at most 3 positional arguments (4 given) + >>> d(1,2, d=1) + Traceback (most recent call last): + TypeError: 'd' is an invalid keyword argument for this function + + >>> e(1,2) + >>> e(1,2, c=1) + >>> e(1,2, d=1) + >>> e(1,2, c=1, d=2, e=3) + >>> e(1,2,3) + >>> e(1,2,3,4) + Traceback (most recent call last): + TypeError: function takes at most 4 positional arguments (5 given) + + >>> f(1,2, c=1) + >>> f(1,2, c=1, d=2) + + >>> f(1,2,3) + Traceback (most recent call last): + TypeError: function takes at most 3 positional arguments (4 given) + >>> f(1,2) + Traceback (most recent call last): + TypeError: required keyword argument 'c' is missing + >>> f(1,2, c=1, e=2) + Traceback (most recent call last): + TypeError: 'e' is an invalid keyword argument for this function + + >>> g(1,2, c=1, f=2) + >>> g(1,2, c=1, e=0, f=2, d=11) + >>> g(1,2, c=1, f=2, e=0, x=25) + + >>> g(1,2,3) + Traceback (most recent call last): + TypeError: function takes at most 3 positional arguments (4 given) + >>> g(1,2) + Traceback (most recent call last): + TypeError: required keyword argument 'c' is missing + >>> g(1,2, c=1) + Traceback (most recent call last): + TypeError: required keyword argument 'f' is missing + + >>> h(1,2, c=1, f=2) + >>> h(1,2, c=1, f=2, e=3) + >>> h(1,2,3,4,5,6, c=1, f=2) + >>> h(1,2,3,4,5,6, c=1, f=2, e=3, x=25, y=11) + + >>> h(1,2,3) + Traceback (most recent call last): + TypeError: required keyword argument 'c' is missing + >>> h(1,2, d=1) + Traceback (most recent call last): + TypeError: required keyword argument 'c' is missing + + >>> k(1,2, c=1, f=2) + >>> k(1,2, c=1, f=2, e=3) + >>> k(1,2,3,4,5,6, d=1, f=2) + >>> k(1,2,3,4,5,6, d=1, f=2, e=3, x=25, y=11) + + >>> k(1,2,3) + Traceback (most recent call last): + TypeError: required keyword argument 'f' is missing + >>> k(1,2, d=1) + Traceback (most recent call last): + TypeError: required keyword argument 'f' is missing +""" + +class Spam: + def b(self, a, b, c): + pass + + def c(self, a, b, c=1): + pass + + def d(self, a, b, *, c = 88): + pass + + def e(self, a, b, c = 88, **kwds): + pass + + def f(self, a, b, *, c, d = 42): + pass + + def g(self, a, b, *, c, d = 42, e = 17, f, **kwds): + pass + + def h(self, a, b, *args, c, d = 42, e = 17, f, **kwds): + pass + + def k(self, a, b, c=1, *args, d = 42, e = 17, f, **kwds): + pass diff --git a/tests/run/extkwonlyargs.pyx b/tests/run/extkwonlyargs.pyx new file mode 100644 index 00000000..5c14e55f --- /dev/null +++ b/tests/run/extkwonlyargs.pyx @@ -0,0 +1,110 @@ +__doc__ = """ + >>> ext = Ext() + >>> b,c,d,e,f,g,h,k = ext.b,ext.c,ext.d,ext.e,ext.f,ext.g,ext.h,ext.k + + >>> b(1,2,3) + >>> b(1,2,3,4) + Traceback (most recent call last): + TypeError: function takes exactly 3 arguments (4 given) + + >>> c(1,2) + >>> c(1,2,3) + >>> c(1,2,3,4) + Traceback (most recent call last): + TypeError: function takes at most 3 arguments (4 given) + + >>> d(1,2) + >>> d(1,2, c=1) + + >>> d(1,2,3) + Traceback (most recent call last): + TypeError: function takes at most 2 positional arguments (3 given) + >>> d(1,2, d=1) + Traceback (most recent call last): + TypeError: 'd' is an invalid keyword argument for this function + + >>> e(1,2) + >>> e(1,2, c=1) + >>> e(1,2, d=1) + >>> e(1,2, c=1, d=2, e=3) + >>> e(1,2,3) + >>> e(1,2,3,4) + Traceback (most recent call last): + TypeError: function takes at most 3 positional arguments (4 given) + + >>> f(1,2, c=1) + >>> f(1,2, c=1, d=2) + + >>> f(1,2,3) + Traceback (most recent call last): + TypeError: function takes at most 2 positional arguments (3 given) + >>> f(1,2) + Traceback (most recent call last): + TypeError: required keyword argument 'c' is missing + >>> f(1,2, c=1, e=2) + Traceback (most recent call last): + TypeError: 'e' is an invalid keyword argument for this function + + >>> g(1,2, c=1, f=2) + >>> g(1,2, c=1, e=0, f=2, d=11) + >>> g(1,2, c=1, f=2, e=0, x=25) + + >>> g(1,2,3) + Traceback (most recent call last): + TypeError: function takes at most 2 positional arguments (3 given) + >>> g(1,2) + Traceback (most recent call last): + TypeError: required keyword argument 'c' is missing + >>> g(1,2, c=1) + Traceback (most recent call last): + TypeError: required keyword argument 'f' is missing + + >>> h(1,2, c=1, f=2) + >>> h(1,2, c=1, f=2, e=3) + >>> h(1,2,3,4,5,6, c=1, f=2) + >>> h(1,2,3,4,5,6, c=1, f=2, e=3, x=25, y=11) + + >>> h(1,2,3) + Traceback (most recent call last): + TypeError: required keyword argument 'c' is missing + >>> h(1,2, d=1) + Traceback (most recent call last): + TypeError: required keyword argument 'c' is missing + + >>> k(1,2, c=1, f=2) + >>> k(1,2, c=1, f=2, e=3) + >>> k(1,2,3,4,5,6, d=1, f=2) + >>> k(1,2,3,4,5,6, d=1, f=2, e=3, x=25, y=11) + + >>> k(1,2,3) + Traceback (most recent call last): + TypeError: required keyword argument 'f' is missing + >>> k(1,2, d=1) + Traceback (most recent call last): + TypeError: required keyword argument 'f' is missing +""" + +cdef class Ext: + def b(self, a, b, c): + pass + + def c(self, a, b, c=1): + pass + + def d(self, a, b, *, c = 88): + pass + + def e(self, a, b, c = 88, **kwds): + pass + + def f(self, a, b, *, c, d = 42): + pass + + def g(self, a, b, *, c, d = 42, e = 17, f, **kwds): + pass + + def h(self, a, b, *args, c, d = 42, e = 17, f, **kwds): + pass + + def k(self, a, b, c=1, *args, d = 42, e = 17, f, **kwds): + pass diff --git a/tests/run/kwonlyargs.pyx b/tests/run/kwonlyargs.pyx index d18d1d7e..eae17e0b 100644 --- a/tests/run/kwonlyargs.pyx +++ b/tests/run/kwonlyargs.pyx @@ -67,6 +67,18 @@ __doc__ = """ >>> h(1,2, d=1) Traceback (most recent call last): TypeError: required keyword argument 'c' is missing + + >>> k(1,2, c=1, f=2) + >>> k(1,2, c=1, f=2, e=3) + >>> k(1,2,3,4,5,6, d=1, f=2) + >>> k(1,2,3,4,5,6, d=1, f=2, e=3, x=25, y=11) + + >>> k(1,2,3) + Traceback (most recent call last): + TypeError: required keyword argument 'f' is missing + >>> k(1,2, d=1) + Traceback (most recent call last): + TypeError: required keyword argument 'f' is missing """ def b(a, b, c): @@ -89,3 +101,6 @@ def g(a, b, *, c, d = 42, e = 17, f, **kwds): def h(a, b, *args, c, d = 42, e = 17, f, **kwds): pass + +def k(a, b, c=1, *args, d = 42, e = 17, f, **kwds): + pass