From: Stefan Behnel Date: Wed, 6 Feb 2008 19:58:19 +0000 (+0100) Subject: extended test for star args in extension functions X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=3970ba083b484e6522c0bb8de953b21c61719a76;p=cython.git extended test for star args in extension functions --- diff --git a/tests/run/extstarargs.pyx b/tests/run/extstarargs.pyx index dc00d2e9..9e51a71e 100644 --- a/tests/run/extstarargs.pyx +++ b/tests/run/extstarargs.pyx @@ -1,58 +1,120 @@ __doc__ = """ >>> s = Silly(1,2,3, 'test') + >>> (spam,grail,swallow,creosote,onlyt,onlyk,tk) = ( + ... s.spam,s.grail,s.swallow,s.creosote,s.onlyt,s.onlyk,s.tk) - >>> s.spam(1,2,3) - >>> s.spam(1,2) + >>> spam(1,2,3) + (1, 2, 3) + >>> spam(1,2) Traceback (most recent call last): TypeError: function takes exactly 3 arguments (2 given) - >>> s.spam(1,2,3,4) + >>> spam(1,2,3,4) Traceback (most recent call last): TypeError: function takes exactly 3 arguments (4 given) - >>> s.spam(1,2,3, a=1) + >>> spam(1,2,3, a=1) Traceback (most recent call last): TypeError: 'a' is an invalid keyword argument for this function - >>> s.grail(1,2,3) - >>> s.grail(1,2,3,4) - >>> s.grail(1,2,3,4,5,6,7,8,9) - >>> s.grail(1,2) + >>> grail(1,2,3) + (1, 2, 3, ()) + >>> grail(1,2,3,4) + (1, 2, 3, (4,)) + >>> grail(1,2,3,4,5,6,7,8,9) + (1, 2, 3, (4, 5, 6, 7, 8, 9)) + >>> grail(1,2) Traceback (most recent call last): TypeError: function takes exactly 3 arguments (2 given) - >>> s.grail(1,2,3, a=1) + >>> grail(1,2,3, a=1) Traceback (most recent call last): TypeError: 'a' is an invalid keyword argument for this function - >>> s.swallow(1,2,3) - >>> s.swallow(1,2,3,4) + >>> swallow(1,2,3) + (1, 2, 3, ()) + >>> swallow(1,2,3,4) Traceback (most recent call last): TypeError: function takes at most 3 positional arguments (4 given) - >>> s.swallow(1,2,3, a=1, b=2) - >>> s.swallow(1,2,3, x=1) + >>> swallow(1,2,3, a=1, b=2) + (1, 2, 3, (('a', 1), ('b', 2))) + >>> swallow(1,2,3, x=1) Traceback (most recent call last): TypeError: keyword parameter 'x' was given by position and by name - >>> s.creosote(1,2,3) - >>> s.creosote(1,2,3,4) - >>> s.creosote(1,2,3, a=1) - >>> s.creosote(1,2,3,4, a=1, b=2) - >>> s.creosote(1,2,3,4, x=1) + >>> creosote(1,2,3) + (1, 2, 3, (), ()) + >>> creosote(1,2,3,4) + (1, 2, 3, (4,), ()) + >>> creosote(1,2,3, a=1) + (1, 2, 3, (), (('a', 1),)) + >>> creosote(1,2,3,4, a=1, b=2) + (1, 2, 3, (4,), (('a', 1), ('b', 2))) + >>> creosote(1,2,3,4, x=1) Traceback (most recent call last): TypeError: keyword parameter 'x' was given by position and by name + + >>> onlyt(1) + (1,) + >>> onlyt(1,2) + (1, 2) + >>> onlyt(a=1) + Traceback (most recent call last): + TypeError: 'a' is an invalid keyword argument for this function + >>> onlyt(1, a=2) + Traceback (most recent call last): + TypeError: 'a' is an invalid keyword argument for this function + + >>> onlyk(a=1) + (('a', 1),) + >>> onlyk(a=1, b=2) + (('a', 1), ('b', 2)) + >>> onlyk(1) + Traceback (most recent call last): + TypeError: function takes at most 0 positional arguments (1 given) + >>> onlyk(1, 2) + Traceback (most recent call last): + TypeError: function takes at most 0 positional arguments (2 given) + >>> onlyk(1, a=1, b=2) + Traceback (most recent call last): + TypeError: function takes at most 0 positional arguments (1 given) + + >>> tk(a=1) + (('a', 1),) + >>> tk(a=1, b=2) + (('a', 1), ('b', 2)) + >>> tk(1) + (1,) + >>> tk(1, 2) + (1, 2) + >>> tk(1, a=1, b=2) + (1, ('a', 1), ('b', 2)) """ +cdef sorteditems(d): + l = d.items() + l.sort() + return tuple(l) + cdef class Silly: def __init__(self, *a): pass def spam(self, x, y, z): - pass - + return (x, y, z) + def grail(self, x, y, z, *a): - pass - + return (x, y, z, a) + def swallow(self, x, y, z, **k): - pass - + return (x, y, z, sorteditems(k)) + def creosote(self, x, y, z, *a, **k): - pass + return (x, y, z, a, sorteditems(k)) + + def onlyt(self, *a): + return a + + def onlyk(self, **k): + return sorteditems(k) + + def tk(self, *a, **k): + return a + sorteditems(k)