From a2bbb8f037a2b5dbc8b9497ec9373e49d1436730 Mon Sep 17 00:00:00 2001 From: Robert Bradshaw Date: Thu, 29 Oct 2009 04:25:40 -0700 Subject: [PATCH] Move some tests into function docstrings. --- runtests.py | 1 + tests/run/addloop.pyx | 18 +- tests/run/addop.pyx | 7 +- tests/run/addressof.pyx | 7 +- tests/run/always_allow_keywords_T295.pyx | 72 ++-- tests/run/and.pyx | 77 ++-- tests/run/append.pyx | 46 ++- tests/run/argdefault.pyx | 93 +++-- tests/run/arrayassign.pyx | 127 ++++--- tests/run/ass2local.pyx | 7 +- tests/run/assert.pyx | 18 +- tests/run/autotestdict.pyx | 2 - tests/run/backquote.pyx | 14 +- tests/run/bad_c_struct_T252.pyx | 1 - tests/run/behnel1.pyx | 9 +- tests/run/big_indices.pyx | 8 +- tests/run/bint.pyx | 21 +- tests/run/boolop.pyx | 7 +- tests/run/bufaccess.pyx | 1 - tests/run/builtin_types_none_T166.pyx | 8 +- tests/run/builtinnames.pyx | 20 +- tests/run/call_crash.pyx | 7 +- tests/run/callargs.pyx | 258 ++++++------- tests/run/carrays.pyx | 21 +- tests/run/cdef_bool_T227.pyx | 36 +- tests/run/cdef_decorator_directives_T183.pyx | 15 +- tests/run/cdef_opt.pyx | 18 +- tests/run/cdef_setitem_T284.pyx | 25 +- tests/run/cdefassign.pyx | 9 +- tests/run/cdefoptargs.pyx | 27 +- tests/run/cdivision_CEP_516.pyx | 84 +++-- tests/run/cfuncdef.pyx | 7 +- tests/run/char_constants_T99.pyx | 20 +- tests/run/cintop.pyx | 6 +- tests/run/cmp.pyx | 30 +- tests/run/coercearraytoptr.pyx | 1 - tests/run/complex_numbers_T305.pyx | 147 ++++---- tests/run/concatcstrings.pyx | 1 - tests/run/consts.pyx | 69 ++-- tests/run/cpdef_temps_T411.pyx | 18 +- tests/run/crashT245.pyx | 10 +- tests/run/cstruct.pyx | 19 +- tests/run/ct_IF.pyx | 21 +- tests/run/ctruthtests.pyx | 70 ++-- tests/run/cunion.pyx | 15 +- tests/run/cvardef.pyx | 7 +- tests/run/dict.pyx | 72 ++-- tests/run/dictintindex.pyx | 169 ++++++--- tests/run/dietachmayer1.pyx | 7 +- tests/run/empty_for_loop_T208.pyx | 15 +- tests/run/enumerate_T316.pyx | 138 +++---- tests/run/exceptionpropagation.pyx | 13 +- tests/run/ext_instance_type_T232.pyx | 11 +- tests/run/extcmethod.pyx | 15 +- tests/run/extended_unpacking_T235.pyx | 371 ++++++++++--------- tests/run/extended_unpacking_T409.pyx | 1 - tests/run/extinherit.pyx | 11 +- tests/run/extkwonlyargs.pyx | 101 ++--- tests/run/extlen.pyx | 1 - tests/run/extpropertyref.pyx | 9 +- tests/run/exttype.pyx | 41 +- tests/run/filenames.pyx | 1 - tests/run/flatin.pyx | 48 +-- tests/run/float_floor_division_T260.pyx | 7 +- tests/run/fmod.pyx | 7 +- tests/run/for_from_float_T254.pyx | 59 +-- tests/run/for_in_range_T372.pyx | 65 ++-- tests/run/forfrom.pyx | 13 +- tests/run/funcexceptreraise.pyx | 1 - tests/run/hash_T326.pyx | 6 +- tests/run/if.pyx | 52 +-- tests/run/importfrom.pyx | 41 +- tests/run/index.pyx | 105 +++--- tests/run/inline.pyx | 10 +- tests/run/inop.pyx | 100 ++--- tests/run/inplace.pyx | 49 +-- tests/run/int_literals.pyx | 15 +- tests/run/ishimoto2.pyx | 15 +- tests/run/isinstance.pyx | 8 +- tests/run/isnonebool.pyx | 21 +- tests/run/iteratorexception.pyx | 7 +- tests/run/iterdict.pyx | 73 ++-- tests/run/king1.pyx | 15 +- tests/run/kwargproblems.pyx | 13 +- tests/run/kwonlyargs.pyx | 79 ++-- tests/run/kwonlyargscall.pyx | 257 +++++++------ tests/run/large_consts_T237.pyx | 25 +- tests/run/list.pyx | 61 +-- tests/run/listcomp.pyx | 27 +- tests/run/literal_lists.pyx | 16 +- tests/run/literals.pyx | 19 +- tests/run/locals.pyx | 14 +- tests/run/locals_rebind_T429.pyx | 6 +- tests/run/menten1.pyx | 9 +- tests/run/modbody.pyx | 15 +- tests/run/modop.pyx | 26 +- tests/run/multass.pyx | 20 +- tests/run/new_style_exceptions.pyx | 11 +- tests/run/nogil.pyx | 15 +- tests/run/nonecheck.pyx | 89 ++--- tests/run/nononetypecheck.pyx | 7 +- tests/run/notinop.pyx | 83 +++-- tests/run/or.pyx | 76 ++-- tests/run/packedstruct_T290.pyx | 1 - tests/run/parallel_swap_assign_T425.pyx | 1 - tests/run/pass.pyx | 7 +- tests/run/pinard5.pyx | 9 +- tests/run/powop.pyx | 61 +-- tests/run/print.pyx | 7 +- tests/run/pure.pyx | 79 ++-- tests/run/pycmp.pyx | 12 +- tests/run/pyintop.pyx | 37 +- tests/run/pynumop.pyx | 13 +- tests/run/pyobjcast_T313.pyx | 1 - tests/run/r_argdefault.pyx | 18 +- tests/run/r_bowden1.pyx | 15 +- tests/run/r_delgado_1.pyx | 1 - tests/run/r_forloop.pyx | 166 +++++---- tests/run/r_jeff_epler_1.pyx | 7 +- tests/run/r_mitch_chapman_2.pyx | 7 +- tests/run/r_primes.pyx | 7 +- tests/run/r_print.pyx | 10 +- tests/run/r_pyclass.pyx | 9 +- tests/run/r_starargcall.pyx | 12 +- tests/run/r_starargs.pyx | 12 +- tests/run/r_starargsonly.pyx | 8 +- tests/run/r_typecast.pyx | 9 +- tests/run/r_vree_1.pyx | 1 - tests/run/range_optimisation_T203.pyx | 164 ++++---- tests/run/ref2local.pyx | 7 +- tests/run/return.pyx | 17 +- tests/run/returnparassign.pyx | 9 +- tests/run/simpcall.pyx | 28 +- tests/run/sizeof.pyx | 7 +- tests/run/slice2.pyx | 36 +- tests/run/specialfloat.pyx | 121 +++--- tests/run/starargs.pyx | 59 +-- tests/run/str_char_coercion_T412.pyx | 73 ++-- tests/run/strconstinclass.pyx | 1 - tests/run/strfunction.pyx | 28 +- tests/run/struct_conversion.pyx | 50 +-- tests/run/subclasses.pyx | 62 ++-- tests/run/subop.pyx | 13 +- tests/run/switch.pyx | 221 +++++------ tests/run/tandemstats.pyx | 9 +- tests/run/temp_alloc_T409.pyx | 9 +- tests/run/temps_corner1.pyx | 9 +- tests/run/ticket_124.pyx | 8 +- tests/run/tuple.pyx | 55 +-- tests/run/tupleassign.pyx | 164 ++++---- tests/run/tuplereassign.pyx | 27 +- tests/run/type_inference.pyx | 26 +- tests/run/type_slots_int_long_T287.pyx | 45 +-- tests/run/typed_slice.pyx | 70 ++-- tests/run/typedfieldbug_T303.pyx | 38 +- tests/run/typeof.pyx | 38 +- tests/run/unop.pyx | 7 +- tests/run/unpack.pyx | 7 +- tests/run/unpacklistcomp.pyx | 25 +- tests/run/varargcall.pyx | 7 +- tests/run/varargdecl.pyx | 7 +- tests/run/watts1.pyx | 10 +- tests/run/withnogil.pyx | 13 +- tests/run/withstat.pyx | 88 +++-- 164 files changed, 3288 insertions(+), 2846 deletions(-) diff --git a/runtests.py b/runtests.py index 10ede0d2..b6c01abf 100644 --- a/runtests.py +++ b/runtests.py @@ -433,6 +433,7 @@ is_private_field = re.compile('^_[^_]').match class _FakeClass(object): def __init__(self, **kwargs): + self.shortDescription = lambda x: kwargs.get('module_name') self.__dict__.update(kwargs) try: # Py2.7+ and Py3.2+ diff --git a/tests/run/addloop.pyx b/tests/run/addloop.pyx index ca31cb16..0559487d 100644 --- a/tests/run/addloop.pyx +++ b/tests/run/addloop.pyx @@ -5,27 +5,33 @@ __doc__ = u""" >>> x 46 - >>> add_pyrange(10) - 46 - >>> add_py(10) - 46 - >>> add_c(10) - 46 """ def add_pyrange(max): + """ + >>> add_pyrange(10) + 46 + """ x = 1 for i in range(max): x = x + i return x def add_py(max): + """ + >>> add_py(10) + 46 + """ x = 1 for i from 0 <= i < max: x = x + i return x def add_c(max): + """ + >>> add_c(10) + 46 + """ cdef int x,i x = 1 for i from 0 <= i < max: diff --git a/tests/run/addop.pyx b/tests/run/addop.pyx index 513042f1..8e456dc2 100644 --- a/tests/run/addop.pyx +++ b/tests/run/addop.pyx @@ -1,9 +1,8 @@ -__doc__ = u""" +def f(): + """ >>> f() (30, 22) -""" - -def f(): + """ cdef int int1, int2, int3 cdef char *ptr1, *ptr2 = "test", *ptr3 = "toast" int2 = 10 diff --git a/tests/run/addressof.pyx b/tests/run/addressof.pyx index 59e9de2c..35c8916f 100644 --- a/tests/run/addressof.pyx +++ b/tests/run/addressof.pyx @@ -1,9 +1,8 @@ -__doc__ = u""" +def f(int a): + """ >>> f(5) 5 -""" - -def f(int a): + """ cdef int i,j cdef int *p i = a diff --git a/tests/run/always_allow_keywords_T295.pyx b/tests/run/always_allow_keywords_T295.pyx index 7458cb7d..2e47dec6 100644 --- a/tests/run/always_allow_keywords_T295.pyx +++ b/tests/run/always_allow_keywords_T295.pyx @@ -1,52 +1,56 @@ -__doc__ = u""" ->>> func1(None) ->>> func1(*[None]) ->>> func1(arg=None) -Traceback (most recent call last): -... -TypeError: func1() takes no keyword arguments ->>> func2(None) ->>> func2(*[None]) ->>> func2(arg=None) -Traceback (most recent call last): -... -TypeError: func2() takes no keyword arguments ->>> func3(None) ->>> func3(*[None]) ->>> func3(arg=None) - ->>> A().meth1(None) ->>> A().meth1(*[None]) ->>> A().meth1(arg=None) -Traceback (most recent call last): -... -TypeError: meth1() takes no keyword arguments ->>> A().meth2(None) ->>> A().meth2(*[None]) ->>> A().meth2(arg=None) -Traceback (most recent call last): -... -TypeError: meth2() takes no keyword arguments ->>> A().meth3(None) ->>> A().meth3(*[None]) ->>> A().meth3(arg=None) -""" - cimport cython def func1(arg): + """ + >>> func1(None) + >>> func1(*[None]) + >>> func1(arg=None) + Traceback (most recent call last): + ... + TypeError: func1() takes no keyword arguments + """ pass @cython.always_allow_keywords(False) def func2(arg): + """ + >>> func2(None) + >>> func2(*[None]) + >>> func2(arg=None) + Traceback (most recent call last): + ... + TypeError: func2() takes no keyword arguments + """ pass @cython.always_allow_keywords(True) def func3(arg): + """ + >>> func3(None) + >>> func3(*[None]) + >>> func3(arg=None) + """ pass cdef class A: + """ + >>> A().meth1(None) + >>> A().meth1(*[None]) + >>> A().meth1(arg=None) + Traceback (most recent call last): + ... + TypeError: meth1() takes no keyword arguments + >>> A().meth2(None) + >>> A().meth2(*[None]) + >>> A().meth2(arg=None) + Traceback (most recent call last): + ... + TypeError: meth2() takes no keyword arguments + >>> A().meth3(None) + >>> A().meth3(*[None]) + >>> A().meth3(arg=None) + """ def meth1(self, arg): pass diff --git a/tests/run/and.pyx b/tests/run/and.pyx index 070ba6f0..11721b1c 100644 --- a/tests/run/and.pyx +++ b/tests/run/and.pyx @@ -1,51 +1,54 @@ -__doc__ = u""" ->>> a,b = 'a *','b *' # use non-interned strings - ->>> and2_assign(2,3) == (2 and 3) -True ->>> and2_assign('a', 'b') == ('a' and 'b') -True ->>> and2_assign(a, b) == (a and b) -True - ->>> and2(2,3) == (2 and 3) -True ->>> and2(0,2) == (0 and 2) -True ->>> and2('a', 'b') == ('a' and 'b') -True ->>> and2(a, b) == (a and b) -True ->>> and2('', 'b') == ('' and 'b') -True ->>> and2([], [1]) == ([] and [1]) -True ->>> and2([], [a]) == ([] and [a]) -True - ->>> and3(0,1,2) == (0 and 1 and 2) -True ->>> and3([],(),[1]) == ([] and () and [1]) -True - ->>> and2_no_result(2,3) ->>> and2_no_result(0,2) ->>> and2_no_result('a','b') ->>> and2_no_result(a,b) ->>> a and b -'b *' -""" +a,b = 'a *','b *' # use non-interned strings def and2_assign(a,b): + """ + >>> a,b = 'a *','b *' # use non-interned strings + >>> and2_assign(2,3) == (2 and 3) + True + >>> and2_assign('a', 'b') == ('a' and 'b') + True + >>> and2_assign(a, b) == (a and b) + True + """ c = a and b return c def and2(a,b): + """ + >>> and2(2,3) == (2 and 3) + True + >>> and2(0,2) == (0 and 2) + True + >>> and2('a', 'b') == ('a' and 'b') + True + >>> and2(a, b) == (a and b) + True + >>> and2('', 'b') == ('' and 'b') + True + >>> and2([], [1]) == ([] and [1]) + True + >>> and2([], [a]) == ([] and [a]) + True + """ return a and b def and3(a,b,c): + """ + >>> and3(0,1,2) == (0 and 1 and 2) + True + >>> and3([],(),[1]) == ([] and () and [1]) + True + """ d = a and b and c return d def and2_no_result(a,b): + """ + >>> and2_no_result(2,3) + >>> and2_no_result(0,2) + >>> and2_no_result('a','b') + >>> and2_no_result(a,b) + >>> a and b + 'b *' + """ a and b diff --git a/tests/run/append.pyx b/tests/run/append.pyx index a5862294..9a8aff57 100644 --- a/tests/run/append.pyx +++ b/tests/run/append.pyx @@ -1,26 +1,3 @@ -__doc__ = u""" ->>> test_append([]) -None -None -None -got error -[1, 2, (3, 4)] ->>> _ = test_append(A()) -appending -1 -appending -2 -appending -(3, 4) -got error ->>> test_append(B()) -None -None -None -None -[1, 2, (3, 4), 5, 6] -""" - class A: def append(self, x): print u"appending" @@ -32,6 +9,28 @@ class B(list): list.append(self, arg) def test_append(L): + """ + >>> test_append([]) + None + None + None + got error + [1, 2, (3, 4)] + >>> _ = test_append(A()) + appending + 1 + appending + 2 + appending + (3, 4) + got error + >>> test_append(B()) + None + None + None + None + [1, 2, (3, 4), 5, 6] + """ print L.append(1) print L.append(2) print L.append((3,4)) @@ -40,4 +39,3 @@ def test_append(L): except TypeError: print u"got error" return L - diff --git a/tests/run/argdefault.pyx b/tests/run/argdefault.pyx index 0a298f67..8a9f349b 100644 --- a/tests/run/argdefault.pyx +++ b/tests/run/argdefault.pyx @@ -1,58 +1,45 @@ -__doc__ = u""" ->>> f0() -(1, 2) ->>> g0() -(1, 2) - ->>> f1() -[1, 2] ->>> g1() -[1, 2] - ->>> f2() -{1: 2} ->>> g2() -{1: 2} - ->>> f3() #doctest: +ELLIPSIS - ->>> g3() #doctest: +ELLIPSIS - - ->>> f4() #doctest: +ELLIPSIS - ->>> g4() #doctest: +ELLIPSIS - - ->>> f5() #doctest: +ELLIPSIS - ->>> g5() #doctest: +ELLIPSIS - - ->>> f6() -7 ->>> g6() -7 -""" - GLB0 = (1, 2) def f0(arg=GLB0): + """ + >>> f0() + (1, 2) + """ return arg def g0(arg=(1, 2)): + """ + >>> g0() + (1, 2) + """ return arg GLB1 = [1, 2] def f1(arg=GLB1): + """ + >>> f1() + [1, 2] + """ return arg def g1(arg=[1, 2]): + """ + >>> g1() + [1, 2] + """ return arg cdef GLB2 = {1: 2} def f2(arg=GLB2): + """ + >>> f2() + {1: 2} + """ return arg def g2(arg={1: 2}): + """ + >>> g2() + {1: 2} + """ return arg @@ -60,8 +47,16 @@ class Foo(object): pass cdef GLB3 = Foo() def f3(arg=GLB3): + """ + >>> f3() #doctest: +ELLIPSIS + + """ return arg def g3(arg=Foo()): + """ + >>> g3() #doctest: +ELLIPSIS + + """ return arg @@ -69,8 +64,16 @@ cdef class Bar: pass cdef Bar GLB4 = Bar() def f4(arg=GLB4): + """ + >>> f4() #doctest: +ELLIPSIS + + """ return arg def g4(arg=Bar()): + """ + >>> g4() #doctest: +ELLIPSIS + + """ return arg @@ -78,13 +81,29 @@ cdef class Bla: pass cdef Bla GLB5 = Bla() def f5(Bla arg=GLB5): + """ + >>> f5() #doctest: +ELLIPSIS + + """ return arg def g5(Bla arg=Bla()): + """ + >>> g5() #doctest: +ELLIPSIS + + """ return arg cdef int GLB6 = 7 def f6(int arg=GLB6): + """ + >>> f6() + 7 + """ return arg def g6(int arg=7): + """ + >>> g6() + 7 + """ return arg diff --git a/tests/run/arrayassign.pyx b/tests/run/arrayassign.pyx index e0734979..29c353e3 100644 --- a/tests/run/arrayassign.pyx +++ b/tests/run/arrayassign.pyx @@ -1,60 +1,3 @@ -__doc__ = u""" ->>> test_literal_list_slice_all() -(1, 2, 3, 4, 5) ->>> test_literal_list_slice_start() -(1, 2, 3, 4, 5) ->>> test_literal_list_slice_end() -(1, 2, 3, 4, 5) ->>> test_literal_list_slice_start_end() -(1, 2, 3, 4, 5) - ->>> test_literal_list_slice_start_param(4) -(1, 2, 3, 4, 5) ->>> test_literal_list_slice_start_param(3) -Traceback (most recent call last): -ValueError: Assignment to slice of wrong length, expected 5, got 6 ->>> test_literal_list_slice_start_param(5) -Traceback (most recent call last): -ValueError: Assignment to slice of wrong length, expected 5, got 4 - ->>> test_literal_list_slice_end_param(5) -(1, 2, 3, 4, 5) ->>> test_literal_list_slice_end_param(4) -Traceback (most recent call last): -ValueError: Assignment to slice of wrong length, expected 5, got 4 ->>> test_literal_list_slice_end_param(6) -Traceback (most recent call last): -ValueError: Assignment to slice of wrong length, expected 5, got 6 - ->>> test_literal_list_slice_start_end_param(2,7) -(1, 2, 3, 4, 5) ->>> test_literal_list_slice_start_end_param(3,7) -Traceback (most recent call last): -ValueError: Assignment to slice of wrong length, expected 5, got 4 ->>> test_literal_list_slice_start_end_param(1,7) -Traceback (most recent call last): -ValueError: Assignment to slice of wrong length, expected 5, got 6 ->>> test_literal_list_slice_start_end_param(2,6) -Traceback (most recent call last): -ValueError: Assignment to slice of wrong length, expected 5, got 4 ->>> test_literal_list_slice_start_end_param(2,8) -Traceback (most recent call last): -ValueError: Assignment to slice of wrong length, expected 5, got 6 ->>> test_literal_list_slice_start_end_param(3,6) -Traceback (most recent call last): -ValueError: Assignment to slice of wrong length, expected 5, got 3 ->>> test_literal_list_slice_start_end_param(1,8) -Traceback (most recent call last): -ValueError: Assignment to slice of wrong length, expected 5, got 7 - ->>> test_ptr_literal_list_slice_all() -(1, 2, 3, 4, 5) ->>> test_ptr_literal_list_slice_start() -(1, 2, 3, 4, 5) ->>> test_ptr_literal_list_slice_end() -(1, 2, 3, 4, 5) -""" - # this doesn't work - it would reassign the array address! # #def test_literal_list(): @@ -63,54 +6,124 @@ ValueError: Assignment to slice of wrong length, expected 5, got 7 # return (a[0], a[1], a[2], a[3], a[4]) def test_literal_list_slice_all(): + """ + >>> test_literal_list_slice_all() + (1, 2, 3, 4, 5) + """ cdef int a[5] # = [5,4,3,2,1] a[:] = [1,2,3,4,5] return (a[0], a[1], a[2], a[3], a[4]) def test_literal_list_slice_start(): + """ + >>> test_literal_list_slice_start() + (1, 2, 3, 4, 5) + """ cdef int a[7] # = [7,6,5,4,3,2,1] a[2:] = [1,2,3,4,5] return (a[2], a[3], a[4], a[5], a[6]) def test_literal_list_slice_end(): + """ + >>> test_literal_list_slice_end() + (1, 2, 3, 4, 5) + """ cdef int a[7] # = [7,6,5,4,3,2,1] a[:5] = [1,2,3,4,5] return (a[0], a[1], a[2], a[3], a[4]) def test_literal_list_slice_start_end(): + """ + >>> test_literal_list_slice_start_end() + (1, 2, 3, 4, 5) + """ cdef int a[9] # = [9,8,7,6,5,4,3,2,1] a[2:7] = [1,2,3,4,5] return (a[2], a[3], a[4], a[5], a[6]) def test_literal_list_slice_start_param(s): + """ + >>> test_literal_list_slice_start_param(4) + (1, 2, 3, 4, 5) + >>> test_literal_list_slice_start_param(3) + Traceback (most recent call last): + ValueError: Assignment to slice of wrong length, expected 5, got 6 + >>> test_literal_list_slice_start_param(5) + Traceback (most recent call last): + ValueError: Assignment to slice of wrong length, expected 5, got 4 + """ cdef int a[9] # = [9,8,7,6,5,4,3,2,1] a[s:] = [1,2,3,4,5] return (a[4], a[5], a[6], a[7], a[8]) # return a[s:] def test_literal_list_slice_end_param(e): + """ + >>> test_literal_list_slice_end_param(5) + (1, 2, 3, 4, 5) + >>> test_literal_list_slice_end_param(4) + Traceback (most recent call last): + ValueError: Assignment to slice of wrong length, expected 5, got 4 + >>> test_literal_list_slice_end_param(6) + Traceback (most recent call last): + ValueError: Assignment to slice of wrong length, expected 5, got 6 + """ cdef int a[9] # = [9,8,7,6,5,4,3,2,1] a[:e] = [1,2,3,4,5] return (a[0], a[1], a[2], a[3], a[4]) # return a[:e] def test_literal_list_slice_start_end_param(s,e): + """ + >>> test_literal_list_slice_start_end_param(2,7) + (1, 2, 3, 4, 5) + >>> test_literal_list_slice_start_end_param(3,7) + Traceback (most recent call last): + ValueError: Assignment to slice of wrong length, expected 5, got 4 + >>> test_literal_list_slice_start_end_param(1,7) + Traceback (most recent call last): + ValueError: Assignment to slice of wrong length, expected 5, got 6 + >>> test_literal_list_slice_start_end_param(2,6) + Traceback (most recent call last): + ValueError: Assignment to slice of wrong length, expected 5, got 4 + >>> test_literal_list_slice_start_end_param(2,8) + Traceback (most recent call last): + ValueError: Assignment to slice of wrong length, expected 5, got 6 + >>> test_literal_list_slice_start_end_param(3,6) + Traceback (most recent call last): + ValueError: Assignment to slice of wrong length, expected 5, got 3 + >>> test_literal_list_slice_start_end_param(1,8) + Traceback (most recent call last): + ValueError: Assignment to slice of wrong length, expected 5, got 7 + """ cdef int a[9] # = [9,8,7,6,5,4,3,2,1] a[s:e] = [1,2,3,4,5] return (a[2], a[3], a[4], a[5], a[6]) # return a[s:e] def test_ptr_literal_list_slice_all(): + """ + >>> test_ptr_literal_list_slice_all() + (1, 2, 3, 4, 5) + """ cdef int *a = [6,5,4,3,2] a[:] = [1,2,3,4,5] return (a[0], a[1], a[2], a[3], a[4]) def test_ptr_literal_list_slice_start(): + """ + >>> test_ptr_literal_list_slice_start() + (1, 2, 3, 4, 5) + """ cdef int *a = [6,5,4,3,2,1] a[1:] = [1,2,3,4,5] return (a[1], a[2], a[3], a[4], a[5]) def test_ptr_literal_list_slice_end(): + """ + >>> test_ptr_literal_list_slice_end() + (1, 2, 3, 4, 5) + """ cdef int *a = [6,5,4,3,2,1] a[:5] = [1,2,3,4,5] return (a[0], a[1], a[2], a[3], a[4]) diff --git a/tests/run/ass2local.pyx b/tests/run/ass2local.pyx index ea904378..98a81af5 100644 --- a/tests/run/ass2local.pyx +++ b/tests/run/ass2local.pyx @@ -1,8 +1,7 @@ -__doc__ = u""" +def f(): + """ >>> f() 42 -""" - -def f(): + """ a = 42 return a diff --git a/tests/run/assert.pyx b/tests/run/assert.pyx index 83130fa8..b431001d 100644 --- a/tests/run/assert.pyx +++ b/tests/run/assert.pyx @@ -1,4 +1,5 @@ -__doc__ = u""" +def f(a, b, int i): + """ >>> f(1, 2, 1) >>> f(0, 2, 1) Traceback (most recent call last): @@ -9,17 +10,16 @@ __doc__ = u""" >>> f(1, 2, 0) Traceback (most recent call last): AssertionError - - >>> g(1, "works") - >>> g(0, "fails") - Traceback (most recent call last): - AssertionError: fails -""" - -def f(a, b, int i): + """ assert a assert a+b assert i def g(a, b): + """ + >>> g(1, "works") + >>> g(0, "fails") + Traceback (most recent call last): + AssertionError: fails + """ assert a, b diff --git a/tests/run/autotestdict.pyx b/tests/run/autotestdict.pyx index e4f47a44..506376b3 100644 --- a/tests/run/autotestdict.pyx +++ b/tests/run/autotestdict.pyx @@ -109,5 +109,3 @@ cdef class MyCdefClass: >>> True False """ - - diff --git a/tests/run/backquote.pyx b/tests/run/backquote.pyx index 0062d9f0..a2a933c1 100644 --- a/tests/run/backquote.pyx +++ b/tests/run/backquote.pyx @@ -1,17 +1,17 @@ -__doc__ = u""" +def f(obj2): + """ >>> f(20) '20' >>> f('test') "'test'" - - >>> g() - '42' -""" - -def f(obj2): + """ obj1 = `obj2` return obj1 def g(): + """ + >>> g() + '42' + """ obj1 = `42` return obj1 diff --git a/tests/run/bad_c_struct_T252.pyx b/tests/run/bad_c_struct_T252.pyx index 7c26b552..e011ec2d 100644 --- a/tests/run/bad_c_struct_T252.pyx +++ b/tests/run/bad_c_struct_T252.pyx @@ -1,4 +1,3 @@ - cdef cf(default=None): return default diff --git a/tests/run/behnel1.pyx b/tests/run/behnel1.pyx index 35c73898..e43a3d27 100644 --- a/tests/run/behnel1.pyx +++ b/tests/run/behnel1.pyx @@ -1,8 +1,3 @@ -__doc__ = u""" - >>> viking(5) - 5 -""" - cdef class Spam: cdef eggs(self, a): return a @@ -11,4 +6,8 @@ cdef Spam spam(): return Spam() def viking(a): + """ + >>> viking(5) + 5 + """ return spam().eggs(a) diff --git a/tests/run/big_indices.pyx b/tests/run/big_indices.pyx index db70fe99..6eb642e6 100644 --- a/tests/run/big_indices.pyx +++ b/tests/run/big_indices.pyx @@ -1,4 +1,5 @@ -__doc__ = u""" +def test(): + """ >>> test() neg False pos True @@ -6,9 +7,7 @@ __doc__ = u""" pos neg pos -""" - -def test(): + """ cdef long neg = -1 cdef unsigned long pos = -2 # will be a large positive number @@ -22,4 +21,3 @@ def test(): print D[neg] print D[pos] - diff --git a/tests/run/bint.pyx b/tests/run/bint.pyx index 025c69e8..8f498825 100644 --- a/tests/run/bint.pyx +++ b/tests/run/bint.pyx @@ -1,18 +1,17 @@ -__doc__ = u""" ->>> call_test() -False -True -False -True -True -True -True -""" - cdef test(bint value): print value def call_test(): + """ + >>> call_test() + False + True + False + True + True + True + True + """ test(False) test(True) test(0) diff --git a/tests/run/boolop.pyx b/tests/run/boolop.pyx index fdbac10b..99918444 100644 --- a/tests/run/boolop.pyx +++ b/tests/run/boolop.pyx @@ -1,9 +1,8 @@ -__doc__ = u""" +def foo(obj1, obj2, obj3, obj4, obj5): + """ >>> foo(True, False, 23, 'test', 1) (0.0, 1.0, False, False) -""" - -def foo(obj1, obj2, obj3, obj4, obj5): + """ cdef int bool1, bool2 cdef float bool3, bool4 cdef char *ptr1, *ptr2, *ptr0 diff --git a/tests/run/bufaccess.pyx b/tests/run/bufaccess.pyx index 8bd0629e..3f76acbe 100644 --- a/tests/run/bufaccess.pyx +++ b/tests/run/bufaccess.pyx @@ -1392,4 +1392,3 @@ def buffer_nogil(): with nogil: buf[1] = 10 return buf[1] - diff --git a/tests/run/builtin_types_none_T166.pyx b/tests/run/builtin_types_none_T166.pyx index 74ac1f31..fc3db82f 100644 --- a/tests/run/builtin_types_none_T166.pyx +++ b/tests/run/builtin_types_none_T166.pyx @@ -4,11 +4,13 @@ __doc__ = u""" Traceback (most recent call last): AttributeError: 'NoneType' object has no attribute 'append' ->>> append_to_none() -Traceback (most recent call last): -AttributeError: 'NoneType' object has no attribute 'append' """ def append_to_none(): + """ + >>> append_to_none() + Traceback (most recent call last): + AttributeError: 'NoneType' object has no attribute 'append' + """ cdef list l = None l.append(2) diff --git a/tests/run/builtinnames.pyx b/tests/run/builtinnames.pyx index aba3ac87..47a62e07 100644 --- a/tests/run/builtinnames.pyx +++ b/tests/run/builtinnames.pyx @@ -1,14 +1,3 @@ -__doc__ = u""" ->>> test_c('abc') -fileabc -typeabc ->>> print(test_file_py('abc')) -abc ->>> print(range('abc')) -rangeabc -""" - - def test_file_py(file): assert isinstance(file, (str, unicode)), \ u"not a string, found '%s' instead" % file.__class__.__name__ @@ -28,5 +17,14 @@ cdef type(arg): def test_c(arg): + """ + >>> test_c('abc') + fileabc + typeabc + >>> print(test_file_py('abc')) + abc + >>> print(range('abc')) + rangeabc + """ print test_file_c(arg) print type(arg) diff --git a/tests/run/call_crash.pyx b/tests/run/call_crash.pyx index 355fa081..74e10743 100644 --- a/tests/run/call_crash.pyx +++ b/tests/run/call_crash.pyx @@ -1,9 +1,8 @@ -__doc__ = u""" +cdef class A: + """ >>> A().test(3) 9 -""" - -cdef class A: + """ cdef int (*func_ptr)(int) diff --git a/tests/run/callargs.pyx b/tests/run/callargs.pyx index fa44e649..d922b4fb 100644 --- a/tests/run/callargs.pyx +++ b/tests/run/callargs.pyx @@ -1,147 +1,80 @@ -__doc__ = u""" - >>> test_pos_args(h) - 1 2 3 * 0 0 - 1 2 9 * 2 0 - 1 2 7 * 2 0 - 9 8 7 * 0 0 - 7 8 9 * 0 0 - - >>> test_kw_args(h) - 1 2 3 * 0 0 - 1 2 9 * 2 1 - 1 2 7 * 2 1 - 1 2 9 * 2 2 - 1 2 9 * 2 2 - 1 2 9 * 2 3 - - >>> test_kw_args(e) - 2 1 - 5 1 - 5 1 - 5 2 - 5 2 - 5 3 - - >>> test_kw(e) - 0 1 - 0 2 - 0 2 - 0 1 - - >>> test_kw(g) - 1 - 2 - 2 - 1 - - >>> test_pos_args(f) - 3 - 5 - 5 - 3 - 3 - - >>> test_noargs(e) - 0 0 - >>> test_noargs(f) - 0 - >>> test_noargs(g) - 0 - - # and some errors: - - >>> test_noargs(h) - Traceback (most recent call last): - TypeError: h() takes at least 3 positional arguments (0 given) - - >>> h(1,2, d=5) - Traceback (most recent call last): - TypeError: h() takes at least 3 positional arguments (2 given) - - >>> f(1,2, d=5) - Traceback (most recent call last): - TypeError: f() got an unexpected keyword argument 'd' - >>> f(1, d=5) - Traceback (most recent call last): - TypeError: f() got an unexpected keyword argument 'd' - >>> f(d=5) - Traceback (most recent call last): - TypeError: f() got an unexpected keyword argument 'd' - - >>> g(1,2, d=5) - Traceback (most recent call last): - TypeError: g() takes exactly 0 positional arguments (2 given) - >>> g(1,2) - Traceback (most recent call last): - TypeError: g() takes exactly 0 positional arguments (2 given) - >>> g(1) - Traceback (most recent call last): - TypeError: g() takes exactly 0 positional arguments (1 given) - - >>> test_int_kwargs(e) - Traceback (most recent call last): - TypeError: e() keywords must be strings - >>> test_int_kwargs(f) - Traceback (most recent call last): - TypeError: f() keywords must be strings - >>> test_int_kwargs(g) - Traceback (most recent call last): - TypeError: g() keywords must be strings - >>> test_int_kwargs(h) - Traceback (most recent call last): - TypeError: h() keywords must be strings - - >>> d() - Traceback (most recent call last): - TypeError: d() takes at least 1 positional argument (0 given) - >>> d(1) - 1 1 0 0 - >>> d(1,2) - 1 2 0 0 - >>> d(1,2,3) - 1 2 1 0 - - >>> d(key=None) - Traceback (most recent call last): - TypeError: d() takes at least 1 positional argument (0 given) - >>> d(1, key=None) - 1 1 0 1 - >>> d(1,2, key=None) - 1 2 0 1 - >>> d(1,2,3, key=None) - 1 2 1 1 - - >>> c() - 10 20 0 - >>> c(1) - 1 20 0 - >>> c(1,2) - 1 2 0 - >>> c(key=None) - 10 20 1 - >>> c(1, key=None) - 1 20 1 - >>> c(1,2, key=None) - 1 2 1 - -""" - def c(a=10, b=20, **kwds): + """ + >>> c() + 10 20 0 + >>> c(1) + 1 20 0 + >>> c(1,2) + 1 2 0 + >>> c(key=None) + 10 20 1 + >>> c(1, key=None) + 1 20 1 + >>> c(1,2, key=None) + 1 2 1 + """ print a, b, len(kwds) def d(a, b=1, *args, **kwds): + """ + >>> d() + Traceback (most recent call last): + TypeError: d() takes at least 1 positional argument (0 given) + >>> d(1) + 1 1 0 0 + >>> d(1,2) + 1 2 0 0 + >>> d(1,2,3) + 1 2 1 0 + >>> d(key=None) + Traceback (most recent call last): + TypeError: d() takes at least 1 positional argument (0 given) + >>> d(1, key=None) + 1 1 0 1 + >>> d(1,2, key=None) + 1 2 0 1 + >>> d(1,2,3, key=None) + 1 2 1 1 + """ print a, b, len(args), len(kwds) def e(*args, **kwargs): print len(args), len(kwargs) def f(*args): + """ + >>> f(1,2, d=5) + Traceback (most recent call last): + TypeError: f() got an unexpected keyword argument 'd' + >>> f(1, d=5) + Traceback (most recent call last): + TypeError: f() got an unexpected keyword argument 'd' + >>> f(d=5) + Traceback (most recent call last): + TypeError: f() got an unexpected keyword argument 'd' + """ print len(args) def g(**kwargs): + """ + >>> g(1,2, d=5) + Traceback (most recent call last): + TypeError: g() takes exactly 0 positional arguments (2 given) + >>> g(1,2) + Traceback (most recent call last): + TypeError: g() takes exactly 0 positional arguments (2 given) + >>> g(1) + Traceback (most recent call last): + TypeError: g() takes exactly 0 positional arguments (1 given) + """ print len(kwargs) def h(a, b, c, *args, **kwargs): + """ + >>> h(1,2, d=5) + Traceback (most recent call last): + TypeError: h() takes at least 3 positional arguments (2 given) + """ print a, b, c, u'*', len(args), len(kwargs) args = (9,8,7) @@ -153,6 +86,22 @@ else: kwargs = {"test" : u"toast"} def test_kw_args(f): + """ + >>> test_kw_args(h) + 1 2 3 * 0 0 + 1 2 9 * 2 1 + 1 2 7 * 2 1 + 1 2 9 * 2 2 + 1 2 9 * 2 2 + 1 2 9 * 2 3 + >>> test_kw_args(e) + 2 1 + 5 1 + 5 1 + 5 2 + 5 2 + 5 3 + """ f(1,2, c=3) f(1,2, d=3, *args) f(1,2, d=3, *(7,8,9)) @@ -161,6 +110,20 @@ def test_kw_args(f): f(1,2, d=3, *args, e=5, **kwargs) def test_pos_args(f): + """ + >>> test_pos_args(h) + 1 2 3 * 0 0 + 1 2 9 * 2 0 + 1 2 7 * 2 0 + 9 8 7 * 0 0 + 7 8 9 * 0 0 + >>> test_pos_args(f) + 3 + 5 + 5 + 3 + 3 + """ f(1,2,3) f(1,2, *args) f(1,2, *(7,8,9)) @@ -168,13 +131,52 @@ def test_pos_args(f): f(*(7,8,9)) def test_kw(f): + """ + >>> test_kw(e) + 0 1 + 0 2 + 0 2 + 0 1 + >>> test_kw(g) + 1 + 2 + 2 + 1 + """ f(c=3) f(d=3, e=5) f(d=3, **kwargs) f(**kwargs) def test_noargs(f): + """ + >>> test_noargs(e) + 0 0 + >>> test_noargs(f) + 0 + >>> test_noargs(g) + 0 + + # and some errors: + >>> test_noargs(h) + Traceback (most recent call last): + TypeError: h() takes at least 3 positional arguments (0 given) + """ f() def test_int_kwargs(f): + """ + >>> test_int_kwargs(e) + Traceback (most recent call last): + TypeError: e() keywords must be strings + >>> test_int_kwargs(f) + Traceback (most recent call last): + TypeError: f() keywords must be strings + >>> test_int_kwargs(g) + Traceback (most recent call last): + TypeError: g() keywords must be strings + >>> test_int_kwargs(h) + Traceback (most recent call last): + TypeError: h() keywords must be strings + """ f(a=1,b=2,c=3, **{10:20,30:40}) diff --git a/tests/run/carrays.pyx b/tests/run/carrays.pyx index 30e86c3f..d6518284 100644 --- a/tests/run/carrays.pyx +++ b/tests/run/carrays.pyx @@ -1,13 +1,8 @@ -__doc__ = u""" ->>> test1() -2 ->>> test2() -0 ->>> test3() -(2, 3) -""" - def test1(): + """ + >>> test1() + 2 + """ cdef int x[2][2] x[0][0] = 1 x[0][1] = 2 @@ -20,6 +15,10 @@ cdef int* f(int x[2][2]): def test2(): + """ + >>> test2() + 0 + """ cdef int a1[5] cdef int a2[2+3] return sizeof(a1) - sizeof(a2) @@ -29,6 +28,10 @@ cdef enum: MY_SIZE_B = 3 def test3(): + """ + >>> test3() + (2, 3) + """ cdef int a[MY_SIZE_A] cdef int b[MY_SIZE_B] return sizeof(a)/sizeof(int), sizeof(b)/sizeof(int) diff --git a/tests/run/cdef_bool_T227.pyx b/tests/run/cdef_bool_T227.pyx index cf07f53c..3fb8b7f8 100644 --- a/tests/run/cdef_bool_T227.pyx +++ b/tests/run/cdef_bool_T227.pyx @@ -1,25 +1,25 @@ -__doc__ = u""" ->>> foo(True) -True ->>> foo(False) -False ->>> foo('abc') # doctest: +ELLIPSIS -Traceback (most recent call last): -TypeError: ... - ->>> call_cfoo(True) -True ->>> call_cfoo(False) -False ->>> call_cfoo('abc') # doctest: +ELLIPSIS -Traceback (most recent call last): -TypeError: ... -""" - def foo(bool a): + """ + >>> foo(True) + True + >>> foo(False) + False + >>> foo('abc') # doctest: +ELLIPSIS + Traceback (most recent call last): + TypeError: ... + """ return a == True def call_cfoo(a): + """ + >>> call_cfoo(True) + True + >>> call_cfoo(False) + False + >>> call_cfoo('abc') # doctest: +ELLIPSIS + Traceback (most recent call last): + TypeError: ... + """ return cfoo(a) cdef cfoo(bool a): diff --git a/tests/run/cdef_decorator_directives_T183.pyx b/tests/run/cdef_decorator_directives_T183.pyx index e3713534..69afe934 100644 --- a/tests/run/cdef_decorator_directives_T183.pyx +++ b/tests/run/cdef_decorator_directives_T183.pyx @@ -1,16 +1,17 @@ -__doc__ = u""" - >>> cdiv_decorator(-12, 5) - -2 - >>> pydiv_decorator(-12, 5) - -3 -""" - cimport cython @cython.cdivision(True) cpdef cdiv_decorator(int a, int b): + """ + >>> cdiv_decorator(-12, 5) + -2 + """ return a / b @cython.cdivision(False) cpdef pydiv_decorator(int a, int b): + """ + >>> pydiv_decorator(-12, 5) + -3 + """ return a / b diff --git a/tests/run/cdef_opt.pyx b/tests/run/cdef_opt.pyx index fe55fe35..118b2530 100644 --- a/tests/run/cdef_opt.pyx +++ b/tests/run/cdef_opt.pyx @@ -7,12 +7,6 @@ __doc__ = u""" >>> a.foo(10, u'yes') (True, u'yes') - >>> call0() - (True, u'yo') - >>> call1() - (False, u'yo') - >>> call2() - (False, u'go') """ import sys @@ -25,13 +19,25 @@ cdef class A: return a, b def call0(): + """ + >>> call0() + (True, u'yo') + """ a = A() return a.foo() def call1(): + """ + >>> call1() + (False, u'yo') + """ a = A() return a.foo(False) def call2(): + """ + >>> call2() + (False, u'go') + """ a = A() return a.foo(False, u"go") diff --git a/tests/run/cdef_setitem_T284.pyx b/tests/run/cdef_setitem_T284.pyx index b5944366..987c5288 100644 --- a/tests/run/cdef_setitem_T284.pyx +++ b/tests/run/cdef_setitem_T284.pyx @@ -1,15 +1,7 @@ -__doc__ = u''' ->>> no_cdef() ->>> with_cdef() ->>> test_list(list(range(11)), -2, None) -[0, 1, 2, 3, 4, 5, 6, 7, 8, None, 10] ->>> test_list(list(range(11)), "invalid index", None) #doctest: +ELLIPSIS -Traceback (most recent call last): -... -TypeError: list indices must be integers... -''' - def no_cdef(): + """ + >>> no_cdef() + """ lst = list(range(11)) ob = 10L lst[ob] = -10 @@ -17,6 +9,9 @@ def no_cdef(): dd[ob] = -10 def with_cdef(): + """ + >>> with_cdef() + """ cdef list lst = list(range(11)) ob = 10L lst[ob] = -10 @@ -24,5 +19,13 @@ def with_cdef(): dd[ob] = -10 def test_list(list L, object i, object a): + """ + >>> test_list(list(range(11)), -2, None) + [0, 1, 2, 3, 4, 5, 6, 7, 8, None, 10] + >>> test_list(list(range(11)), "invalid index", None) #doctest: +ELLIPSIS + Traceback (most recent call last): + ... + TypeError: list indices must be integers... + """ L[i] = a return L diff --git a/tests/run/cdefassign.pyx b/tests/run/cdefassign.pyx index bb0ebab8..b512af7e 100644 --- a/tests/run/cdefassign.pyx +++ b/tests/run/cdefassign.pyx @@ -1,11 +1,10 @@ -__doc__ = u""" - >>> test(1, 2) - 4 1 2 2 0 7 8 -""" - cdef int g = 7 def test(x, int y): + """ + >>> test(1, 2) + 4 1 2 2 0 7 8 + """ if True: before = 0 cdef int a = 4, b = x, c = y, *p = &y diff --git a/tests/run/cdefoptargs.pyx b/tests/run/cdefoptargs.pyx index 325da795..3a601dba 100644 --- a/tests/run/cdefoptargs.pyx +++ b/tests/run/cdefoptargs.pyx @@ -1,23 +1,21 @@ -__doc__ = u""" - >>> call2() - >>> call3() - >>> call4() - >>> test_foo() - 2 - 3 - 7 - 26 -""" - # the calls: def call2(): + """ + >>> call2() + """ b(1,2) def call3(): + """ + >>> call3() + """ b(1,2,3) def call4(): + """ + >>> call4() + """ b(1,2,3,4) # the called function: @@ -30,6 +28,13 @@ cdef int foo(int a, int b=1, int c=1): return a+b*c def test_foo(): + """ + >>> test_foo() + 2 + 3 + 7 + 26 + """ print foo(1) print foo(1, 2) print foo(1, 2, 3) diff --git a/tests/run/cdivision_CEP_516.pyx b/tests/run/cdivision_CEP_516.pyx index 1a94ef29..586d425b 100644 --- a/tests/run/cdivision_CEP_516.pyx +++ b/tests/run/cdivision_CEP_516.pyx @@ -36,44 +36,6 @@ True >>> import warnings >>> warnings.showwarning = simple_warn ->>> mod_int_c_warn(-17, 10) -division with oppositely signed operands, C and Python semantics differ --7 ->>> div_int_c_warn(-17, 10) -division with oppositely signed operands, C and Python semantics differ --1 ->>> complex_expression(-150, 20, 19, -7) -verbose_call(20) -division with oppositely signed operands, C and Python semantics differ -verbose_call(19) -division with oppositely signed operands, C and Python semantics differ --2 - ->>> mod_div_zero_int(25, 10, 2) -verbose_call(5) -2 ->>> print(mod_div_zero_int(25, 10, 0)) -verbose_call(5) -integer division or modulo by zero ->>> print(mod_div_zero_int(25, 0, 0)) -integer division or modulo by zero - ->>> mod_div_zero_float(25, 10, 2) -2.5 ->>> print(mod_div_zero_float(25, 10, 0)) -float division ->>> print(mod_div_zero_float(25, 0, 0)) -float divmod() - ->>> py_div_long(-5, -1) -5 - ->>> import sys ->>> maxint = getattr(sys, ((sys.version_info[0] >= 3) and 'maxsize' or 'maxint')) ->>> py_div_long(-maxint-1, -1) -Traceback (most recent call last): -... -OverflowError: value too large to perform division """ def _all(seq): @@ -137,16 +99,34 @@ def test_cdiv_cmod(short a, short b): @cython.cdivision(True) @cython.cdivision_warnings(True) def mod_int_c_warn(int a, int b): + """ + >>> mod_int_c_warn(-17, 10) + division with oppositely signed operands, C and Python semantics differ + -7 + """ return a % b @cython.cdivision(True) @cython.cdivision_warnings(True) def div_int_c_warn(int a, int b): + """ + >>> div_int_c_warn(-17, 10) + division with oppositely signed operands, C and Python semantics differ + -1 + """ return a // b @cython.cdivision(False) @cython.cdivision_warnings(True) def complex_expression(int a, int b, int c, int d): + """ + >>> complex_expression(-150, 20, 19, -7) + verbose_call(20) + division with oppositely signed operands, C and Python semantics differ + verbose_call(19) + division with oppositely signed operands, C and Python semantics differ + -2 + """ return (a // verbose_call(b)) % (verbose_call(c) // d) cdef int verbose_call(int x): @@ -158,6 +138,16 @@ cdef int verbose_call(int x): @cython.cdivision(False) def mod_div_zero_int(int a, int b, int c): + """ + >>> mod_div_zero_int(25, 10, 2) + verbose_call(5) + 2 + >>> print(mod_div_zero_int(25, 10, 0)) + verbose_call(5) + integer division or modulo by zero + >>> print(mod_div_zero_int(25, 0, 0)) + integer division or modulo by zero + """ try: return verbose_call(a % b) / c except ZeroDivisionError, ex: @@ -165,6 +155,14 @@ def mod_div_zero_int(int a, int b, int c): @cython.cdivision(False) def mod_div_zero_float(float a, float b, float c): + """ + >>> mod_div_zero_float(25, 10, 2) + 2.5 + >>> print(mod_div_zero_float(25, 10, 0)) + float division + >>> print(mod_div_zero_float(25, 0, 0)) + float divmod() + """ try: return (a % b) / c except ZeroDivisionError, ex: @@ -172,4 +170,14 @@ def mod_div_zero_float(float a, float b, float c): @cython.cdivision(False) def py_div_long(long a, long b): + """ + >>> py_div_long(-5, -1) + 5 + >>> import sys + >>> maxint = getattr(sys, ((sys.version_info[0] >= 3) and 'maxsize' or 'maxint')) + >>> py_div_long(-maxint-1, -1) + Traceback (most recent call last): + ... + OverflowError: value too large to perform division + """ return a / b diff --git a/tests/run/cfuncdef.pyx b/tests/run/cfuncdef.pyx index 17c90c62..43506267 100644 --- a/tests/run/cfuncdef.pyx +++ b/tests/run/cfuncdef.pyx @@ -1,7 +1,3 @@ -__doc__ = u""" - >>> test() -""" - cdef void ftang(): cdef int x x = 0 @@ -16,6 +12,9 @@ cdef spam(int i, obj, object object): c = 0 def test(): + """ + >>> test() + """ ftang() foo(0, c'f') spam(25, None, None) diff --git a/tests/run/char_constants_T99.pyx b/tests/run/char_constants_T99.pyx index 401f5842..a5fe9172 100644 --- a/tests/run/char_constants_T99.pyx +++ b/tests/run/char_constants_T99.pyx @@ -1,22 +1,22 @@ -__doc__ = u""" ->>> global_c_and_s() -99 -abcdef - ->>> local_c_and_s() -98 -bcdefg -""" - cdef char c = 'c' cdef char* s = 'abcdef' def global_c_and_s(): + """ + >>> global_c_and_s() + 99 + abcdef + """ pys = s print c print (pys.decode(u'ASCII')) def local_c_and_s(): + """ + >>> local_c_and_s() + 98 + bcdefg + """ cdef char c = 'b' cdef char* s = 'bcdefg' pys = s diff --git a/tests/run/cintop.pyx b/tests/run/cintop.pyx index 57da2ecf..f6cdca8c 100644 --- a/tests/run/cintop.pyx +++ b/tests/run/cintop.pyx @@ -13,11 +13,13 @@ __doc__ = u""" >>> (int1, long1) == f() True - >>> f() - (45, 111) """ def f(): + """ + >>> f() + (45, 111) + """ cdef int int1, int2, int3 cdef char char1 cdef long long1, long2 diff --git a/tests/run/cmp.pyx b/tests/run/cmp.pyx index 6b5fd14c..f8400102 100644 --- a/tests/run/cmp.pyx +++ b/tests/run/cmp.pyx @@ -1,37 +1,41 @@ -__doc__ = u""" +def single_py(a, b): + """ >>> single_py(1, 2) True >>> single_py(2, 1) False + """ + return a < b + +def cascaded_py(a, b, c): + """ >>> cascaded_py(1, 2, 3) True >>> cascaded_py(1, 2, -1) False >>> cascaded_py(10, 2, 3) False + """ + return a < b < c +def single_c(int a, int b): + """ >>> single_c(1, 2) True >>> single_c(2, 1) False + """ + return a < b + +def cascaded_c(double a, double b, double c): + """ >>> cascaded_c(1, 2, 3) True >>> cascaded_c(1, 2, -1) False >>> cascaded_c(10, 2, 3) False -""" - -def single_py(a, b): - return a < b - -def cascaded_py(a, b, c): - return a < b < c - -def single_c(int a, int b): - return a < b - -def cascaded_c(double a, double b, double c): + """ return a < b < c def typed_cmp(list L): diff --git a/tests/run/coercearraytoptr.pyx b/tests/run/coercearraytoptr.pyx index fb68076b..47e4d516 100644 --- a/tests/run/coercearraytoptr.pyx +++ b/tests/run/coercearraytoptr.pyx @@ -1,4 +1,3 @@ - cdef char* cstring = "abcdefg" cdef void spam(char *target): diff --git a/tests/run/complex_numbers_T305.pyx b/tests/run/complex_numbers_T305.pyx index addc91db..f07dcffe 100644 --- a/tests/run/complex_numbers_T305.pyx +++ b/tests/run/complex_numbers_T305.pyx @@ -1,24 +1,46 @@ -__doc__ = u""" +#cdef extern from "complex.h": +# pass + +cimport cython + +def test_object_conversion(o): + """ >>> test_object_conversion(2) ((2+0j), (2+0j), (2+0j)) >>> test_object_conversion(2j - 0.5) ((-0.5+2j), (-0.5+2j), (-0.5+2j)) - + """ + cdef float complex a = o + cdef double complex b = o + cdef long double complex c = o + return (a, b, c) + +def test_arithmetic(double complex z, double complex w): + """ >>> test_arithmetic(2j, 4j) (2j, -2j, 6j, -2j, (-8+0j), (0.5+0j)) >>> test_arithmetic(6+12j, 3j) ((6+12j), (-6-12j), (6+15j), (6+9j), (-36+18j), (4-2j)) >>> test_arithmetic(5-10j, 3+4j) ((5-10j), (-5+10j), (8-6j), (2-14j), (55-10j), (-1-2j)) + + ## XXX this is not working + ## >>> test_div_by_zero(4j) + ## -0.25j + ## >>> test_div_by_zero(0) + ## Traceback (most recent call last): + ## ... + ## ZeroDivisionError: float division + """ + return +z, -z, z+w, z-w, z*w, z/w ## XXX this is not working -## >>> test_div_by_zero(4j) -## -0.25j -## >>> test_div_by_zero(0) -## Traceback (most recent call last): -## ... -## ZeroDivisionError: float division +## @cython.cdivision(False) +## def test_div_by_zero(double complex z): +## return 1/z +def test_coercion(int a, float b, double c, float complex d, double complex e): + """ >>> test_coercion(1, 1.5, 2.5, 4+1j, 10j) (1+0j) (1.5+0j) @@ -26,7 +48,17 @@ __doc__ = u""" (4+1j) 10j (9+21j) - + """ + cdef double complex z + z = a; print z + z = b; print z + z = c; print z + z = d; print z + z = e; print z + return z + a + b + c + d + e + +def test_compare(double complex a, double complex b): + """ >>> test_compare(3, 3) (True, False) >>> test_compare(3j, 3j) @@ -35,93 +67,62 @@ __doc__ = u""" (False, True) >>> test_compare(3, 4) (False, True) - + """ + return a == b, a != b + +def test_compare_coerce(double complex a, int b): + """ >>> test_compare_coerce(3, 4) (False, True) >>> test_compare_coerce(4+1j, 4) (False, True) >>> test_compare_coerce(4, 4) (True, False) - + """ + return a == b, a != b + +def test_literal(): + """ >>> test_literal() (5j, (1-2.5j)) - + """ + return 5j, 1-2.5j + +def test_real_imag(double complex z): + """ >>> test_real_imag(1-3j) (1.0, -3.0) >>> test_real_imag(5) (5.0, 0.0) >>> test_real_imag(1.5j) (0.0, 1.5) - + """ + return z.real, z.imag + +def test_real_imag_assignment(object a, double b): + """ >>> test_real_imag_assignment(1, 2) (1+2j) >>> test_real_imag_assignment(1.5, -3.5) (1.5-3.5j) - - >>> test_conjugate(2+3j) - (2-3j) - - >>> test_conjugate_double(2+3j) - (2-3j) - - >>> test_coerce_typedef_multiply(3, 1j) - (3j) - - >>> complex_retval() - 1j - -""" - -#cdef extern from "complex.h": -# pass - -cimport cython - -def test_object_conversion(o): - cdef float complex a = o - cdef double complex b = o - cdef long double complex c = o - return (a, b, c) - -def test_arithmetic(double complex z, double complex w): - return +z, -z, z+w, z-w, z*w, z/w - -## XXX this is not working -## @cython.cdivision(False) -## def test_div_by_zero(double complex z): -## return 1/z - -def test_coercion(int a, float b, double c, float complex d, double complex e): - cdef double complex z - z = a; print z - z = b; print z - z = c; print z - z = d; print z - z = e; print z - return z + a + b + c + d + e - -def test_compare(double complex a, double complex b): - return a == b, a != b - -def test_compare_coerce(double complex a, int b): - return a == b, a != b - -def test_literal(): - return 5j, 1-2.5j - -def test_real_imag(double complex z): - return z.real, z.imag - -def test_real_imag_assignment(object a, double b): + """ cdef double complex z z.real = a z.imag = b return z def test_conjugate(float complex z): + """ + >>> test_conjugate(2+3j) + (2-3j) + """ return z.conjugate() def test_conjugate_double(double complex z): + """ + >>> test_conjugate_double(2+3j) + (2-3j) + """ return z.conjugate() ctypedef double complex cdouble @@ -130,7 +131,15 @@ def test_conjugate_typedef(cdouble z): ctypedef double mydouble def test_coerce_typedef_multiply(mydouble x, double complex z): + """ + >>> test_coerce_typedef_multiply(3, 1j) + (3j) + """ return x * z cpdef double complex complex_retval(): + """ + >>> complex_retval() + 1j + """ return 1j diff --git a/tests/run/concatcstrings.pyx b/tests/run/concatcstrings.pyx index ca5abe69..8c96f55d 100644 --- a/tests/run/concatcstrings.pyx +++ b/tests/run/concatcstrings.pyx @@ -8,4 +8,3 @@ if sys.version_info[0] >= 3: __doc__ = __doc__.replace(u" u'", u" '") spam = u"C string 1" + u"C string 2" - diff --git a/tests/run/consts.pyx b/tests/run/consts.pyx index 5312de86..2511cec8 100644 --- a/tests/run/consts.pyx +++ b/tests/run/consts.pyx @@ -1,29 +1,3 @@ -__doc__ = u""" ->>> add() == 1+2+3+4 -True ->>> add_var(10) == 1+2+10+3+4 -True ->>> neg() == -1 -2 - (-3+4) -True ->>> long_int_mix() == 1 + (2 * 3) // 2 -True ->>> if IS_PY3: type(long_int_mix()) is int -... else: type(long_int_mix()) is long -True ->>> char_int_mix() == 1 + (ord(' ') * 3) // 2 + ord('A') -True ->>> int_cast() == 1 + 2 * 6000 -True ->>> mul() == 1*60*1000 -True ->>> arithm() == 9*2+3*8//6-10 -True ->>> parameters() == _func(-1 -2, - (-3+4), 1*2*3) -True ->>> lists() == [1,2,3] + [4,5,6] -True -""" - import sys IS_PY3 = sys.version_info[0] >= 3 @@ -31,31 +5,74 @@ def _func(a,b,c): return a+b+c def add(): + """ + >>> add() == 1+2+3+4 + True + """ return 1+2+3+4 def add_var(a): + """ + >>> add_var(10) == 1+2+10+3+4 + True + """ return 1+2 +a+ 3+4 def neg(): + """ + >>> neg() == -1 -2 - (-3+4) + True + """ return -1 -2 - (-3+4) def long_int_mix(): + """ + >>> long_int_mix() == 1 + (2 * 3) // 2 + True + >>> if IS_PY3: type(long_int_mix()) is int + ... else: type(long_int_mix()) is long + True + """ return 1L + (2 * 3L) // 2 def char_int_mix(): + """ + >>> char_int_mix() == 1 + (ord(' ') * 3) // 2 + ord('A') + True + """ return 1L + (c' ' * 3L) // 2 + c'A' def int_cast(): + """ + >>> int_cast() == 1 + 2 * 6000 + True + """ return (1 + 2 * 6000) def mul(): + """ + >>> mul() == 1*60*1000 + True + """ return 1*60*1000 def arithm(): + """ + >>> arithm() == 9*2+3*8//6-10 + True + """ return 9*2+3*8//6-10 def parameters(): + """ + >>> parameters() == _func(-1 -2, - (-3+4), 1*2*3) + True + """ return _func(-1 -2, - (-3+4), 1*2*3) def lists(): + """ + >>> lists() == [1,2,3] + [4,5,6] + True + """ return [1,2,3] + [4,5,6] diff --git a/tests/run/cpdef_temps_T411.pyx b/tests/run/cpdef_temps_T411.pyx index aa1bc7d2..7b96f1ce 100644 --- a/tests/run/cpdef_temps_T411.pyx +++ b/tests/run/cpdef_temps_T411.pyx @@ -1,21 +1,21 @@ -__doc__ = """ +cdef class A: + """ >>> A().is_True() True >>> A().is_False() False - - >>> B().is_True() - True - >>> B().is_False() - False -""" - -cdef class A: + """ cpdef is_True(self): return True cpdef is_False(self): return not self.is_True() class B(A): + """ + >>> B().is_True() + True + >>> B().is_False() + False + """ def is_True(self): return True diff --git a/tests/run/crashT245.pyx b/tests/run/crashT245.pyx index 3b01e4bd..511beaef 100644 --- a/tests/run/crashT245.pyx +++ b/tests/run/crashT245.pyx @@ -1,12 +1,10 @@ -__doc__ = """ ->>> f() -{'x': 1} -""" - cimport crashT245_pxd def f(): + """ + >>> f() + {'x': 1} + """ cdef crashT245_pxd.MyStruct s s.x = 1 print s - diff --git a/tests/run/cstruct.pyx b/tests/run/cstruct.pyx index 1a0604bb..51550b2b 100644 --- a/tests/run/cstruct.pyx +++ b/tests/run/cstruct.pyx @@ -1,10 +1,3 @@ -__doc__ = u""" - >>> test_i() - >>> test_c() - >>> test_p() - >>> test_g() -""" - cdef struct Grail cdef struct Spam: @@ -41,19 +34,31 @@ cdef void eggs_g(Spam s): spam = ham def test_i(): + """ + >>> test_i() + """ spam.i = 1 eggs_i(spam) def test_c(): + """ + >>> test_c() + """ spam.c = c'a' eggs_c(spam) def test_p(): + """ + >>> test_p() + """ cdef float f spam.p[0] = &f eggs_p(spam) def test_g(): + """ + >>> test_g() + """ cdef Grail l spam.g = &l eggs_g(spam) diff --git a/tests/run/ct_IF.pyx b/tests/run/ct_IF.pyx index 08791879..6d8d6a30 100644 --- a/tests/run/ct_IF.pyx +++ b/tests/run/ct_IF.pyx @@ -1,16 +1,11 @@ -__doc__ = u""" - >>> f() - 1 - >>> g() - 2 - >>> h() - 3 -""" - DEF NO = 0 DEF YES = 1 def f(): + """ + >>> f() + 1 + """ cdef int i IF YES: i = 1 @@ -21,6 +16,10 @@ def f(): return i def g(): + """ + >>> g() + 2 + """ cdef int i IF NO: i = 1 @@ -31,6 +30,10 @@ def g(): return i def h(): + """ + >>> h() + 3 + """ cdef int i IF NO: i = 1 diff --git a/tests/run/ctruthtests.pyx b/tests/run/ctruthtests.pyx index 5014496a..f534f821 100644 --- a/tests/run/ctruthtests.pyx +++ b/tests/run/ctruthtests.pyx @@ -1,36 +1,8 @@ -__doc__ = u""" ->>> test_int(0) -False ->>> test_int(1) -True - ->>> test_short(0) -False ->>> test_short(1) -True - ->>> test_Py_ssize_t(0) -False ->>> test_Py_ssize_t(1) -True - ->>> test_ptr() -False ->>> test_ptr2() -2 - ->>> test_attr_int(TestExtInt(0)) -False ->>> test_attr_int(TestExtInt(1)) -True - ->>> test_attr_ptr(TestExtPtr(0)) -False ->>> test_attr_ptr(TestExtPtr(1)) -True -""" - def test_ptr(): + """ + >>> test_ptr() + False + """ cdef void* p = NULL if p: return True @@ -38,6 +10,10 @@ def test_ptr(): return False def test_ptr2(): + """ + >>> test_ptr2() + 2 + """ cdef char* p1 = NULL cdef char* p2 = NULL p1 += 1 @@ -50,18 +26,36 @@ def test_ptr2(): return 3 def test_int(int i): + """ + >>> test_int(0) + False + >>> test_int(1) + True + """ if i: return True else: return False def test_short(short i): + """ + >>> test_short(0) + False + >>> test_short(1) + True + """ if i: return True else: return False def test_Py_ssize_t(Py_ssize_t i): + """ + >>> test_Py_ssize_t(0) + False + >>> test_Py_ssize_t(1) + True + """ if i: return True else: @@ -72,6 +66,12 @@ cdef class TestExtInt: def __init__(self, i): self.i = i def test_attr_int(TestExtInt e): + """ + >>> test_attr_int(TestExtInt(0)) + False + >>> test_attr_int(TestExtInt(1)) + True + """ if e.i: return True else: @@ -82,6 +82,12 @@ cdef class TestExtPtr: def __init__(self, int i): self.p = i def test_attr_ptr(TestExtPtr e): + """ + >>> test_attr_ptr(TestExtPtr(0)) + False + >>> test_attr_ptr(TestExtPtr(1)) + True + """ if e.p: return True else: diff --git a/tests/run/cunion.pyx b/tests/run/cunion.pyx index 61056197..41b68da1 100644 --- a/tests/run/cunion.pyx +++ b/tests/run/cunion.pyx @@ -1,9 +1,3 @@ -__doc__ = u""" - >>> test_i() - >>> test_c() - >>> test_p() -""" - cdef union Spam: int i char c @@ -29,14 +23,23 @@ cdef void eggs_p(Spam s): spam = ham def test_i(): + """ + >>> test_i() + """ spam.i = 1 eggs_i(spam) def test_c(): + """ + >>> test_c() + """ spam.c = c'a' eggs_c(spam) def test_p(): + """ + >>> test_p() + """ cdef float f spam.p[0] = &f eggs_p(spam) diff --git a/tests/run/cvardef.pyx b/tests/run/cvardef.pyx index 08fbb493..449fc51a 100644 --- a/tests/run/cvardef.pyx +++ b/tests/run/cvardef.pyx @@ -1,8 +1,7 @@ -__doc__ = u""" - >>> f() -""" - def f(): + """ + >>> f() + """ cdef char a_char cdef short a_short cdef int i1, i2 diff --git a/tests/run/dict.pyx b/tests/run/dict.pyx index 05bea96a..49a0791b 100644 --- a/tests/run/dict.pyx +++ b/tests/run/dict.pyx @@ -1,31 +1,69 @@ -__doc__ = u""" +def empty(): + """ >>> empty() {} + """ + d = {} + return d + +def keyvalue(key, value): + """ >>> keyvalue(1, 2) {1: 2} + """ + d = {key:value} + return d +def keyvalues(key1, value1, key2, value2): + """ >>> keyvalues(1, 2, 3, 4) {1: 2, 3: 4} + """ + d = {key1:value1, key2:value2} + return d + +def keyvalues2(key1, value1, key2, value2): + """ >>> keyvalues2(1, 2, 3, 4) {1: 2, 3: 4} + """ + d = {key1:value1, key2:value2,} + return d +def constant(): + """ >>> len(constant()) 2 >>> print(constant()['parrot']) resting >>> print(constant()['answer']) 42 + """ + d = {u"parrot":u"resting", u"answer":42} + return d +def dict_call(): + """ >>> print(dict_call()['parrot']) resting >>> print(dict_call()['answer']) 42 + """ + d = dict(parrot=u"resting", answer=42) + return d +def dict_call_dict(): + """ >>> print(dict_call_dict()['parrot']) resting >>> print(dict_call_dict()['answer']) 42 + """ + d = dict(dict(parrot=u"resting", answer=42)) + return d +def dict_call_kwargs(): + """ >>> print(dict_call_kwargs()['parrot1']) resting >>> print(dict_call_kwargs()['parrot2']) @@ -34,37 +72,7 @@ __doc__ = u""" 42 >>> print(dict_call_kwargs()['answer2']) 42 -""" - -def empty(): - d = {} - return d - -def keyvalue(key, value): - d = {key:value} - return d - -def keyvalues(key1, value1, key2, value2): - d = {key1:value1, key2:value2} - return d - -def keyvalues2(key1, value1, key2, value2): - d = {key1:value1, key2:value2,} - return d - -def constant(): - d = {u"parrot":u"resting", u"answer":42} - return d - -def dict_call(): - d = dict(parrot=u"resting", answer=42) - return d - -def dict_call_dict(): - d = dict(dict(parrot=u"resting", answer=42)) - return d - -def dict_call_kwargs(): + """ kwargs = dict(parrot1=u"resting", answer1=42) d = dict(parrot2=u"resting", answer2=42, **kwargs) return d diff --git a/tests/run/dictintindex.pyx b/tests/run/dictintindex.pyx index 1aca230d..2a83ac9c 100644 --- a/tests/run/dictintindex.pyx +++ b/tests/run/dictintindex.pyx @@ -1,125 +1,120 @@ -__doc__ = u""" ->>> test_get_char_neg() -0 ->>> test_get_char_zero() -1 ->>> test_get_char_pos() -2 ->>> test_get_uchar_zero() -1 ->>> test_get_uchar_pos() -2 ->>> test_get_int_neg() -0 ->>> test_get_int_zero() -1 ->>> test_get_int_pos() -2 ->>> test_get_uint_zero() -1 ->>> test_get_uint_pos() -2 ->>> test_get_longlong_neg() -0 ->>> test_get_longlong_zero() -1 ->>> test_get_longlong_pos() -2 ->>> test_get_longlong_big() -3 ->>> test_get_ulonglong_zero() -1 ->>> test_get_ulonglong_pos() -2 ->>> test_get_ulonglong_big() -3 ->>> test_del_char() -Traceback (most recent call last): -KeyError: 0 ->>> test_del_uchar() -Traceback (most recent call last): -KeyError: 0 ->>> test_del_int() -Traceback (most recent call last): -KeyError: 0 ->>> test_del_uint() #doctest: +ELLIPSIS -Traceback (most recent call last): -KeyError: 0... ->>> test_del_longlong() #doctest: +ELLIPSIS -Traceback (most recent call last): -KeyError: 0... ->>> test_del_longlong_big() #doctest: +ELLIPSIS -Traceback (most recent call last): -KeyError: ... ->>> test_del_ulonglong() #doctest: +ELLIPSIS -Traceback (most recent call last): -KeyError: 0... ->>> test_del_ulonglong_big() #doctest: +ELLIPSIS -Traceback (most recent call last): -KeyError: ... -""" - def test_get_char_neg(): + """ + >>> test_get_char_neg() + 0 + """ cdef char key = -1 d = {-1:0} return d[key] def test_get_char_zero(): + """ + >>> test_get_char_zero() + 1 + """ cdef char key = 0 d = {0:1} return d[key] def test_get_char_pos(): + """ + >>> test_get_char_pos() + 2 + """ cdef char key = 1 d = {1:2} return d[key] def test_get_uchar_zero(): + """ + >>> test_get_uchar_zero() + 1 + """ cdef unsigned char key = 0 d = {0:1} return d[key] def test_get_uchar_pos(): + """ + >>> test_get_uchar_pos() + 2 + """ cdef unsigned char key = 1 d = {1:2} return d[key] def test_get_int_neg(): + """ + >>> test_get_int_neg() + 0 + """ cdef int key = -1 d = {-1:0} return d[key] def test_get_int_zero(): + """ + >>> test_get_int_zero() + 1 + """ cdef int key = 0 d = {0:1} return d[key] def test_get_int_pos(): + """ + >>> test_get_int_pos() + 2 + """ cdef int key = 1 d = {1:2} return d[key] def test_get_uint_zero(): + """ + >>> test_get_uint_zero() + 1 + """ cdef unsigned int key = 0 d = {0:1} return d[key] def test_get_uint_pos(): + """ + >>> test_get_uint_pos() + 2 + """ cdef unsigned int key = 1 d = {1:2} return d[key] def test_get_longlong_neg(): + """ + >>> test_get_longlong_neg() + 0 + """ cdef long long key = -1 d = {-1:0} return d[key] def test_get_longlong_zero(): + """ + >>> test_get_longlong_zero() + 1 + """ cdef long long key = 0 d = {0:1} return d[key] def test_get_longlong_pos(): + """ + >>> test_get_longlong_pos() + 2 + """ cdef long long key = 1 d = {1:2} return d[key] def test_get_longlong_big(): + """ + >>> test_get_longlong_big() + 3 + """ cdef unsigned int shift = sizeof(long)+2 cdef long long big = 1 cdef long long key = big<>> test_get_ulonglong_zero() + 1 + """ cdef unsigned long long key = 0 d = {0:1} return d[key] def test_get_ulonglong_pos(): + """ + >>> test_get_ulonglong_pos() + 2 + """ cdef unsigned long long key = 1 d = {1:2} return d[key] def test_get_ulonglong_big(): + """ + >>> test_get_ulonglong_big() + 3 + """ cdef unsigned int shift = sizeof(long)+2 cdef unsigned long long big = 1 cdef unsigned long long key = big<>> test_del_char() + Traceback (most recent call last): + KeyError: 0 + """ cdef char key = 0 d = {0:1} del d[key] return d[key] def test_del_uchar(): + """ + >>> test_del_uchar() + Traceback (most recent call last): + KeyError: 0 + """ cdef unsigned char key = 0 d = {0:1} del d[key] return d[key] def test_del_int(): + """ + >>> test_del_int() + Traceback (most recent call last): + KeyError: 0 + """ cdef int key = 0 d = {0:1} del d[key] return d[key] def test_del_uint(): + """ + >>> test_del_uint() #doctest: +ELLIPSIS + Traceback (most recent call last): + KeyError: 0... + """ cdef unsigned int key = 0 d = {0:1} del d[key] return d[key] def test_del_longlong(): + """ + >>> test_del_longlong() #doctest: +ELLIPSIS + Traceback (most recent call last): + KeyError: 0... + """ cdef long long key = 0 d = {0:1} del d[key] return d[key] def test_del_ulonglong(): + """ + >>> test_del_ulonglong() #doctest: +ELLIPSIS + Traceback (most recent call last): + KeyError: 0... + """ cdef unsigned long long key = 0 d = {0:1} del d[key] return d[key] def test_del_longlong_big(): + """ + >>> test_del_longlong_big() #doctest: +ELLIPSIS + Traceback (most recent call last): + KeyError: ... + """ cdef int shift = sizeof(long)+2 cdef long long big = 1 cdef long long key = big<>> test_del_ulonglong_big() #doctest: +ELLIPSIS + Traceback (most recent call last): + KeyError: ... + """ cdef unsigned int shift = sizeof(long)+2 cdef unsigned long long big = 1 cdef unsigned long long key = big<>> test() 1.0 -""" - -def test(): + """ cdef float v[10][10] v[1][2] = 1.0 return v[1][2] diff --git a/tests/run/empty_for_loop_T208.pyx b/tests/run/empty_for_loop_T208.pyx index fb5906dd..46deed25 100644 --- a/tests/run/empty_for_loop_T208.pyx +++ b/tests/run/empty_for_loop_T208.pyx @@ -1,17 +1,18 @@ -__doc__ = u""" - >>> go_py_empty() - 20 - >>> go_c_empty() - 20 -""" - def go_py_empty(): + """ + >>> go_py_empty() + 20 + """ i = 20 for i in range(4,0): print u"Spam!" return i def go_c_empty(): + """ + >>> go_c_empty() + 20 + """ cdef int i = 20 for i in range(4,0): print u"Spam!" diff --git a/tests/run/enumerate_T316.pyx b/tests/run/enumerate_T316.pyx index a8f4739b..d48a4942 100644 --- a/tests/run/enumerate_T316.pyx +++ b/tests/run/enumerate_T316.pyx @@ -1,89 +1,53 @@ -__doc__ = u""" - >>> go_c_enumerate() - 0 1 - 1 2 - 2 3 - 3 4 - - >>> go_py_enumerate() - 0 1 - 1 2 - 2 3 - 3 4 - - >>> empty_c_enumerate() - (55, 99) - - >>> go_c_enumerate_step() - 0 1 - 1 3 - 2 5 - - >>> single_target_enumerate() - 0 1 - 1 2 - 2 3 - 3 4 - - >>> multi_enumerate() - 0 0 0 1 - 1 1 1 2 - 2 2 2 3 - 3 3 3 4 - - >>> multi_c_enumerate() - 0 0 0 1 - 1 1 1 2 - 2 2 2 3 - 3 3 3 4 - - >>> py_enumerate_break(1,2,3,4) - 0 1 - :: 0 1 - - >>> py_enumerate_return() - :: 55 99 - >>> py_enumerate_return(1,2,3,4) - 0 1 - - >>> py_enumerate_continue(1,2,3,4) - 0 1 - 1 2 - 2 3 - 3 4 - :: 3 4 - - >>> py_enumerate_dict({}) - :: 55 99 - >>> py_enumerate_dict(dict(a=1, b=2, c=3)) - 0 a - 1 c - 2 b - :: 2 b - -""" - cimport cython @cython.test_fail_if_path_exists("//SimpleCallNode//NameNode[@name = 'enumerate']") def go_py_enumerate(): + """ + >>> go_py_enumerate() + 0 1 + 1 2 + 2 3 + 3 4 + """ for i,k in enumerate(range(1,5)): print i, k #T442 @cython.test_fail_if_path_exists("//SimpleCallNode//NameNode[@name = 'enumerate']") def go_c_enumerate(): + """ + >>> go_c_enumerate() + 0 1 + 1 2 + 2 3 + 3 4 + """ cdef int i,k for i,k in enumerate(range(1,5)): print i, k #T442 @cython.test_fail_if_path_exists("//SimpleCallNode//NameNode[@name = 'enumerate']") def go_c_enumerate_step(): + """ + >>> go_c_enumerate_step() + 0 1 + 1 3 + 2 5 + """ cdef int i,k for i,k in enumerate(range(1,7,2)): print i, k @cython.test_fail_if_path_exists("//SimpleCallNode//NameNode[@name = 'enumerate']") def py_enumerate_dict(dict d): + """ + >>> py_enumerate_dict({}) + :: 55 99 + >>> py_enumerate_dict(dict(a=1, b=2, c=3)) + 0 a + 1 c + 2 b + :: 2 b + """ cdef int i = 55 k = 99 for i,k in enumerate(d): @@ -92,6 +56,11 @@ def py_enumerate_dict(dict d): @cython.test_fail_if_path_exists("//SimpleCallNode") def py_enumerate_break(*t): + """ + >>> py_enumerate_break(1,2,3,4) + 0 1 + :: 0 1 + """ i,k = 55,99 for i,k in enumerate(t): print i, k @@ -100,6 +69,12 @@ def py_enumerate_break(*t): @cython.test_fail_if_path_exists("//SimpleCallNode") def py_enumerate_return(*t): + """ + >>> py_enumerate_return() + :: 55 99 + >>> py_enumerate_return(1,2,3,4) + 0 1 + """ i,k = 55,99 for i,k in enumerate(t): print i, k @@ -108,6 +83,14 @@ def py_enumerate_return(*t): @cython.test_fail_if_path_exists("//SimpleCallNode") def py_enumerate_continue(*t): + """ + >>> py_enumerate_continue(1,2,3,4) + 0 1 + 1 2 + 2 3 + 3 4 + :: 3 4 + """ i,k = 55,99 for i,k in enumerate(t): print i, k @@ -116,6 +99,10 @@ def py_enumerate_continue(*t): # T442 @cython.test_fail_if_path_exists("//SimpleCallNode//NameNode[@name = 'enumerate']") def empty_c_enumerate(): + """ + >>> empty_c_enumerate() + (55, 99) + """ cdef int i = 55, k = 99 for i,k in enumerate(range(0)): print i, k @@ -123,16 +110,37 @@ def empty_c_enumerate(): # not currently optimised def single_target_enumerate(): + """ + >>> single_target_enumerate() + 0 1 + 1 2 + 2 3 + 3 4 + """ for t in enumerate(range(1,5)): print t[0], t[1] @cython.test_fail_if_path_exists("//SimpleCallNode//NameNode[@name = 'enumerate']") def multi_enumerate(): + """ + >>> multi_enumerate() + 0 0 0 1 + 1 1 1 2 + 2 2 2 3 + 3 3 3 4 + """ for a,(b,(c,d)) in enumerate(enumerate(enumerate(range(1,5)))): print a,b,c,d # T442 @cython.test_fail_if_path_exists("//SimpleCallNode") def multi_c_enumerate(): + """ + >>> multi_c_enumerate() + 0 0 0 1 + 1 1 1 2 + 2 2 2 3 + 3 3 3 4 + """ cdef int a,b,c,d for a,(b,(c,d)) in enumerate(enumerate(enumerate(range(1,5)))): print a,b,c,d diff --git a/tests/run/exceptionpropagation.pyx b/tests/run/exceptionpropagation.pyx index eb157b86..411d436b 100644 --- a/tests/run/exceptionpropagation.pyx +++ b/tests/run/exceptionpropagation.pyx @@ -1,10 +1,3 @@ -__doc__ = u""" ->>> foo(0) ->>> foo(1) -Traceback (most recent call last): -RuntimeError -""" - cdef int CHKERR(int ierr) except -1: if ierr==0: return 0 raise RuntimeError @@ -13,6 +6,12 @@ cdef int obj2int(object ob) except *: return ob def foo(a): + """ + >>> foo(0) + >>> foo(1) + Traceback (most recent call last): + RuntimeError + """ cdef int i = obj2int(a) CHKERR(i) diff --git a/tests/run/ext_instance_type_T232.pyx b/tests/run/ext_instance_type_T232.pyx index 3d40c7f2..29bf7008 100644 --- a/tests/run/ext_instance_type_T232.pyx +++ b/tests/run/ext_instance_type_T232.pyx @@ -1,13 +1,14 @@ -__doc__ = u""" ->>> set_attr(5) ->>> get_attr() -""" - cdef class MyExt: cdef object attr def set_attr(value): + """ + >>> set_attr(5) + """ MyExt().attr = value def get_attr(): + """ + >>> get_attr() + """ return MyExt().attr diff --git a/tests/run/extcmethod.pyx b/tests/run/extcmethod.pyx index d628760e..4092c4d7 100644 --- a/tests/run/extcmethod.pyx +++ b/tests/run/extcmethod.pyx @@ -1,11 +1,3 @@ -__doc__ = u""" ->>> test() -5 -0 -20 -5 -""" - cdef class Spam: cdef int tons @@ -25,6 +17,13 @@ cdef class SuperSpam(Spam): self.tons = self.tons + 2 * x def test(): + """ + >>> test() + 5 + 0 + 20 + 5 + """ cdef Spam s cdef SuperSpam ss s = Spam() diff --git a/tests/run/extended_unpacking_T235.pyx b/tests/run/extended_unpacking_T235.pyx index 1821ad01..9f7e9cac 100644 --- a/tests/run/extended_unpacking_T235.pyx +++ b/tests/run/extended_unpacking_T235.pyx @@ -1,195 +1,47 @@ __doc__ = u""" ->>> class FakeSeq(object): -... def __init__(self, length): -... self._values = list(range(1,length+1)) -... def __getitem__(self, i): -... return self._values[i] - ->>> unpack([1,2]) -(1, 2) ->>> unpack_list([1,2]) -(1, 2) ->>> unpack_tuple((1,2)) -(1, 2) - ->>> unpack( FakeSeq(2) ) -(1, 2) ->>> unpack('12') -('1', '2') - ->>> unpack_into_list('123') -('1', ['2'], '3') ->>> unpack_into_tuple('123') -('1', ['2'], '3') - ->>> unpack_in_loop([(1,2), (1,2,3), (1,2,3,4)]) -1 -([1], 2) -([1, 2], 3) -([1, 2, 3], 4) -2 -(1, [2]) -(1, [2, 3]) -(1, [2, 3, 4]) -3 -(1, [], 2) -(1, [2], 3) -(1, [2, 3], 4) - ->>> unpack_recursive((1,2,3,4)) -(1, [2, 3], 4) ->>> unpack_recursive( FakeSeq(4) ) -(1, [2, 3], 4) ->>> unpack_typed((1,2)) -([1], 2) - ->>> assign() -(1, [2, 3, 4], 5) - ->>> unpack_right('') -Traceback (most recent call last): -ValueError: need more than 0 values to unpack ->>> unpack_right_list([]) -Traceback (most recent call last): -ValueError: need more than 0 values to unpack ->>> unpack_right_tuple(()) -Traceback (most recent call last): -ValueError: need more than 0 values to unpack - ->>> unpack_right('1') -('1', []) ->>> unpack_right([1]) -(1, []) ->>> unpack_right('12') -('1', ['2']) ->>> unpack_right([1,2]) -(1, [2]) ->>> unpack_right('123') -('1', ['2', '3']) ->>> unpack_right([1,2,3]) -(1, [2, 3]) - ->>> unpack_right_list([1]) -(1, []) ->>> unpack_right_list([1,2]) -(1, [2]) ->>> unpack_right_list([1,2,3]) -(1, [2, 3]) ->>> unpack_right_tuple((1,)) -(1, []) ->>> unpack_right_tuple((1,2)) -(1, [2]) ->>> unpack_right_tuple((1,2,3)) -(1, [2, 3]) - ->>> unpack_left('') -Traceback (most recent call last): -ValueError: need more than 0 values to unpack ->>> unpack_left_list([]) -Traceback (most recent call last): -ValueError: need more than 0 values to unpack ->>> unpack_left_tuple(()) -Traceback (most recent call last): -ValueError: need more than 0 values to unpack - ->>> unpack_left('1') -([], '1') ->>> unpack_left([1]) -([], 1) ->>> unpack_left('12') -(['1'], '2') ->>> unpack_left([1,2]) -([1], 2) ->>> unpack_left('123') -(['1', '2'], '3') ->>> unpack_left([1,2,3]) -([1, 2], 3) - ->>> unpack_left_list([1]) -([], 1) ->>> unpack_left_list([1,2]) -([1], 2) ->>> unpack_left_list([1,2,3]) -([1, 2], 3) ->>> unpack_left_tuple((1,)) -([], 1) ->>> unpack_left_tuple((1,2)) -([1], 2) ->>> unpack_left_tuple((1,2,3)) -([1, 2], 3) - ->>> unpack_middle('') -Traceback (most recent call last): -ValueError: need more than 0 values to unpack ->>> unpack_middle([]) -Traceback (most recent call last): -ValueError: need more than 0 values to unpack ->>> unpack_middle(()) -Traceback (most recent call last): -ValueError: need more than 0 values to unpack ->>> unpack_middle_list([]) -Traceback (most recent call last): -ValueError: need more than 0 values to unpack ->>> unpack_middle_tuple(()) -Traceback (most recent call last): -ValueError: need more than 0 values to unpack - ->>> unpack_middle('1') -Traceback (most recent call last): -ValueError: need more than 1 value to unpack ->>> unpack_middle([1]) -Traceback (most recent call last): -ValueError: need more than 1 value to unpack ->>> unpack_middle_list([1]) -Traceback (most recent call last): -ValueError: need more than 1 value to unpack ->>> unpack_middle_tuple((1,)) -Traceback (most recent call last): -ValueError: need more than 1 value to unpack - ->>> unpack_middle('12') -('1', [], '2') ->>> unpack_middle([1,2]) -(1, [], 2) ->>> unpack_middle('123') -('1', ['2'], '3') ->>> unpack_middle([1,2,3]) -(1, [2], 3) - ->>> unpack_middle_list([1,2]) -(1, [], 2) ->>> unpack_middle_list([1,2,3]) -(1, [2], 3) ->>> unpack_middle_tuple((1,2)) -(1, [], 2) ->>> unpack_middle_tuple((1,2,3)) -(1, [2], 3) - ->>> a,b,c = unpack_middle(list(range(100))) ->>> a, len(b), c -(0, 98, 99) ->>> a,b,c = unpack_middle_list(list(range(100))) ->>> a, len(b), c -(0, 98, 99) ->>> a,b,c = unpack_middle_tuple(tuple(range(100))) ->>> a, len(b), c -(0, 98, 99) - + >>> class FakeSeq(object): + ... def __init__(self, length): + ... self._values = list(range(1,length+1)) + ... def __getitem__(self, i): + ... return self._values[i] + + >>> unpack( FakeSeq(2) ) + (1, 2) + >>> unpack_recursive( FakeSeq(4) ) + (1, [2, 3], 4) """ def unpack(l): + """ + >>> unpack([1,2]) + (1, 2) + >>> unpack('12') + ('1', '2') + """ a, b = l return a,b def unpack_list(list l): + """ + >>> unpack_list([1,2]) + (1, 2) + """ a, b = l return a,b def unpack_tuple(tuple t): + """ + >>> unpack_tuple((1,2)) + (1, 2) + """ a, b = t return a,b def assign(): + """ + >>> assign() + (1, [2, 3, 4], 5) + """ *a, b = 1,2,3,4,5 assert a+[b] == [1,2,3,4,5], (a,b) a, *b = 1,2,3,4,5 @@ -198,6 +50,10 @@ def assign(): return a,b,c def unpack_into_list(l): + """ + >>> unpack_into_list('123') + ('1', ['2'], '3') + """ [*a, b] = l assert a+[b] == list(l), repr((a+[b],list(l))) [a, *b] = l @@ -206,6 +62,10 @@ def unpack_into_list(l): return a,b,c def unpack_into_tuple(t): + """ + >>> unpack_into_tuple('123') + ('1', ['2'], '3') + """ (*a, b) = t assert a+[b] == list(t), repr((a+[b],list(t))) (a, *b) = t @@ -214,6 +74,21 @@ def unpack_into_tuple(t): return a,b,c def unpack_in_loop(list_of_sequences): + """ + >>> unpack_in_loop([(1,2), (1,2,3), (1,2,3,4)]) + 1 + ([1], 2) + ([1, 2], 3) + ([1, 2, 3], 4) + 2 + (1, [2]) + (1, [2, 3]) + (1, [2, 3, 4]) + 3 + (1, [], 2) + (1, [2], 3) + (1, [2, 3], 4) + """ print 1 for *a,b in list_of_sequences: print((a,b)) @@ -225,49 +100,193 @@ def unpack_in_loop(list_of_sequences): print((a,b,c)) def unpack_recursive(t): + """ + >>> unpack_recursive((1,2,3,4)) + (1, [2, 3], 4) + """ *(a, *b), c = t return a,b,c def unpack_typed(t): + """ + >>> unpack_typed((1,2)) + ([1], 2) + """ cdef list a *a, b = t return a,b def unpack_right(l): + """ + >>> unpack_right('') + Traceback (most recent call last): + ValueError: need more than 0 values to unpack + >>> unpack_right('1') + ('1', []) + >>> unpack_right([1]) + (1, []) + >>> unpack_right('12') + ('1', ['2']) + >>> unpack_right([1,2]) + (1, [2]) + >>> unpack_right('123') + ('1', ['2', '3']) + >>> unpack_right([1,2,3]) + (1, [2, 3]) + """ a, *b = l return a,b def unpack_right_list(list l): + """ + >>> unpack_right_list([]) + Traceback (most recent call last): + ValueError: need more than 0 values to unpack + >>> unpack_right_list([1]) + (1, []) + >>> unpack_right_list([1,2]) + (1, [2]) + >>> unpack_right_list([1,2,3]) + (1, [2, 3]) + """ a, *b = l return a,b def unpack_right_tuple(tuple t): + """ + >>> unpack_right_tuple(()) + Traceback (most recent call last): + ValueError: need more than 0 values to unpack + >>> unpack_right_tuple((1,)) + (1, []) + >>> unpack_right_tuple((1,2)) + (1, [2]) + >>> unpack_right_tuple((1,2,3)) + (1, [2, 3]) + """ a, *b = t return a,b def unpack_left(l): + """ + >>> unpack_left('') + Traceback (most recent call last): + ValueError: need more than 0 values to unpack + >>> unpack_left('1') + ([], '1') + >>> unpack_left([1]) + ([], 1) + >>> unpack_left('12') + (['1'], '2') + >>> unpack_left([1,2]) + ([1], 2) + >>> unpack_left('123') + (['1', '2'], '3') + >>> unpack_left([1,2,3]) + ([1, 2], 3) + """ *a, b = l return a,b def unpack_left_list(list l): + """ + >>> unpack_left_list([]) + Traceback (most recent call last): + ValueError: need more than 0 values to unpack + >>> unpack_left_list([1]) + ([], 1) + >>> unpack_left_list([1,2]) + ([1], 2) + >>> unpack_left_list([1,2,3]) + ([1, 2], 3) + """ *a, b = l return a,b def unpack_left_tuple(tuple t): + """ + >>> unpack_left_tuple(()) + Traceback (most recent call last): + ValueError: need more than 0 values to unpack + >>> unpack_left_tuple((1,)) + ([], 1) + >>> unpack_left_tuple((1,2)) + ([1], 2) + >>> unpack_left_tuple((1,2,3)) + ([1, 2], 3) + """ *a, b = t return a,b def unpack_middle(l): + """ + >>> unpack_middle('') + Traceback (most recent call last): + ValueError: need more than 0 values to unpack + >>> unpack_middle([]) + Traceback (most recent call last): + ValueError: need more than 0 values to unpack + >>> unpack_middle(()) + Traceback (most recent call last): + ValueError: need more than 0 values to unpack + >>> unpack_middle('1') + Traceback (most recent call last): + ValueError: need more than 1 value to unpack + >>> unpack_middle([1]) + Traceback (most recent call last): + ValueError: need more than 1 value to unpack + >>> unpack_middle('12') + ('1', [], '2') + >>> unpack_middle([1,2]) + (1, [], 2) + >>> unpack_middle('123') + ('1', ['2'], '3') + >>> unpack_middle([1,2,3]) + (1, [2], 3) + """ a, *b, c = l return a,b,c def unpack_middle_list(list l): + """ + >>> unpack_middle_list([]) + Traceback (most recent call last): + ValueError: need more than 0 values to unpack + >>> unpack_middle_list([1]) + Traceback (most recent call last): + ValueError: need more than 1 value to unpack + >>> unpack_middle_list([1,2]) + (1, [], 2) + >>> unpack_middle_list([1,2,3]) + (1, [2], 3) + """ a, *b, c = l return a,b,c def unpack_middle_tuple(tuple t): + """ + >>> unpack_middle_tuple(()) + Traceback (most recent call last): + ValueError: need more than 0 values to unpack + >>> unpack_middle_tuple((1,)) + Traceback (most recent call last): + ValueError: need more than 1 value to unpack + >>> unpack_middle_tuple((1,2)) + (1, [], 2) + >>> unpack_middle_tuple((1,2,3)) + (1, [2], 3) + >>> a,b,c = unpack_middle(list(range(100))) + >>> a, len(b), c + (0, 98, 99) + >>> a,b,c = unpack_middle_list(list(range(100))) + >>> a, len(b), c + (0, 98, 99) + >>> a,b,c = unpack_middle_tuple(tuple(range(100))) + >>> a, len(b), c + (0, 98, 99) + """ a, *b, c = t return a,b,c diff --git a/tests/run/extended_unpacking_T409.pyx b/tests/run/extended_unpacking_T409.pyx index 65cf23e4..7b001e1b 100644 --- a/tests/run/extended_unpacking_T409.pyx +++ b/tests/run/extended_unpacking_T409.pyx @@ -1,4 +1,3 @@ - def simple(): """ >>> simple() diff --git a/tests/run/extinherit.pyx b/tests/run/extinherit.pyx index 9452a5f0..0c8cb9de 100644 --- a/tests/run/extinherit.pyx +++ b/tests/run/extinherit.pyx @@ -1,9 +1,3 @@ -__doc__ = u""" - >>> p = create() - >>> rest(p) - 0 -""" - cdef class Parrot: cdef object name cdef int alive @@ -18,6 +12,11 @@ def create(): return p def rest(Norwegian polly): + """ + >>> p = create() + >>> rest(p) + 0 + """ cdef Parrot fred cdef object spam spam = None diff --git a/tests/run/extkwonlyargs.pyx b/tests/run/extkwonlyargs.pyx index 1a0c7271..fb9e0de7 100644 --- a/tests/run/extkwonlyargs.pyx +++ b/tests/run/extkwonlyargs.pyx @@ -2,27 +2,46 @@ __doc__ = u""" >>> 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: b() takes exactly 3 positional arguments (4 given) +""" + +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 +"""# c >>> c(1,2) >>> c(1,2,3) >>> c(1,2,3,4) Traceback (most recent call last): TypeError: c() takes at most 3 positional arguments (4 given) - >>> d(1,2) - >>> d(1,2, c=1) - - >>> d(1,2,3) - Traceback (most recent call last): - TypeError: d() takes exactly 2 positional arguments (3 given) - >>> d(1,2, d=1) +# b + >>> b(1,2,3) + >>> b(1,2,3,4) Traceback (most recent call last): - TypeError: d() got an unexpected keyword argument 'd' + TypeError: b() takes exactly 3 positional arguments (4 given) +# e >>> e(1,2) >>> e(1,2, c=1) >>> e(1,2, d=1) @@ -32,19 +51,18 @@ __doc__ = u""" Traceback (most recent call last): TypeError: e() takes at most 3 positional arguments (4 given) - >>> f(1,2, c=1) - >>> f(1,2, c=1, d=2) +# d + >>> d(1,2) + >>> d(1,2, c=1) - >>> f(1,2,3) - Traceback (most recent call last): - TypeError: f() takes exactly 2 positional arguments (3 given) - >>> f(1,2) + >>> d(1,2,3) Traceback (most recent call last): - TypeError: f() needs keyword-only argument c - >>> f(1,2, c=1, e=2) + TypeError: d() takes exactly 2 positional arguments (3 given) + >>> d(1,2, d=1) Traceback (most recent call last): - TypeError: f() got an unexpected keyword argument 'e' + TypeError: d() got an unexpected keyword argument 'd' +# g >>> 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) @@ -59,6 +77,21 @@ __doc__ = u""" Traceback (most recent call last): TypeError: g() needs keyword-only argument f +# f + >>> f(1,2, c=1) + >>> f(1,2, c=1, d=2) + + >>> f(1,2,3) + Traceback (most recent call last): + TypeError: f() takes exactly 2 positional arguments (3 given) + >>> f(1,2) + Traceback (most recent call last): + TypeError: f() needs keyword-only argument c + >>> f(1,2, c=1, e=2) + Traceback (most recent call last): + TypeError: f() got an unexpected keyword argument 'e' + +# h >>> 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) @@ -71,6 +104,7 @@ __doc__ = u""" Traceback (most recent call last): TypeError: h() needs keyword-only argument c +# k >>> 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) @@ -83,28 +117,3 @@ __doc__ = u""" Traceback (most recent call last): TypeError: k() needs keyword-only argument f """ - -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/extlen.pyx b/tests/run/extlen.pyx index 6ca4987d..3d9d57d2 100644 --- a/tests/run/extlen.pyx +++ b/tests/run/extlen.pyx @@ -7,4 +7,3 @@ cdef class Spam: def __len__(self): return 0 - diff --git a/tests/run/extpropertyref.pyx b/tests/run/extpropertyref.pyx index 872d028b..1b783e1b 100644 --- a/tests/run/extpropertyref.pyx +++ b/tests/run/extpropertyref.pyx @@ -1,8 +1,3 @@ -__doc__ = u""" ->>> tomato() -42 -""" - cdef class Spam: property eggs: @@ -11,6 +6,10 @@ cdef class Spam: return 42 def tomato(): + """ + >>> tomato() + 42 + """ cdef Spam spam cdef object lettuce spam = Spam() diff --git a/tests/run/exttype.pyx b/tests/run/exttype.pyx index 393c5948..35d7e33f 100644 --- a/tests/run/exttype.pyx +++ b/tests/run/exttype.pyx @@ -1,28 +1,13 @@ -__doc__ = u""" - >>> s = Spam(12) - >>> s.eat() - 12 42 - >>> f(s) - Traceback (most recent call last): - AttributeError: 'exttype.Spam' object has no attribute 'foo' - >>> s.eat() - 12 42 - - >>> class Spam2(Spam): - ... foo = 1 - >>> s = Spam2(12) - >>> s.eat() - 12 42 - >>> f(s) - >>> s.eat() - 12 42 -""" cdef gobble(a, b): print a, b cdef class Spam: - + """ + >>> s = Spam(12) + >>> s.eat() + 12 42 + """ cdef eggs cdef int ham @@ -37,6 +22,22 @@ cdef class Spam: gobble(self.eggs, self.ham) def f(Spam spam): + """ + >>> s = Spam(12) + >>> f(s) + Traceback (most recent call last): + AttributeError: 'exttype.Spam' object has no attribute 'foo' + >>> s.eat() + 12 42 + >>> class Spam2(Spam): + ... foo = 1 + >>> s = Spam2(12) + >>> s.eat() + 12 42 + >>> f(s) + >>> s.eat() + 12 42 + """ x = spam.eggs y = spam.ham z = spam.foo diff --git a/tests/run/filenames.pyx b/tests/run/filenames.pyx index 8f7587fa..604edb21 100644 --- a/tests/run/filenames.pyx +++ b/tests/run/filenames.pyx @@ -8,4 +8,3 @@ ftang include "filenames.pxi" foo = 42 - diff --git a/tests/run/flatin.pyx b/tests/run/flatin.pyx index 471f300f..50b9598a 100644 --- a/tests/run/flatin.pyx +++ b/tests/run/flatin.pyx @@ -1,28 +1,18 @@ -__doc__ = u""" ->>> test_in('ABC') -1 ->>> test_in('abc') -2 ->>> test_in('X') -3 ->>> test_in('XYZ') -4 ->>> test_in('ABCXYZ') -5 ->>> test_in('') -5 - ->>> test_not_in('abc') -1 ->>> test_not_in('CDE') -2 ->>> test_not_in('CDEF') -3 ->>> test_not_in('BCD') -4 -""" - def test_in(s): + """ + >>> test_in('ABC') + 1 + >>> test_in('abc') + 2 + >>> test_in('X') + 3 + >>> test_in('XYZ') + 4 + >>> test_in('ABCXYZ') + 5 + >>> test_in('') + 5 + """ if s in (u'ABC', u'BCD'): return 1 elif s.upper() in (u'ABC', u'BCD'): @@ -35,6 +25,16 @@ def test_in(s): return 5 def test_not_in(s): + """ + >>> test_not_in('abc') + 1 + >>> test_not_in('CDE') + 2 + >>> test_not_in('CDEF') + 3 + >>> test_not_in('BCD') + 4 + """ if s not in (u'ABC', u'BCD', u'CDE', u'CDEF'): return 1 elif s.upper() not in (u'ABC', u'BCD', u'CDEF'): diff --git a/tests/run/float_floor_division_T260.pyx b/tests/run/float_floor_division_T260.pyx index 1843d496..63b12c0b 100644 --- a/tests/run/float_floor_division_T260.pyx +++ b/tests/run/float_floor_division_T260.pyx @@ -1,4 +1,5 @@ -__doc__ = u""" +def floor_div_float(double a, double b): + """ >>> floor_div_float(2, 1.5) 1.0 >>> floor_div_float(2, -1.5) @@ -7,7 +8,5 @@ __doc__ = u""" -2.0 >>> floor_div_float(1e10, 1e-10) 1e+20 -""" - -def floor_div_float(double a, double b): + """ return a // b diff --git a/tests/run/fmod.pyx b/tests/run/fmod.pyx index 29158aba..56f0f685 100644 --- a/tests/run/fmod.pyx +++ b/tests/run/fmod.pyx @@ -1,7 +1,6 @@ -__doc__ = u""" +def fmod(double a, double b): + """ >>> fmod(7, 1.25) 0.75 -""" - -def fmod(double a, double b): + """ return a % b diff --git a/tests/run/for_from_float_T254.pyx b/tests/run/for_from_float_T254.pyx index 4cf2093a..554d9771 100644 --- a/tests/run/for_from_float_T254.pyx +++ b/tests/run/for_from_float_T254.pyx @@ -1,59 +1,66 @@ -__doc__ = u""" +def double_target(a, b): + """ >>> double_target(0, 4) at 0.0 at 1.0 at 2.0 at 3.0 4.0 - >>> double_step(0, 2, .5) - at 0.0 - at 0.5 - at 1.0 - at 1.5 - 2.0 - >>> double_step_typed(0, 2, .5) - at 0.0 - at 0.5 - at 1.0 - at 1.5 - 2.0 - >>> double_step_py_target(0, 2, .5) - at 0.0 - at 0.5 - at 1.0 - at 1.5 - 2.0 - >>> int_step_py_target(0, 2, 1) - at 0 - at 1 - 2 -""" - -def double_target(a, b): + """ cdef double x for x from a <= x < b: print u"at", x return x def double_step(a, b, dx): + """ + >>> double_step(0, 2, .5) + at 0.0 + at 0.5 + at 1.0 + at 1.5 + 2.0 + """ cdef double x for x from a <= x < b by dx: print u"at", x return x def double_step_typed(a, b, double dx): + """ + >>> double_step_typed(0, 2, .5) + at 0.0 + at 0.5 + at 1.0 + at 1.5 + 2.0 + """ cdef double x for x from a <= x < b by dx: print u"at", x return x def double_step_py_target(a, b, double dx): + """ + >>> double_step_py_target(0, 2, .5) + at 0.0 + at 0.5 + at 1.0 + at 1.5 + 2.0 + """ cdef object x for x from a <= x < b by dx: print u"at", x return x def int_step_py_target(a, b, int dx): + """ + >>> int_step_py_target(0, 2, 1) + at 0 + at 1 + 2 + """ cdef object x for x from a <= x < b by dx: print u"at", x diff --git a/tests/run/for_in_range_T372.pyx b/tests/run/for_in_range_T372.pyx index a8fa40d5..0ded4501 100644 --- a/tests/run/for_in_range_T372.pyx +++ b/tests/run/for_in_range_T372.pyx @@ -1,38 +1,18 @@ -__doc__ = u""" ->>> test_modify() -0 -1 -2 -3 -4 - -(4, 0) ->>> test_fix() -0 -1 -2 -3 -4 - -4 ->>> test_break() -0 -1 -2 - -(2, 0) ->>> test_return() -0 -1 -2 -(2, 0) -""" - cimport cython @cython.test_assert_path_exists("//ForFromStatNode") @cython.test_fail_if_path_exists("//ForInStatNode") def test_modify(): + """ + >>> test_modify() + 0 + 1 + 2 + 3 + 4 + + (4, 0) + """ cdef int i, n = 5 for i in range(n): print i @@ -43,6 +23,16 @@ def test_modify(): @cython.test_assert_path_exists("//ForFromStatNode") @cython.test_fail_if_path_exists("//ForInStatNode") def test_fix(): + """ + >>> test_fix() + 0 + 1 + 2 + 3 + 4 + + 4 + """ cdef int i for i in range(5): print i @@ -52,6 +42,14 @@ def test_fix(): @cython.test_assert_path_exists("//ForFromStatNode") @cython.test_fail_if_path_exists("//ForInStatNode") def test_break(): + """ + >>> test_break() + 0 + 1 + 2 + + (2, 0) + """ cdef int i, n = 5 for i in range(n): print i @@ -66,6 +64,13 @@ def test_break(): @cython.test_assert_path_exists("//ForFromStatNode") @cython.test_fail_if_path_exists("//ForInStatNode") def test_return(): + """ + >>> test_return() + 0 + 1 + 2 + (2, 0) + """ cdef int i, n = 5 for i in range(n): print i diff --git a/tests/run/forfrom.pyx b/tests/run/forfrom.pyx index c4bf96a8..3e1b189a 100644 --- a/tests/run/forfrom.pyx +++ b/tests/run/forfrom.pyx @@ -1,15 +1,14 @@ -__doc__ = u""" ->>> for_else() -30 ->>> print( u'*'.join(int_comp()) ) -00*01*02 -""" - import sys if sys.version_info[0] >= 3: __doc__ = __doc__.replace(u" u'", u" '").replace(u' u"', u' "') def for_else(): + """ + >>> for_else() + 30 + >>> print( u'*'.join(int_comp()) ) + 00*01*02 + """ cdef int i, j=0, k=2 for i from 0 <= i < 10: j += k diff --git a/tests/run/funcexceptreraise.pyx b/tests/run/funcexceptreraise.pyx index 8c24c41c..ed66040c 100644 --- a/tests/run/funcexceptreraise.pyx +++ b/tests/run/funcexceptreraise.pyx @@ -1,4 +1,3 @@ - import sys def reraise(f, exc): diff --git a/tests/run/hash_T326.pyx b/tests/run/hash_T326.pyx index 6ee1f353..38fe48b7 100644 --- a/tests/run/hash_T326.pyx +++ b/tests/run/hash_T326.pyx @@ -11,8 +11,6 @@ __doc__ = u""" ... TypeError: That's kind of a round number... - >>> __hash__(-1) - -1 """ cdef class A: @@ -26,4 +24,8 @@ cdef class A: return self.a cpdef long __hash__(long x): + """ + >>> __hash__(-1) + -1 + """ return x diff --git a/tests/run/if.pyx b/tests/run/if.pyx index a4922051..ddbb1e18 100644 --- a/tests/run/if.pyx +++ b/tests/run/if.pyx @@ -1,34 +1,12 @@ -__doc__ = u""" +def f(a, b): + """ >>> f(0,0) 0 >>> f(1,2) 2 >>> f(1,-1) 1 - - >>> g(1,2) - 1 - >>> g(0,2) - 2 - >>> g(0,0) - 0 - - >>> h(1,2) - 1 - >>> h(0,2) - 2 - >>> h(0,0) - 3 - - >>> i(1,2) - 1 - >>> i(2,2) - 2 - >>> i(2,1) - 0 -""" - -def f(a, b): + """ x = 0 if a: x = 1 @@ -37,6 +15,14 @@ def f(a, b): return x def g(a, b): + """ + >>> g(1,2) + 1 + >>> g(0,2) + 2 + >>> g(0,0) + 0 + """ x = 0 if a: x = 1 @@ -45,6 +31,14 @@ def g(a, b): return x def h(a, b): + """ + >>> h(1,2) + 1 + >>> h(0,2) + 2 + >>> h(0,0) + 3 + """ x = 0 if a: x = 1 @@ -60,6 +54,14 @@ except ImportError: import builtins def i(a, b): + """ + >>> i(1,2) + 1 + >>> i(2,2) + 2 + >>> i(2,1) + 0 + """ x = 0 if builtins.str(a).upper() == u"1": x = 1 diff --git a/tests/run/importfrom.pyx b/tests/run/importfrom.pyx index 19bc40d1..2cf1e6b5 100644 --- a/tests/run/importfrom.pyx +++ b/tests/run/importfrom.pyx @@ -1,21 +1,10 @@ -__doc__ = u""" ->>> from distutils import cmd, core, version ->>> import1() == (cmd, core, version) -True ->>> import2() == (cmd, core, version) -True ->>> import3() == (cmd, core, version) -True ->>> import4() == (cmd, core, version) -True ->>> typed_imports() -True -True -an integer is required -Expected type, got int -""" +from distutils import cmd, core, version def import1(): + """ + >>> import1() == (cmd, core, version) + True + """ from distutils import ( cmd, @@ -25,6 +14,10 @@ core, version) def import2(): + """ + >>> import2() == (cmd, core, version) + True + """ from distutils import (cmd, core, @@ -36,16 +29,31 @@ core, def import3(): + """ + >>> import3() == (cmd, core, version) + True + """ from distutils import (cmd, core,version) return cmd, core, version def import4(): + """ + >>> import4() == (cmd, core, version) + True + """ from distutils import cmd, core, version return cmd, core, version def typed_imports(): + """ + >>> typed_imports() + True + True + an integer is required + Expected type, got int + """ import sys import types @@ -66,4 +74,3 @@ def typed_imports(): from sys import maxunicode as t except TypeError, e: print e - diff --git a/tests/run/index.pyx b/tests/run/index.pyx index e3cf963c..6354ec4b 100644 --- a/tests/run/index.pyx +++ b/tests/run/index.pyx @@ -1,53 +1,3 @@ -__doc__ = u""" ->>> index_tuple((1,1,2,3,5), 0) -1 ->>> index_tuple((1,1,2,3,5), 3) -3 ->>> index_tuple((1,1,2,3,5), -1) -5 ->>> index_tuple((1,1,2,3,5), 100) -Traceback (most recent call last): -... -IndexError: tuple index out of range - ->>> index_list([2,3,5,7,11,13,17,19], 0) -2 ->>> index_list([2,3,5,7,11,13,17,19], 5) -13 ->>> index_list([2,3,5,7,11,13,17,19], -1) -19 ->>> index_list([2,3,5,7,11,13,17,19], 100) -Traceback (most recent call last): -... -IndexError: list index out of range - ->>> index_object([2,3,5,7,11,13,17,19], 1) -3 ->>> index_object([2,3,5,7,11,13,17,19], -1) -19 ->>> index_object((1,1,2,3,5), 2) -2 ->>> index_object((1,1,2,3,5), -2) -3 ->>> index_object("abcdef...z", 0) -'a' ->>> index_object("abcdef...z", -1) -'z' ->>> index_object("abcdef...z", 100) -Traceback (most recent call last): -... -IndexError: string index out of range - ->>> index_object(100, 100) -Traceback (most recent call last): -... -TypeError: 'int' object is unsubscriptable - ->>> test_unsigned_long() ->>> test_unsigned_short() ->>> test_long_long() -""" - import sys if sys.version_info[0] >= 3: __doc__ = __doc__.replace(u'is unsubscriptable', u'is not subscriptable') @@ -55,18 +5,67 @@ elif sys.version_info < (2,5): __doc__ = __doc__.replace(u"'int' object is unsubscriptable", u'unsubscriptable object') def index_tuple(tuple t, int i): + """ + >>> index_tuple((1,1,2,3,5), 0) + 1 + >>> index_tuple((1,1,2,3,5), 3) + 3 + >>> index_tuple((1,1,2,3,5), -1) + 5 + >>> index_tuple((1,1,2,3,5), 100) + Traceback (most recent call last): + ... + IndexError: tuple index out of range + """ return t[i] def index_list(list L, int i): + """ + >>> index_list([2,3,5,7,11,13,17,19], 0) + 2 + >>> index_list([2,3,5,7,11,13,17,19], 5) + 13 + >>> index_list([2,3,5,7,11,13,17,19], -1) + 19 + >>> index_list([2,3,5,7,11,13,17,19], 100) + Traceback (most recent call last): + ... + IndexError: list index out of range + """ return L[i] def index_object(object o, int i): + """ + >>> index_object([2,3,5,7,11,13,17,19], 1) + 3 + >>> index_object([2,3,5,7,11,13,17,19], -1) + 19 + >>> index_object((1,1,2,3,5), 2) + 2 + >>> index_object((1,1,2,3,5), -2) + 3 + >>> index_object("abcdef...z", 0) + 'a' + >>> index_object("abcdef...z", -1) + 'z' + >>> index_object("abcdef...z", 100) + Traceback (most recent call last): + ... + IndexError: string index out of range + >>> index_object(100, 100) + Traceback (most recent call last): + ... + TypeError: 'int' object is unsubscriptable + """ return o[i] # These make sure that our fast indexing works with large and unsigned types. def test_unsigned_long(): + """ + >>> test_unsigned_long() + """ cdef int i cdef unsigned long ix cdef D = {} @@ -80,6 +79,9 @@ def test_unsigned_long(): assert len(D) == 0 def test_unsigned_short(): + """ + >>> test_unsigned_short() + """ cdef int i cdef unsigned short ix cdef D = {} @@ -93,6 +95,9 @@ def test_unsigned_short(): assert len(D) == 0 def test_long_long(): + """ + >>> test_long_long() + """ cdef int i cdef long long ix cdef D = {} diff --git a/tests/run/inline.pyx b/tests/run/inline.pyx index 4c3e8428..23e9150c 100644 --- a/tests/run/inline.pyx +++ b/tests/run/inline.pyx @@ -1,12 +1,10 @@ -__doc__ = u""" ->>> test(3) -3 -""" - def test(x): + """ + >>> test(3) + 3 + """ return retinput(x) cdef inline int retinput(int x): o = x return o - diff --git a/tests/run/inop.pyx b/tests/run/inop.pyx index 49e8af38..67c15c07 100644 --- a/tests/run/inop.pyx +++ b/tests/run/inop.pyx @@ -1,108 +1,118 @@ -__doc__ = u""" +def f(a,b): + """ >>> f(1,[1,2,3]) True >>> f(5,[1,2,3]) False >>> f(2,(1,2,3)) True + """ + result = a in b + return result +def g(a,b): + """ >>> g(1,[1,2,3]) 1 >>> g(5,[1,2,3]) 0 >>> g(2,(1,2,3)) 1 + """ + cdef int result + result = a in b + return result +def h(b): + """ >>> h([1,2,3,4]) True >>> h([1,3,4]) False + """ + result = 2 in b + return result +def j(b): + """ >>> j([1,2,3,4]) 1 >>> j([1,3,4]) 0 + """ + cdef int result + result = 2 in b + return result +def k(a): + """ >>> k(1) 1 >>> k(5) 0 + """ + cdef int result = a in [1,2,3,4] + return result +def m(int a): + """ >>> m(2) 1 >>> m(5) 0 + """ + cdef int result = a in [1,2,3,4] + return result +def n(a): + """ >>> n('d *') 1 >>> n('xxx') 0 + """ + cdef int result = a.lower() in [u'a *',u'b *',u'c *',u'd *'] + return result +def p(a): + """ >>> p(1) 0 >>> p('a') 1 + """ + cdef dict d = {u'a': 1, u'b': 2} + cdef int result = a in d + return result +def q(a): + """ >>> q(1) Traceback (most recent call last): TypeError: 'NoneType' object is not iterable - - >>> l = [1,2,3,4] + >>> l = [1,2,3,4] >>> l2 = [l[1:],l[:-1],l] >>> 2 in l in l2 True - >>> r(2) - 1 - >>> s(2) - 1 -""" - -def f(a,b): - result = a in b - return result - -def g(a,b): - cdef int result - result = a in b - return result - -def h(b): - result = 2 in b - return result - -def j(b): - cdef int result - result = 2 in b - return result - -def k(a): - cdef int result = a in [1,2,3,4] - return result - -def m(int a): - cdef int result = a in [1,2,3,4] - return result - -def n(a): - cdef int result = a.lower() in [u'a *',u'b *',u'c *',u'd *'] - return result - -def p(a): - cdef dict d = {u'a': 1, u'b': 2} - cdef int result = a in d - return result - -def q(a): + """ cdef dict d = None cdef int result = a in d # should fail with a TypeError return result def r(a): + """ + >>> r(2) + 1 + """ l = [1,2,3,4] l2 = [l[1:],l[:-1],l] cdef int result = a in l in l2 return result def s(a): + """ + >>> s(2) + 1 + """ cdef int result = a in [1,2,3,4] in [[1,2,3],[2,3,4],[1,2,3,4]] return result diff --git a/tests/run/inplace.pyx b/tests/run/inplace.pyx index 727c7ccb..0db3dba9 100644 --- a/tests/run/inplace.pyx +++ b/tests/run/inplace.pyx @@ -2,27 +2,6 @@ __doc__ = u""" >>> str(f(5, 7)) '29509034655744' - >>> g(13, 4) - 32 - - >>> h(56, 7) - 105.0 - - >>> arrays() - 19 - - >>> attributes() - 26 26 26 - - >>> smoketest() - 10 - - >>> test_side_effects() - side effect 1 - c side effect 2 - side effect 3 - c side effect 4 - ([0, 11, 102, 3, 4], [0, 1, 2, 13, 104]) """ def f(a,b): @@ -32,12 +11,20 @@ def f(a,b): return a def g(int a, int b): + """ + >>> g(13, 4) + 32 + """ a -= b a /= b a <<= b return a def h(double a, double b): + """ + >>> h(56, 7) + 105.0 + """ a /= b a += b a *= b @@ -46,6 +33,10 @@ def h(double a, double b): cimport stdlib def arrays(): + """ + >>> arrays() + 19 + """ cdef char* buf = stdlib.malloc(10) cdef int i = 2 cdef object j = 2 @@ -68,6 +59,10 @@ class B: attr = 3 def attributes(): + """ + >>> attributes() + 26 26 26 + """ cdef A a = A() b = B() a.attr += 10 @@ -82,6 +77,10 @@ def get_2(): return 2 cdef int identity(int value): return value def smoketest(): + """ + >>> smoketest() + 10 + """ cdef char* buf = stdlib.malloc(10) cdef A a = A() a.buf = buf @@ -100,6 +99,14 @@ cdef int c_side_effect(int x): return x def test_side_effects(): + """ + >>> test_side_effects() + side effect 1 + c side effect 2 + side effect 3 + c side effect 4 + ([0, 11, 102, 3, 4], [0, 1, 2, 13, 104]) + """ a = list(range(5)) a[side_effect(1)] += 10 a[c_side_effect(2)] += 100 diff --git a/tests/run/int_literals.pyx b/tests/run/int_literals.pyx index bacc0722..7e3d8502 100644 --- a/tests/run/int_literals.pyx +++ b/tests/run/int_literals.pyx @@ -1,16 +1,13 @@ -__doc__ = u""" - >>> c_longs() - (1, 1L, -1L, 18446744073709551615L) - >>> py_longs() - (1, 1L, 100000000000000000000000000000000L, -100000000000000000000000000000000L) -""" - import sys if sys.version_info[0] >= 3: __doc__ = __doc__.replace(u'L', u'') def c_longs(): + """ + >>> c_longs() + (1, 1L, -1L, 18446744073709551615L) + """ cdef long a = 1L cdef unsigned long ua = 1UL cdef long long aa = 0xFFFFFFFFFFFFFFFFLL @@ -19,4 +16,8 @@ def c_longs(): return a, ua, aa, uaa def py_longs(): + """ + >>> py_longs() + (1, 1L, 100000000000000000000000000000000L, -100000000000000000000000000000000L) + """ return 1, 1L, 100000000000000000000000000000000, -100000000000000000000000000000000 diff --git a/tests/run/ishimoto2.pyx b/tests/run/ishimoto2.pyx index 1e8c12b6..d83eb45f 100644 --- a/tests/run/ishimoto2.pyx +++ b/tests/run/ishimoto2.pyx @@ -1,4 +1,9 @@ -__doc__ = u""" +import sys +if sys.version_info[0] >= 3: + __doc__ = __doc__.replace(u" u'", u" '") + +class C: + """ >>> C().xxx(5) 5 >>> C().xxx() @@ -7,12 +12,6 @@ __doc__ = u""" 42 >>> C().xxx() u'a b' -""" - -import sys -if sys.version_info[0] >= 3: - __doc__ = __doc__.replace(u" u'", u" '") - -class C: + """ def xxx(self, p=u"a b"): return p diff --git a/tests/run/isinstance.pyx b/tests/run/isinstance.pyx index 19336b97..9fb91f67 100644 --- a/tests/run/isinstance.pyx +++ b/tests/run/isinstance.pyx @@ -1,7 +1,3 @@ -__doc__ = u""" ->>> test_all() -True -""" cdef class A: pass @@ -9,6 +5,10 @@ import sys IS_PY3 = sys.version_info[0] >= 3 def test_all(): + """ + >>> test_all() + True + """ if IS_PY3: new_type = type(u'a',(),{}) else: diff --git a/tests/run/isnonebool.pyx b/tests/run/isnonebool.pyx index 531630fd..5dca3a5c 100644 --- a/tests/run/isnonebool.pyx +++ b/tests/run/isnonebool.pyx @@ -1,11 +1,16 @@ -__doc__ = u""" +def test_and(a,b): + """ >>> test_and(None, None) True >>> test_and(None, 1) False >>> test_and(1, None) False + """ + return a is None and b is None +def test_more(a,b): + """ >>> test_more(None, None) True >>> test_more(None, 1) @@ -14,7 +19,11 @@ __doc__ = u""" False >>> test_more(None, 0) False + """ + return a is None and (b is None or b == 1) +def test_more_c(a,b): + """ >>> test_more_c(None, None) True >>> test_more_c(None, 1) @@ -23,13 +32,5 @@ __doc__ = u""" False >>> test_more_c(None, 0) False -""" - -def test_and(a,b): - return a is None and b is None - -def test_more(a,b): - return a is None and (b is None or b == 1) - -def test_more_c(a,b): + """ return (a is None or 1 == 2) and (b is None or b == 1) diff --git a/tests/run/iteratorexception.pyx b/tests/run/iteratorexception.pyx index 3b53eccd..6faf9dc6 100644 --- a/tests/run/iteratorexception.pyx +++ b/tests/run/iteratorexception.pyx @@ -1,7 +1,3 @@ -__doc__ = u""" - >>> f() -""" - class IteratorAndIterateable: def next(self): raise ValueError @@ -11,6 +7,9 @@ class IteratorAndIterateable: return self def f(): + """ + >>> f() + """ try: for x in IteratorAndIterateable(): pass diff --git a/tests/run/iterdict.pyx b/tests/run/iterdict.pyx index 87fe41b4..47282477 100644 --- a/tests/run/iterdict.pyx +++ b/tests/run/iterdict.pyx @@ -1,32 +1,11 @@ -__doc__ = u""" ->>> dict_size = 4 ->>> d = dict(zip(range(10,dict_size+10), range(dict_size))) - ->>> items(d) -[(10, 0), (11, 1), (12, 2), (13, 3)] ->>> iteritems(d) -[(10, 0), (11, 1), (12, 2), (13, 3)] ->>> iteritems_int(d) -[(10, 0), (11, 1), (12, 2), (13, 3)] ->>> iteritems_tuple(d) -[(10, 0), (11, 1), (12, 2), (13, 3)] ->>> iterkeys(d) -[10, 11, 12, 13] ->>> iterkeys_int(d) -[10, 11, 12, 13] ->>> iterdict(d) -[10, 11, 12, 13] ->>> iterdict_reassign(d) -[10, 11, 12, 13] ->>> iterdict_int(d) -[10, 11, 12, 13] ->>> itervalues(d) -[0, 1, 2, 3] ->>> itervalues_int(d) -[0, 1, 2, 3] -""" +dict_size = 4 +d = dict(zip(range(10,dict_size+10), range(dict_size))) def items(dict d): + """ + >>> items(d) + [(10, 0), (11, 1), (12, 2), (13, 3)] + """ l = [] for k,v in d.items(): l.append((k,v)) @@ -34,6 +13,10 @@ def items(dict d): return l def iteritems(dict d): + """ + >>> iteritems(d) + [(10, 0), (11, 1), (12, 2), (13, 3)] + """ l = [] for k,v in d.iteritems(): l.append((k,v)) @@ -41,6 +24,10 @@ def iteritems(dict d): return l def iteritems_int(dict d): + """ + >>> iteritems_int(d) + [(10, 0), (11, 1), (12, 2), (13, 3)] + """ cdef int k,v l = [] for k,v in d.iteritems(): @@ -49,6 +36,10 @@ def iteritems_int(dict d): return l def iteritems_tuple(dict d): + """ + >>> iteritems_tuple(d) + [(10, 0), (11, 1), (12, 2), (13, 3)] + """ l = [] for t in d.iteritems(): l.append(t) @@ -61,6 +52,10 @@ def iteritems_listcomp(dict d): return l def iterkeys(dict d): + """ + >>> iterkeys(d) + [10, 11, 12, 13] + """ l = [] for k in d.iterkeys(): l.append(k) @@ -68,6 +63,10 @@ def iterkeys(dict d): return l def iterkeys_int(dict d): + """ + >>> iterkeys_int(d) + [10, 11, 12, 13] + """ cdef int k l = [] for k in d.iterkeys(): @@ -76,6 +75,10 @@ def iterkeys_int(dict d): return l def iterdict(dict d): + """ + >>> iterdict(d) + [10, 11, 12, 13] + """ l = [] for k in d: l.append(k) @@ -83,6 +86,10 @@ def iterdict(dict d): return l def iterdict_int(dict d): + """ + >>> iterdict_int(d) + [10, 11, 12, 13] + """ cdef int k l = [] for k in d: @@ -91,6 +98,10 @@ def iterdict_int(dict d): return l def iterdict_reassign(dict d): + """ + >>> iterdict_reassign(d) + [10, 11, 12, 13] + """ cdef dict d_new = {} l = [] for k in d: @@ -105,6 +116,10 @@ def iterdict_listcomp(dict d): return l def itervalues(dict d): + """ + >>> itervalues(d) + [0, 1, 2, 3] + """ l = [] for v in d.itervalues(): l.append(v) @@ -112,6 +127,10 @@ def itervalues(dict d): return l def itervalues_int(dict d): + """ + >>> itervalues_int(d) + [0, 1, 2, 3] + """ cdef int v l = [] for v in d.itervalues(): diff --git a/tests/run/king1.pyx b/tests/run/king1.pyx index 63e54bdb..395575af 100644 --- a/tests/run/king1.pyx +++ b/tests/run/king1.pyx @@ -1,13 +1,10 @@ -__doc__ = u""" ->>> uf() -It works! ->>> bf() -It works! -""" - DEF USTUFF = u"Spam" def uf(): + """ + >>> uf() + It works! + """ IF USTUFF == u"Spam": print "It works!" ELSE: @@ -16,6 +13,10 @@ def uf(): DEF BSTUFF = b"Spam" def bf(): + """ + >>> bf() + It works! + """ IF BSTUFF == b"Spam": print "It works!" ELSE: diff --git a/tests/run/kwargproblems.pyx b/tests/run/kwargproblems.pyx index 346baaab..97b0a4a3 100644 --- a/tests/run/kwargproblems.pyx +++ b/tests/run/kwargproblems.pyx @@ -1,27 +1,24 @@ -__doc__ = u""" +import sys + +def test(**kw): + """ >>> d = {1 : 2} >>> test(**d) Traceback (most recent call last): TypeError: test() keywords must be strings >>> d {1: 2} - >>> d = {} >>> test(**d) {'arg': 3} >>> d {} - >>> d = {'arg' : 2} # this should be u'arg', but Py2 can't handle it... >>> test(**d) {'arg': 3} >>> d {'arg': 2} -""" - -import sys - -def test(**kw): + """ if sys.version_info[0] >= 3: kw[u'arg'] = 3 else: diff --git a/tests/run/kwonlyargs.pyx b/tests/run/kwonlyargs.pyx index d5f55298..a01f7145 100644 --- a/tests/run/kwonlyargs.pyx +++ b/tests/run/kwonlyargs.pyx @@ -1,25 +1,37 @@ -__doc__ = u""" +def b(a, b, c): + """ >>> b(1,2,3) >>> b(1,2,3,4) Traceback (most recent call last): TypeError: b() takes exactly 3 positional arguments (4 given) + """ + a, b, c = b, c, a +def c(a, b, c=1): + """ >>> c(1,2) >>> c(1,2,3) >>> c(1,2,3,4) Traceback (most recent call last): TypeError: c() takes at most 3 positional arguments (4 given) + """ + a, b, c = b, c, a +def d(a, b, *, c = 88): + """ >>> d(1,2) >>> d(1,2, c=1) - >>> d(1,2,3) Traceback (most recent call last): TypeError: d() takes exactly 2 positional arguments (3 given) >>> d(1,2, d=1) Traceback (most recent call last): TypeError: d() got an unexpected keyword argument 'd' + """ + a, b, c = b, c, a +def e(a, b, c = 88, **kwds): + """ >>> e(1,2) >>> e(1,2, c=1) >>> e(1,2, d=1) @@ -28,10 +40,13 @@ __doc__ = u""" >>> e(1,2,3,4) Traceback (most recent call last): TypeError: e() takes at most 3 positional arguments (4 given) + """ + a, b, c = b, c, a +def f(a, b, *, c, d = 42): + """ >>> f(1,2, c=1) >>> f(1,2, c=1, d=2) - >>> f(1,2,3) Traceback (most recent call last): TypeError: f() takes exactly 2 positional arguments (3 given) @@ -41,11 +56,14 @@ __doc__ = u""" >>> f(1,2, c=1, e=2) Traceback (most recent call last): TypeError: f() got an unexpected keyword argument 'e' + """ + a, b, c, d = b, c, d, a +def g(a, b, *, c, d = 42, e = 17, f, **kwds): + """ >>> 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: g() takes exactly 2 positional arguments (3 given) @@ -55,81 +73,64 @@ __doc__ = u""" >>> g(1,2, c=1) Traceback (most recent call last): TypeError: g() needs keyword-only argument f + """ + a, b, c, d, e, f = b, c, d, e, f, a +def h(a, b, *args, c, d = 42, e = 17, f, **kwds): + """ >>> 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: h() needs keyword-only argument c >>> h(1,2, d=1) Traceback (most recent call last): TypeError: h() needs keyword-only argument c + """ + a, b, c, d, e, f = b, c, d, e, f, a +def k(a, b, c=1, *args, d = 42, e = 17, f, **kwds): + """ >>> 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: k() needs keyword-only argument f >>> k(1,2, d=1) Traceback (most recent call last): TypeError: k() needs keyword-only argument f + """ + a, b, c, d, e, f = b, c, d, e, f, a +def l(*, a, b, c = 88): + """ >>> l(a=1, b=2) >>> l(a=1, b=2, c=1) - >>> l(1,2,3) Traceback (most recent call last): TypeError: l() takes exactly 0 positional arguments (3 given) >>> l(1,2, d=1) Traceback (most recent call last): TypeError: l() takes exactly 0 positional arguments (2 given) - - >>> m(1, b=2) - >>> m(a=1, b=2) - >>> m(a=1, b=2, c=1) - >>> l(1,2,3) Traceback (most recent call last): TypeError: l() takes exactly 0 positional arguments (3 given) >>> l(1,2, d=1) Traceback (most recent call last): TypeError: l() takes exactly 0 positional arguments (2 given) -""" - -def b(a, b, c): - a, b, c = b, c, a - -def c(a, b, c=1): - a, b, c = b, c, a - -def d(a, b, *, c = 88): - a, b, c = b, c, a - -def e(a, b, c = 88, **kwds): - a, b, c = b, c, a - -def f(a, b, *, c, d = 42): - a, b, c, d = b, c, d, a - -def g(a, b, *, c, d = 42, e = 17, f, **kwds): - a, b, c, d, e, f = b, c, d, e, f, a - -def h(a, b, *args, c, d = 42, e = 17, f, **kwds): - a, b, c, d, e, f = b, c, d, e, f, a - -def k(a, b, c=1, *args, d = 42, e = 17, f, **kwds): - a, b, c, d, e, f = b, c, d, e, f, a - -def l(*, a, b, c = 88): + """ a, b, c = b, c, a def m(a, *, b, c = 88): + """ + >>> m(1, b=2) + >>> m(a=1, b=2) + >>> m(a=1, b=2, c=1) + """ a, b, c = b, c, a def n(a, *, b, c = 88): diff --git a/tests/run/kwonlyargscall.pyx b/tests/run/kwonlyargscall.pyx index 49a95013..4b090b2c 100644 --- a/tests/run/kwonlyargscall.pyx +++ b/tests/run/kwonlyargscall.pyx @@ -1,192 +1,205 @@ -__doc__ = u""" +# the calls: + +def call0ab(f): + """ >>> call0ab(b) Traceback (most recent call last): TypeError: b() takes exactly 3 positional arguments (2 given) - >>> call0abc(b) - 1 2 3 - >>> call3(b) - 1 2 3 - >>> call4(b) - Traceback (most recent call last): - TypeError: b() takes exactly 3 positional arguments (4 given) - >>> call0ab(c) 1 2 1 - >>> call0abc(c) + >>> call0ab(d) + 1 2 88 + """ + f(a=1,b=2) + +def call0abc(f): + """ + >>> call0abc(b) 1 2 3 - >>> call2(c) - 1 2 1 - >>> call3(c) + >>> call0abc(c) 1 2 3 - >>> call4(c) - Traceback (most recent call last): - TypeError: c() takes at most 3 positional arguments (4 given) - >>> call0abc(d) 1 2 3 - >>> call0ab(d) - 1 2 88 + >>> call0abc(e) + 1 2 3 [] + >>> call0abc(f) + 1 2 3 42 + >>> call0abc(m) + 1 2 3 + """ + f(a=1,b=2,c=3) + +def call2(f): + """ + >>> call2(c) + 1 2 1 >>> call2(d) 1 2 88 - >>> call2c(d) - 1 2 1 + >>> call2(e) + 1 2 88 [] + >>> call2(f) + Traceback (most recent call last): + TypeError: f() needs keyword-only argument c + >>> call2(g) + Traceback (most recent call last): + TypeError: g() needs keyword-only argument c + >>> call2(m) + Traceback (most recent call last): + TypeError: m() needs keyword-only argument c + """ + f(1,2) +def call3(f): + """ + >>> call3(b) + 1 2 3 + >>> call3(c) + 1 2 3 >>> call3(d) Traceback (most recent call last): TypeError: d() takes exactly 2 positional arguments (3 given) - >>> call2d(d) - Traceback (most recent call last): - TypeError: d() got an unexpected keyword argument 'd' - - >>> call0abc(e) - 1 2 3 [] - >>> call2(e) - 1 2 88 [] - >>> call2c(e) - 1 2 1 [] - >>> call2d(e) - 1 2 88 [('d', 1)] - >>> call2cde(e) - 1 2 1 [('d', 2), ('e', 3)] >>> call3(e) 1 2 3 [] - >>> call4(e) - Traceback (most recent call last): - TypeError: e() takes at most 3 positional arguments (4 given) - - >>> call0abc(f) - 1 2 3 42 - >>> call2c(f) - 1 2 1 42 - >>> call2cd(f) - 1 2 1 2 - >>> call3(f) Traceback (most recent call last): TypeError: f() takes exactly 2 positional arguments (3 given) - >>> call2(f) - Traceback (most recent call last): - TypeError: f() needs keyword-only argument c - >>> call2ce(f) - Traceback (most recent call last): - TypeError: f() got an unexpected keyword argument 'e' - - >>> call2cf(g) - 1 2 1 42 17 2 [] - >>> call2cefd(g) - 1 2 1 11 0 2 [] - >>> call2cfex(g) - 1 2 1 42 0 2 [('x', 25)] - >>> call3(g) Traceback (most recent call last): TypeError: g() takes exactly 2 positional arguments (3 given) - >>> call2(g) - Traceback (most recent call last): - TypeError: g() needs keyword-only argument c - >>> call2c(g) - Traceback (most recent call last): - TypeError: g() needs keyword-only argument f - - >>> call2cf(h) - 1 2 1 42 17 2 () [] - >>> call2cfe(h) - 1 2 1 42 3 2 () [] - >>> call6cf(h) - 1 2 1 42 17 2 (3, 4, 5, 6) [] - >>> call6cfexy(h) - 1 2 1 42 3 2 (3, 4, 5, 6) [('x', 25), ('y', 11)] - >>> call3(h) Traceback (most recent call last): TypeError: h() needs keyword-only argument c - >>> call3d(h) - Traceback (most recent call last): - TypeError: h() needs keyword-only argument c - - >>> call2cf(k) - 1 2 1 42 17 2 () [] - >>> call2cfe(k) - 1 2 1 42 3 2 () [] - >>> call6df(k) - 1 2 3 1 17 2 (4, 5, 6) [] - >>> call6dfexy(k) - 1 2 3 1 3 2 (4, 5, 6) [('x', 25), ('y', 11)] - >>> call3(k) Traceback (most recent call last): TypeError: k() needs keyword-only argument f - >>> call2d(k) - Traceback (most recent call last): - TypeError: k() needs keyword-only argument f - - >>> call0abc(m) - 1 2 3 - >>> call2c(m) - 1 2 1 - >>> call3(m) Traceback (most recent call last): TypeError: m() takes at most 2 positional arguments (3 given) - >>> call2(m) - Traceback (most recent call last): - TypeError: m() needs keyword-only argument c - >>> call2cd(m) - Traceback (most recent call last): - TypeError: m() got an unexpected keyword argument 'd' -""" - -# the calls: - -def call0ab(f): - f(a=1,b=2) - -def call0abc(f): - f(a=1,b=2,c=3) - -def call2(f): - f(1,2) - -def call3(f): + """ f(1,2,3) def call4(f): + """ + >>> call4(b) + Traceback (most recent call last): + TypeError: b() takes exactly 3 positional arguments (4 given) + >>> call4(c) + Traceback (most recent call last): + TypeError: c() takes at most 3 positional arguments (4 given) + >>> call4(e) + Traceback (most recent call last): + TypeError: e() takes at most 3 positional arguments (4 given) + """ f(1,2,3,4) def call2c(f): + """ + >>> call2c(d) + 1 2 1 + >>> call2c(e) + 1 2 1 [] + >>> call2c(f) + 1 2 1 42 + >>> call2c(g) + Traceback (most recent call last): + TypeError: g() needs keyword-only argument f + >>> call2c(m) + 1 2 1 + """ f(1,2, c=1) def call2d(f): + """ + >>> call2d(d) + Traceback (most recent call last): + TypeError: d() got an unexpected keyword argument 'd' + >>> call2d(e) + 1 2 88 [('d', 1)] + >>> call2d(k) + Traceback (most recent call last): + TypeError: k() needs keyword-only argument f + """ f(1,2, d=1) def call3d(f): + """ + >>> call3d(h) + Traceback (most recent call last): + TypeError: h() needs keyword-only argument c + """ f(1,2,3, d=1) def call2cd(f): + """ + >>> call2cd(f) + 1 2 1 2 + >>> call2cd(m) + Traceback (most recent call last): + TypeError: m() got an unexpected keyword argument 'd' + """ f(1,2, c=1, d=2) def call2ce(f): + """ + >>> call2ce(f) + Traceback (most recent call last): + TypeError: f() got an unexpected keyword argument 'e' + """ f(1,2, c=1, e=2) def call2cde(f): + """ + >>> call2cde(e) + 1 2 1 [('d', 2), ('e', 3)] + """ f(1,2, c=1, d=2, e=3) def call2cf(f): + """ + >>> call2cf(g) + 1 2 1 42 17 2 [] + >>> call2cf(h) + 1 2 1 42 17 2 () [] + >>> call2cf(k) + 1 2 1 42 17 2 () [] + """ f(1,2, c=1, f=2) def call6cf(f): + """ + >>> call6cf(h) + 1 2 1 42 17 2 (3, 4, 5, 6) [] + """ f(1,2,3,4,5,6, c=1, f=2) def call6df(f): + """ + >>> call6df(k) + 1 2 3 1 17 2 (4, 5, 6) [] + """ f(1,2,3,4,5,6, d=1, f=2) def call2cfe(f): + """ + >>> call2cfe(h) + 1 2 1 42 3 2 () [] + >>> call2cfe(k) + 1 2 1 42 3 2 () [] + """ f(1,2, c=1, f=2, e=3) def call2cefd(f): + """ + >>> call2cefd(g) + 1 2 1 11 0 2 [] + """ f(1,2, c=1, e=0, f=2, d=11) def call2cfex(f): + """ + >>> call2cfex(g) + 1 2 1 42 0 2 [('x', 25)] + """ f(1,2, c=1, f=2, e=0, x=25) def call6argscfexy(f): @@ -194,9 +207,17 @@ def call6argscfexy(f): f(*args, c=1, f=2, e=3, x=25, y=11) def call6cfexy(f): + """ + >>> call6cfexy(h) + 1 2 1 42 3 2 (3, 4, 5, 6) [('x', 25), ('y', 11)] + """ f(1,2,3,4,5,6, c=1, f=2, e=3, x=25, y=11) def call6dfexy(f): + """ + >>> call6dfexy(k) + 1 2 3 1 3 2 (4, 5, 6) [('x', 25), ('y', 11)] + """ f(1,2,3,4,5,6, d=1, f=2, e=3, x=25, y=11) # the called functions: diff --git a/tests/run/large_consts_T237.pyx b/tests/run/large_consts_T237.pyx index 8d0f2e56..13d549da 100644 --- a/tests/run/large_consts_T237.pyx +++ b/tests/run/large_consts_T237.pyx @@ -1,21 +1,22 @@ -__doc__ = u""" ->>> add_large_pow() == 2**31 + 2**31 -True ->>> add_large_pow() == 2**32 -True ->>> add_large() == 2147483647 + 2147483647 -True - -#>>> add_large_c() == 2147483647 + 2147483647 -#True -""" - #def add_large_c(): # cdef unsigned long long val = 2**30 + 2**30 # return val def add_large(): + """ + >>> add_large() == 2147483647 + 2147483647 + True + + #>>> add_large_c() == 2147483647 + 2147483647 + #True + """ return 2147483647 + 2147483647 def add_large_pow(): + """ + >>> add_large_pow() == 2**31 + 2**31 + True + >>> add_large_pow() == 2**32 + True + """ return 2**31 + 2**31 diff --git a/tests/run/list.pyx b/tests/run/list.pyx index 0c3ac2ca..9b1fec24 100644 --- a/tests/run/list.pyx +++ b/tests/run/list.pyx @@ -1,47 +1,48 @@ -__doc__ = u""" +def f(obj1, obj2, obj3, obj4, obj5): + """ >>> f(1, 2, 3, 4, 5) [] - >>> g(1, 2, 3, 4, 5) - [2] - >>> h(1, 2, 3, 4, 5) - [2, 3] - >>> j(1, 2, 3, 4, 5) - [2, 3, 4] - >>> k(1, 2, 3, 4, 5) - [17, 42, 88] - >>> test_list_sort() - [1, 2, 3, 4] - >>> test_list_reverse() - [1, 2, 3, 4] - >>> test_list_pop() - (2, [1]) - >>> test_list_pop0() - (1, [2]) - >>> test_list_pop_all() - True -""" - -def f(obj1, obj2, obj3, obj4, obj5): + """ obj1 = [] return obj1 def g(obj1, obj2, obj3, obj4, obj5): + """ + >>> g(1, 2, 3, 4, 5) + [2] + """ obj1 = [obj2] return obj1 def h(obj1, obj2, obj3, obj4, obj5): + """ + >>> h(1, 2, 3, 4, 5) + [2, 3] + """ obj1 = [obj2, obj3] return obj1 def j(obj1, obj2, obj3, obj4, obj5): + """ + >>> j(1, 2, 3, 4, 5) + [2, 3, 4] + """ obj1 = [obj2, obj3, obj4] return obj1 def k(obj1, obj2, obj3, obj4, obj5): + """ + >>> k(1, 2, 3, 4, 5) + [17, 42, 88] + """ obj1 = [17, 42, 88] return obj1 def test_list_sort(): + """ + >>> test_list_sort() + [1, 2, 3, 4] + """ cdef list l1 l1 = [2,3,1,4] l1.sort() @@ -54,24 +55,40 @@ def test_list_sort_reversed(): return l1 def test_list_reverse(): + """ + >>> test_list_reverse() + [1, 2, 3, 4] + """ cdef list l1 l1 = [4,3,2,1] l1.reverse() return l1 def test_list_pop(): + """ + >>> test_list_pop() + (2, [1]) + """ cdef list l1 l1 = [1,2] two = l1.pop() return two, l1 def test_list_pop0(): + """ + >>> test_list_pop0() + (1, [2]) + """ cdef list l1 l1 = [1,2] one = l1.pop(0) return one, l1 def test_list_pop_all(): + """ + >>> test_list_pop_all() + True + """ cdef list l1 l1 = [1,2] try: diff --git a/tests/run/listcomp.pyx b/tests/run/listcomp.pyx index f87eca09..1caffa00 100644 --- a/tests/run/listcomp.pyx +++ b/tests/run/listcomp.pyx @@ -1,18 +1,15 @@ -__doc__ = u""" ->>> smoketest() -[0, 4, 8] ->>> int_runvar() -[0, 4, 8] ->>> typed() -[A, A, A] ->>> iterdict() -[1, 2, 3] -""" - def smoketest(): + """ + >>> smoketest() + [0, 4, 8] + """ print [x*2 for x in range(5) if x % 2 == 0] def int_runvar(): + """ + >>> int_runvar() + [0, 4, 8] + """ cdef int x print [x*2 for x in range(5) if x % 2 == 0] @@ -20,10 +17,18 @@ cdef class A: def __repr__(self): return u"A" def typed(): + """ + >>> typed() + [A, A, A] + """ cdef A obj print [obj for obj in [A(), A(), A()]] def iterdict(): + """ + >>> iterdict() + [1, 2, 3] + """ cdef dict d = dict(a=1,b=2,c=3) l = [d[key] for key in d] l.sort() diff --git a/tests/run/literal_lists.pyx b/tests/run/literal_lists.pyx index 951c094b..d150a44f 100644 --- a/tests/run/literal_lists.pyx +++ b/tests/run/literal_lists.pyx @@ -1,14 +1,9 @@ -__doc__ = u""" - >>> test_ints(100) - (100, 100, 100) +__doc__ = """ >>> test_chars(b'yo') (b'a', b'bc', b'yo') >>> test_chars(None) # doctest: +ELLIPSIS Traceback (most recent call last): TypeError: expected ... - >>> test_struct(-5, -10) - -5 -10 True - 1 2 False """ import sys @@ -17,6 +12,10 @@ if sys.version_info[0] < 3: __doc__ = __doc__.replace(u"b'", u"'") def test_ints(int x): + """ + >>> test_ints(100) + (100, 100, 100) + """ cdef list L = [1,2,3,x] cdef int* Li = [1,2,3,x] cdef int** Lii = [Li, &x] @@ -35,6 +34,11 @@ cdef print_struct(MyStruct a): print a.x, a.y, a.data == NULL def test_struct(int x, y): + """ + >>> test_struct(-5, -10) + -5 -10 True + 1 2 False + """ cdef MyStruct* aa = [[x,y, NULL], [x+1,y+1,NULL]] print_struct(aa[0]) print_struct([1, 2, 1]) diff --git a/tests/run/literals.pyx b/tests/run/literals.pyx index 8aeb38e5..b0bcd619 100644 --- a/tests/run/literals.pyx +++ b/tests/run/literals.pyx @@ -1,12 +1,7 @@ -__doc__ = u""" - >>> foo() - >>> test_float(1./3) - True - >>> test_complex(1j/3) - True -""" - def foo(): + """ + >>> foo() + """ a = 42 a1 = 0123 a2 = 0xabc @@ -55,7 +50,15 @@ with ' and " quotes""" def test_float(x): + """ + >>> test_float(1./3) + True + """ return x == 1./3 def test_complex(x): + """ + >>> test_complex(1j/3) + True + """ return x == 0.3333333333333333j diff --git a/tests/run/locals.pyx b/tests/run/locals.pyx index 8bd2b7c3..6209224a 100644 --- a/tests/run/locals.pyx +++ b/tests/run/locals.pyx @@ -2,12 +2,6 @@ __doc__ = u""" >>> sorted( get_locals(1,2,3, k=5) .items()) [('args', (2, 3)), ('kwds', {'k': 5}), ('x', 1), ('y', 'hi'), ('z', 5)] ->>> in_locals('z') -True ->>> in_locals('args') -True ->>> in_locals('X') -False """ def get_locals(x, *args, **kwds): @@ -16,6 +10,14 @@ def get_locals(x, *args, **kwds): return locals() def in_locals(x, *args, **kwds): + """ + >>> in_locals('z') + True + >>> in_locals('args') + True + >>> in_locals('X') + False + """ cdef int z = 5 y = "hi" return x in locals() diff --git a/tests/run/locals_rebind_T429.pyx b/tests/run/locals_rebind_T429.pyx index d6923114..2c9d7969 100644 --- a/tests/run/locals_rebind_T429.pyx +++ b/tests/run/locals_rebind_T429.pyx @@ -2,8 +2,6 @@ __doc__ = u""" >>> sorted( get_locals(1,2,3, k=5) .items()) [('args', (2, 3)), ('kwds', {'k': 5}), ('x', 1), ('y', 'hi'), ('z', 5)] ->>> get_locals_rebound(1,2,3) -'REBOUND' """ def get_locals(x, *args, **kwds): @@ -12,6 +10,10 @@ def get_locals(x, *args, **kwds): return locals() def get_locals_rebound(x, *args, **kwds): + """ + >>> get_locals_rebound(1,2,3) + 'REBOUND' + """ cdef int z = 5 locals = _locals y = "hi" diff --git a/tests/run/menten1.pyx b/tests/run/menten1.pyx index 17de85e8..37efeac7 100644 --- a/tests/run/menten1.pyx +++ b/tests/run/menten1.pyx @@ -1,9 +1,8 @@ -__doc__ = u""" ->>> loops() -5 -""" - def loops(): + """ + >>> loops() + 5 + """ cdef int k for i from 0 <= i < 5: for j from 0 <= j < 2: diff --git a/tests/run/modbody.pyx b/tests/run/modbody.pyx index 76d2869f..82f6a647 100644 --- a/tests/run/modbody.pyx +++ b/tests/run/modbody.pyx @@ -1,4 +1,9 @@ -__doc__ = u""" +import sys +if sys.version_info[0] >= 3: + __doc__ = __doc__.replace(u" u'", u" '") + +def f(): + """ >>> f() >>> g 42 @@ -8,13 +13,7 @@ __doc__ = u""" u'eggs' >>> z u'spameggs' -""" - -import sys -if sys.version_info[0] >= 3: - __doc__ = __doc__.replace(u" u'", u" '") - -def f(): + """ pass g = 42 diff --git a/tests/run/modop.pyx b/tests/run/modop.pyx index 48f0c21f..915359b7 100644 --- a/tests/run/modop.pyx +++ b/tests/run/modop.pyx @@ -1,26 +1,25 @@ -__doc__ = u""" - >>> modobj(9,2) - 1 - >>> modobj('%d', 5) - '5' - - >>> modint(9,2) - 1 -""" - import sys if sys.version_info[0] < 3: - __doc__ = __doc__ + u""" - + __doc__ = u""" >>> modptr() 'spameggs' -""" + """ def modobj(obj2, obj3): + """ + >>> modobj(9,2) + 1 + >>> modobj('%d', 5) + '5' + """ obj1 = obj2 % obj3 return obj1 def modint(int int2, int int3): + """ + >>> modint(9,2) + 1 + """ cdef int int1 int1 = int2 % int3 return int1 @@ -29,6 +28,5 @@ def modptr(): cdef char *str2, *str3 str2 = "spam%s" str3 = "eggs" - obj1 = str2 % str3 # '%' operator doesn't work on byte strings in Py3 return obj1 diff --git a/tests/run/multass.pyx b/tests/run/multass.pyx index fb23494d..162c8803 100644 --- a/tests/run/multass.pyx +++ b/tests/run/multass.pyx @@ -1,12 +1,6 @@ -__doc__ = u""" - >>> f() - (1, 2, 1, 2) - >>> g() - (1, 1, 2, 2, 3, 3) +__doc__ = """ >>> h() (1, b'test', 3, 1, b'test', 3) - >>> j() - (2, 1, 4, 2, 6, 3) """ import sys @@ -14,12 +8,20 @@ if sys.version_info[0] < 3: __doc__ = __doc__.replace(u" b'", u" '") def f(): + """ + >>> f() + (1, 2, 1, 2) + """ cdef object obj1a, obj2a, obj3a, obj1b, obj2b, obj3b obj1b, obj2b, obj3b = 1, 2, 3 obj1a, obj2a = obj1b, obj2b return obj1a, obj2a, obj1b, obj2b def g(): + """ + >>> g() + (1, 1, 2, 2, 3, 3) + """ cdef object obj1a, obj2a, obj3a, obj1b, obj2b, obj3b obj1b, obj2b, obj3b = 1, 2, 3 obj1a, [obj2a, obj3a] = [obj1b, (obj2b, obj3b)] @@ -34,6 +36,10 @@ def h(): return int1, ptr1, obj1a, int2, ptr2, obj1b def j(): + """ + >>> j() + (2, 1, 4, 2, 6, 3) + """ cdef object obj1a, obj2a, obj3a, obj1b, obj2b, obj3b obj1b, obj2b, obj3b = 1, 2, 3 obj1a, obj2a, obj3a = obj1b + 1, obj2b + 2, obj3b + 3 diff --git a/tests/run/new_style_exceptions.pyx b/tests/run/new_style_exceptions.pyx index 9daada22..73a29e72 100644 --- a/tests/run/new_style_exceptions.pyx +++ b/tests/run/new_style_exceptions.pyx @@ -1,9 +1,3 @@ -__doc__ = u""" - >>> test(Exception(u'hi')) - Raising: Exception(u'hi',) - Caught: Exception(u'hi',) -""" - import sys if sys.version_info[0] >= 3: __doc__ = __doc__.replace(u"u'", u"'") @@ -11,6 +5,11 @@ if sys.version_info[0] >= 3: import sys, types def test(obj): + """ + >>> test(Exception(u'hi')) + Raising: Exception(u'hi',) + Caught: Exception(u'hi',) + """ print u"Raising: %s%r" % (obj.__class__.__name__, obj.args) try: raise obj diff --git a/tests/run/nogil.pyx b/tests/run/nogil.pyx index 06f93473..dc2e2c3f 100644 --- a/tests/run/nogil.pyx +++ b/tests/run/nogil.pyx @@ -1,11 +1,10 @@ -__doc__ = u""" ->>> test(5) -47 ->>> test(11) -53 -""" - def test(int x): + """ + >>> test(5) + 47 + >>> test(11) + 53 + """ with nogil: f(x) x = g(x) @@ -20,5 +19,3 @@ cdef int g(int x) nogil: cdef int y y = x + 42 return y - - diff --git a/tests/run/nonecheck.pyx b/tests/run/nonecheck.pyx index e1b3ed76..579cf224 100644 --- a/tests/run/nonecheck.pyx +++ b/tests/run/nonecheck.pyx @@ -1,47 +1,6 @@ __doc__ = u""" Tests accessing attributes of extension type variables set to None - ->>> obj = MyClass(2, 3) ->>> getattr_(obj) -2 ->>> getattr_(None) -Traceback (most recent call last): - ... -AttributeError: 'NoneType' object has no attribute 'a' - ->>> setattr_(obj) ->>> getattr_(obj) -10 ->>> setattr_(None) -Traceback (most recent call last): - ... -AttributeError: 'NoneType' object has no attribute 'a' - - - ->>> obj = MyClass(2, 3) ->>> checking(obj) -2 -2 ->>> checking(None) -var is None - ->>> check_and_assign(obj) -Traceback (most recent call last): - ... -AttributeError: 'NoneType' object has no attribute 'a' - ->>> check_buffer_get(None) -Traceback (most recent call last): - ... -TypeError: 'NoneType' object is unsubscriptable - ->>> check_buffer_set(None) -Traceback (most recent call last): - ... -TypeError: 'NoneType' object is unsubscriptable - """ cimport cython @@ -54,10 +13,30 @@ cdef class MyClass: @cython.nonecheck(True) def getattr_(MyClass var): + """ + >>> obj = MyClass(2, 3) + >>> getattr_(obj) + 2 + >>> getattr_(None) + Traceback (most recent call last): + ... + AttributeError: 'NoneType' object has no attribute 'a' + >>> setattr_(obj) + >>> getattr_(obj) + 10 + """ print var.a @cython.nonecheck(True) def setattr_(MyClass var): + """ + >>> obj = MyClass(2, 3) + >>> setattr_(obj) + >>> setattr_(None) + Traceback (most recent call last): + ... + AttributeError: 'NoneType' object has no attribute 'a' + """ var.a = 10 def some(): @@ -65,6 +44,14 @@ def some(): @cython.nonecheck(True) def checking(MyClass var): + """ + >>> obj = MyClass(2, 3) + >>> checking(obj) + 2 + 2 + >>> checking(None) + var is None + """ state = (var is None) if not state: print var.a @@ -75,6 +62,13 @@ def checking(MyClass var): @cython.nonecheck(True) def check_and_assign(MyClass var): + """ + >>> obj = MyClass(2, 3) + >>> check_and_assign(obj) + Traceback (most recent call last): + ... + AttributeError: 'NoneType' object has no attribute 'a' + """ if var is not None: print var.a var = None @@ -82,9 +76,20 @@ def check_and_assign(MyClass var): @cython.nonecheck(True) def check_buffer_get(object[int] buf): + """ + >>> check_buffer_get(None) + Traceback (most recent call last): + ... + TypeError: 'NoneType' object is unsubscriptable + """ return buf[0] @cython.nonecheck(True) def check_buffer_set(object[int] buf): + """ + >>> check_buffer_set(None) + Traceback (most recent call last): + ... + TypeError: 'NoneType' object is unsubscriptable + """ buf[0] = 1 - diff --git a/tests/run/nononetypecheck.pyx b/tests/run/nononetypecheck.pyx index 7a03f4ab..cdf9a109 100644 --- a/tests/run/nononetypecheck.pyx +++ b/tests/run/nononetypecheck.pyx @@ -1,7 +1,3 @@ -__doc__ = u""" ->>> g() -""" - cdef class Spam: pass @@ -9,4 +5,7 @@ cdef f(Spam s): pass def g(): + """ + >>> g() + """ f(None) diff --git a/tests/run/notinop.pyx b/tests/run/notinop.pyx index 30582535..2a197c84 100644 --- a/tests/run/notinop.pyx +++ b/tests/run/notinop.pyx @@ -1,89 +1,96 @@ -__doc__ = u""" +def f(a,b): + """ >>> f(1,[1,2,3]) False >>> f(5,[1,2,3]) True >>> f(2,(1,2,3)) False + """ + result = a not in b + return result +def g(a,b): + """ >>> g(1,[1,2,3]) 0 >>> g(5,[1,2,3]) 1 >>> g(2,(1,2,3)) 0 + """ + cdef int result + result = a not in b + return result +def h(b): + """ >>> h([1,2,3,4]) False >>> h([1,3,4]) True + """ + result = 2 not in b + return result +def j(b): + """ >>> j([1,2,3,4]) 0 >>> j([1,3,4]) 1 + """ + cdef int result + result = 2 not in b + return result +def k(a): + """ >>> k(1) 0 >>> k(5) 1 + """ + cdef int result = a not in [1,2,3,4] + return result +def m(int a): + """ >>> m(2) 0 >>> m(5) 1 + """ + cdef int result = a not in [1,2,3,4] + return result +def n(a): + """ >>> n('d *') 0 >>> n('xxx') 1 + """ + cdef int result = a.lower() not in [u'a *',u'b *',u'c *',u'd *'] + return result +def p(a): + """ >>> p('a') 0 >>> p(1) 1 - - >>> q(1) - Traceback (most recent call last): - TypeError: 'NoneType' object is not iterable -""" - -def f(a,b): - result = a not in b - return result - -def g(a,b): - cdef int result - result = a not in b - return result - -def h(b): - result = 2 not in b - return result - -def j(b): - cdef int result - result = 2 not in b - return result - -def k(a): - cdef int result = a not in [1,2,3,4] - return result - -def m(int a): - cdef int result = a not in [1,2,3,4] - return result - -def n(a): - cdef int result = a.lower() not in [u'a *',u'b *',u'c *',u'd *'] - return result - -def p(a): + """ cdef dict d = {u'a': 1, u'b': 2} cdef int result = a not in d return result def q(a): + """ + >>> q(1) + Traceback (most recent call last): + TypeError: 'NoneType' object is not iterable + """ cdef dict d = None cdef int result = a not in d # should fail with a TypeError return result diff --git a/tests/run/or.pyx b/tests/run/or.pyx index b50ecd40..b5243320 100644 --- a/tests/run/or.pyx +++ b/tests/run/or.pyx @@ -1,51 +1,53 @@ -__doc__ = u""" ->>> a,b = 'a *','b *' # use non-interned strings - ->>> or2_assign(2,3) == (2 or 3) -True ->>> or2_assign('a', 'b') == ('a' or 'b') -True ->>> or2_assign(a, b) == (a or b) -True - ->>> or2(2,3) == (2 or 3) -True ->>> or2(0,2) == (0 or 2) -True ->>> or2('a', 'b') == ('a' or 'b') -True ->>> or2(a, b) == (a or b) -True ->>> or2('', 'b') == ('' or 'b') -True ->>> or2([], [1]) == ([] or [1]) -True ->>> or2([], [a]) == ([] or [a]) -True - ->>> or3(0,1,2) == (0 or 1 or 2) -True ->>> or3([],(),[1]) == ([] or () or [1]) -True - ->>> or2_no_result(2,3) ->>> or2_no_result(0,2) ->>> or2_no_result('a','b') ->>> or2_no_result(a,b) ->>> a or b -'a *' -""" +a,b = 'a *','b *' # use non-interned strings def or2_assign(a,b): + """ + >>> or2_assign(2,3) == (2 or 3) + True + >>> or2_assign('a', 'b') == ('a' or 'b') + True + >>> or2_assign(a, b) == (a or b) + True + """ c = a or b return c def or2(a,b): + """ + >>> or2(2,3) == (2 or 3) + True + >>> or2(0,2) == (0 or 2) + True + >>> or2('a', 'b') == ('a' or 'b') + True + >>> or2(a, b) == (a or b) + True + >>> or2('', 'b') == ('' or 'b') + True + >>> or2([], [1]) == ([] or [1]) + True + >>> or2([], [a]) == ([] or [a]) + True + """ return a or b def or3(a,b,c): + """ + >>> or3(0,1,2) == (0 or 1 or 2) + True + >>> or3([],(),[1]) == ([] or () or [1]) + True + """ d = a or b or c return d def or2_no_result(a,b): + """ + >>> or2_no_result(2,3) + >>> or2_no_result(0,2) + >>> or2_no_result('a','b') + >>> or2_no_result(a,b) + >>> a or b + 'a *' + """ a or b diff --git a/tests/run/packedstruct_T290.pyx b/tests/run/packedstruct_T290.pyx index a66915f3..2c6bcc72 100644 --- a/tests/run/packedstruct_T290.pyx +++ b/tests/run/packedstruct_T290.pyx @@ -13,4 +13,3 @@ ctypedef packed struct MyCTypeDefStruct: def f(): return (sizeof(MyCdefStruct), sizeof(MyCTypeDefStruct)) - diff --git a/tests/run/parallel_swap_assign_T425.pyx b/tests/run/parallel_swap_assign_T425.pyx index 89070e4a..6268cf73 100644 --- a/tests/run/parallel_swap_assign_T425.pyx +++ b/tests/run/parallel_swap_assign_T425.pyx @@ -1,4 +1,3 @@ - cimport cython @cython.test_assert_path_exists( diff --git a/tests/run/pass.pyx b/tests/run/pass.pyx index 57faa768..218ee5ca 100644 --- a/tests/run/pass.pyx +++ b/tests/run/pass.pyx @@ -1,6 +1,5 @@ -__doc__ = u""" - >>> f() -""" - def f(): + """ + >>> f() + """ pass diff --git a/tests/run/pinard5.pyx b/tests/run/pinard5.pyx index 6cef08c8..86aa53f8 100644 --- a/tests/run/pinard5.pyx +++ b/tests/run/pinard5.pyx @@ -1,8 +1,3 @@ -__doc__ = u""" - >>> test() - 1 -""" - cdef class Tri: def test(self): return 1 @@ -16,6 +11,10 @@ cdef produire_fiches(Tri tri): return tri.test() def test(): + """ + >>> test() + 1 + """ cdef Curseur c c = Curseur() c.tri = Tri() diff --git a/tests/run/powop.pyx b/tests/run/powop.pyx index cbc291dd..bd665ffb 100644 --- a/tests/run/powop.pyx +++ b/tests/run/powop.pyx @@ -1,33 +1,8 @@ -__doc__ = u""" +def f(obj2, obj3): + """ >>> f(1.0, 2.95)[0] == f(1.0, 2.95)[1] True - - >>> g(4) - 1024 - - >>> h(4) - 625 - - >>> constant_py() == 2 ** 10 - True - - >>> constant_long() == 2 ** 36 - True - - >>> small_int_pow(3) - (1, 3, 9, 27, 81) - >>> small_int_pow(-5) - (1, -5, 25, -125, 625) - - >>> int_pow(7, 2) - 49 - >>> int_pow(5, 3) - 125 - >>> int_pow(2, 10) - 1024 -""" - -def f(obj2, obj3): + """ cdef float flt1, flt2, flt3 flt2, flt3 = obj2, obj3 @@ -36,21 +11,51 @@ def f(obj2, obj3): return flt1, obj1 def g(i): + """ + >>> g(4) + 1024 + """ return i ** 5 def h(i): + """ + >>> h(4) + 625 + """ return 5 ** i def constant_py(): + """ + >>> constant_py() == 2 ** 10 + True + """ result = (2) ** 10 return result def constant_long(): + """ + >>> constant_long() == 2 ** 36 + True + """ result = (2L) ** 36 return result def small_int_pow(long s): + """ + >>> small_int_pow(3) + (1, 3, 9, 27, 81) + >>> small_int_pow(-5) + (1, -5, 25, -125, 625) + """ return s**0, s**1, s**2, s**3, s**4 def int_pow(short a, short b): + """ + >>> int_pow(7, 2) + 49 + >>> int_pow(5, 3) + 125 + >>> int_pow(2, 10) + 1024 + """ return a**b diff --git a/tests/run/print.pyx b/tests/run/print.pyx index 590581b8..82ef95cf 100644 --- a/tests/run/print.pyx +++ b/tests/run/print.pyx @@ -1,13 +1,12 @@ -__doc__ = u""" +def f(a, b): + """ >>> f(1, 'test') 1 1 test 1 test 1 test 42 spam -""" - -def f(a, b): + """ print print a print a, diff --git a/tests/run/pure.pyx b/tests/run/pure.pyx index 3013dada..13e315b1 100644 --- a/tests/run/pure.pyx +++ b/tests/run/pure.pyx @@ -1,43 +1,14 @@ -__doc__ = u""" ->>> test_sizeof() -True -True -True -True -True - ->>> test_declare(100) -(100, 100) ->>> test_declare(100.5) -(100, 100) ->>> test_declare(None) -Traceback (most recent call last): -... -TypeError: an integer is required - ->>> test_cast(1.5) -1 ->>> test_cast(None) -Traceback (most recent call last): -... -TypeError: a float is required - ->>> test_address(39) -39 - ->>> test_locals(5) -True - ->>> test_struct(389, 1.64493) -(389, 1.64493) - ->>> test_imports() -True -""" - import cython def test_sizeof(): + """ + >>> test_sizeof() + True + True + True + True + True + """ x = cython.declare(cython.bint) print sizeof(x) == sizeof(cython.bint) print sizeof(cython.char) <= sizeof(cython.short) <= sizeof(cython.int) <= sizeof(cython.long) <= sizeof(cython.longlong) @@ -49,6 +20,16 @@ def test_sizeof(): print sizeof(cython.char) == 1 def test_declare(n): + """ + >>> test_declare(100) + (100, 100) + >>> test_declare(100.5) + (100, 100) + >>> test_declare(None) + Traceback (most recent call last): + ... + TypeError: an integer is required + """ x = cython.declare(cython.int) y = cython.declare(cython.int, n) if cython.compiled: @@ -59,17 +40,33 @@ def test_declare(n): @cython.locals(x=cython.double, n=cython.int) def test_cast(x): + """ + >>> test_cast(1.5) + 1 + >>> test_cast(None) + Traceback (most recent call last): + ... + TypeError: a float is required + """ n = cython.cast(cython.int, x) return n @cython.locals(x=cython.int, y=cython.p_int) def test_address(x): + """ + >>> test_address(39) + 39 + """ y = cython.address(x) return y[0] @cython.locals(x=cython.int) @cython.locals(y=cython.bint) def test_locals(x): + """ + >>> test_locals(5) + True + """ y = x return y @@ -79,6 +76,10 @@ MyStruct = cython.struct(is_integral=cython.bint, data=MyUnion) MyStruct2 = cython.typedef(MyStruct[2]) def test_struct(n, x): + """ + >>> test_struct(389, 1.64493) + (389, 1.64493) + """ a = cython.declare(MyStruct2) a[0] = MyStruct(True, data=MyUnion(n=n)) a[1] = MyStruct(is_integral=False, data={'x': x}) @@ -90,6 +91,10 @@ from cython import declare as my_declare, locals as my_locals, p_void as my_void @my_locals(a=cython.p_void) def test_imports(): + """ + >>> test_imports() + True + """ a = cython.NULL b = declare(p_void, cython.NULL) c = my_declare(my_void_star, cython.NULL) diff --git a/tests/run/pycmp.pyx b/tests/run/pycmp.pyx index a6916422..130ab1ee 100644 --- a/tests/run/pycmp.pyx +++ b/tests/run/pycmp.pyx @@ -1,9 +1,7 @@ -__doc__ = u""" - >>> f() - >>> g() -""" - def f(): + """ + >>> f() + """ cdef int bool, int1, int2 cdef object obj1, obj2 int1 = 0 @@ -22,6 +20,9 @@ def f(): assert bool def g(): + """ + >>> g() + """ cdef int bool obj1 = 1 obj2 = [] @@ -29,4 +30,3 @@ def g(): assert not bool bool = obj1 not in obj2 assert bool - diff --git a/tests/run/pyintop.pyx b/tests/run/pyintop.pyx index cb07fcca..f222d1c8 100644 --- a/tests/run/pyintop.pyx +++ b/tests/run/pyintop.pyx @@ -1,38 +1,47 @@ -__doc__ = u""" +def f(obj1, obj2, obj3): + """ >>> f(1,2,3) 3 - >>> g(1,2,3) - 1 - >>> h(1,2,3) - 2 - >>> j(1,2,3) - 16 - >>> k(1,2,3) - 0 - >>> l(1,2,3) - 16 -""" - -def f(obj1, obj2, obj3): + """ obj1 = obj2 | obj3 return obj1 def g(obj1, obj2, obj3): + """ + >>> g(1,2,3) + 1 + """ obj1 = obj2 ^ obj3 return obj1 def h(obj1, obj2, obj3): + """ + >>> h(1,2,3) + 2 + """ obj1 = obj2 & obj3 return obj1 def j(obj1, obj2, obj3): + """ + >>> j(1,2,3) + 16 + """ obj1 = obj2 << obj3 return obj1 def k(obj1, obj2, obj3): + """ + >>> k(1,2,3) + 0 + """ obj1 = obj2 >> obj3 return obj1 def l(obj1, obj2, obj3): + """ + >>> l(1,2,3) + 16 + """ obj1 = obj2 << obj3 | obj2 >> obj3 return obj1 diff --git a/tests/run/pynumop.pyx b/tests/run/pynumop.pyx index 5f7f0028..6e6c6ec7 100644 --- a/tests/run/pynumop.pyx +++ b/tests/run/pynumop.pyx @@ -1,11 +1,8 @@ -__doc__ = u""" +def f(): + """ >>> f() 6 - >>> g() - 2 -""" - -def f(): + """ obj1 = 1 obj2 = 2 obj3 = 3 @@ -13,6 +10,10 @@ def f(): return obj1 def g(): + """ + >>> g() + 2 + """ obj1 = 12 obj2 = 6 obj3 = 3 diff --git a/tests/run/pyobjcast_T313.pyx b/tests/run/pyobjcast_T313.pyx index 1a06044d..88d61451 100644 --- a/tests/run/pyobjcast_T313.pyx +++ b/tests/run/pyobjcast_T313.pyx @@ -18,4 +18,3 @@ def f(): p1 = a p2 = a return (p1, p2) - diff --git a/tests/run/r_argdefault.pyx b/tests/run/r_argdefault.pyx index 4d887703..4e30cec7 100644 --- a/tests/run/r_argdefault.pyx +++ b/tests/run/r_argdefault.pyx @@ -1,17 +1,15 @@ -__doc__ = u""" - >>> swallow(name = "Brian") - This swallow is called Brian - >>> swallow(airspeed = 42) - This swallow is flying at 42 furlongs per fortnight - >>> swallow(coconuts = 3) - This swallow is carrying 3 coconuts -""" - def swallow(name = None, airspeed = None, coconuts = None): + """ + >>> swallow(name = "Brian") + This swallow is called Brian + >>> swallow(airspeed = 42) + This swallow is flying at 42 furlongs per fortnight + >>> swallow(coconuts = 3) + This swallow is carrying 3 coconuts + """ if name is not None: print u"This swallow is called", name if airspeed is not None: print u"This swallow is flying at", airspeed, u"furlongs per fortnight" if coconuts is not None: print u"This swallow is carrying", coconuts, u"coconuts" - diff --git a/tests/run/r_bowden1.pyx b/tests/run/r_bowden1.pyx index 14851684..7d372b57 100644 --- a/tests/run/r_bowden1.pyx +++ b/tests/run/r_bowden1.pyx @@ -1,18 +1,19 @@ -__doc__ = u""" ->>> f(100) -101L ->>> g(3000000000) -3000000001L -""" - import sys if sys.version_info[0] >= 3: __doc__ = __doc__.replace(u"L", u"") def f(x): + """ + >>> f(100) + 101L + """ cdef unsigned long long ull ull = x return ull + 1 def g(unsigned long x): + """ + >>> g(3000000000) + 3000000001L + """ return x + 1 diff --git a/tests/run/r_delgado_1.pyx b/tests/run/r_delgado_1.pyx index e42fa672..b79699df 100644 --- a/tests/run/r_delgado_1.pyx +++ b/tests/run/r_delgado_1.pyx @@ -15,4 +15,3 @@ cdef class eggs: def eat(self): raise RuntimeError(u"I don't like that") - diff --git a/tests/run/r_forloop.pyx b/tests/run/r_forloop.pyx index 3514656d..f0bdebf0 100644 --- a/tests/run/r_forloop.pyx +++ b/tests/run/r_forloop.pyx @@ -1,108 +1,86 @@ -__doc__ = u""" - >>> go_py() - Spam! - Spam! - Spam! - Spam! - >>> go_py_ret() - 2 - - >>> go_c() - Spam! - Spam! - Spam! - Spam! - >>> go_c_int(1,5) - Spam! - Spam! - >>> go_c_enumerate() - True - True - True - True - >>> go_c_all() - Spam! - Spam! - Spam! - >>> go_c_all_exprs(1) - Spam! - >>> go_c_all_exprs(3) - Spam! - Spam! - >>> go_c_const_exprs() - Spam! - Spam! - >>> go_c_calc(2) - Spam! - Spam! - >>> go_c_ret() - 2 - >>> go_c_calc_ret(2) - 6 - - >>> go_list() - Spam! - Spam! - Spam! - Spam! - >>> go_list_ret() - 2 - - >>> go_tuple() - Spam! - Spam! - Spam! - Spam! - >>> go_tuple_ret() - 2 - - >>> go_dict() - Spam! - Spam! - Spam! - Spam! - >>> go_dict_ret() - 2 - - >>> global_result - 6 -""" - def go_py(): + """ + >>> go_py() + Spam! + Spam! + Spam! + Spam! + """ for i in range(4): print u"Spam!" def go_py_ret(): + """ + >>> go_py_ret() + 2 + """ for i in range(4): if i > 1: return i def go_c(): + """ + >>> go_c() + Spam! + Spam! + Spam! + Spam! + """ cdef int i for i in range(4): print u"Spam!" def go_c_enumerate(): + """ + >>> go_c_enumerate() + True + True + True + True + """ cdef int i,k for i,k in enumerate(range(4)): print i == k def go_c_int(int a, int b): + """ + >>> go_c_int(1,5) + Spam! + Spam! + """ cdef int i for i in range(a,b,2): print u"Spam!" def go_c_all(): + """ + >>> go_c_all() + Spam! + Spam! + Spam! + """ cdef int i for i in range(8,2,-2): print u"Spam!" def go_c_all_exprs(x): + """ + >>> go_c_all_exprs(1) + Spam! + >>> go_c_all_exprs(3) + Spam! + Spam! + """ cdef int i for i in range(4*x,2*x,-3): print u"Spam!" def go_c_const_exprs(): + """ + >>> go_c_const_exprs() + Spam! + Spam! + """ cdef int i for i in range(4*2+1,2*2,-2-1): print u"Spam!" @@ -111,50 +89,98 @@ def f(x): return 2*x def go_c_calc(x): + """ + >>> go_c_calc(2) + Spam! + Spam! + """ cdef int i for i in range(2*f(x),f(x), -2): print u"Spam!" def go_c_calc_ret(x): + """ + >>> go_c_calc_ret(2) + 6 + """ cdef int i for i in range(2*f(x),f(x), -2): if i < 2*f(x): return i def go_c_ret(): + """ + >>> go_c_ret() + 2 + """ cdef int i for i in range(4): if i > 1: return i def go_list(): + """ + >>> go_list() + Spam! + Spam! + Spam! + Spam! + """ cdef list l = list(range(4)) for i in l: print u"Spam!" def go_list_ret(): + """ + >>> go_list_ret() + 2 + """ cdef list l = list(range(4)) for i in l: if i > 1: return i def go_tuple(): + """ + >>> go_tuple() + Spam! + Spam! + Spam! + Spam! + """ cdef tuple t = tuple(range(4)) for i in t: print u"Spam!" def go_tuple_ret(): + """ + >>> go_tuple_ret() + 2 + """ cdef tuple t = tuple(range(4)) for i in t: if i > 1: return i def go_dict(): + """ + >>> go_dict() + Spam! + Spam! + Spam! + Spam! + """ cdef dict d = dict(zip(range(4), range(4))) for i in d: print u"Spam!" def go_dict_ret(): + """ + >>> go_dict_ret() + 2 + >>> global_result + 6 + """ cdef dict d = dict(zip(range(4), range(4))) for i in d: if i > 1 and i < 3: diff --git a/tests/run/r_jeff_epler_1.pyx b/tests/run/r_jeff_epler_1.pyx index 2c08f621..9f67be30 100644 --- a/tests/run/r_jeff_epler_1.pyx +++ b/tests/run/r_jeff_epler_1.pyx @@ -1,9 +1,8 @@ -__doc__ = u""" +def blowup(p): + """ >>> blowup([2, 3, 5]) 1 -""" - -def blowup(p): + """ cdef int n, i n = 10 i = 1 diff --git a/tests/run/r_mitch_chapman_2.pyx b/tests/run/r_mitch_chapman_2.pyx index e0596a14..86c21228 100644 --- a/tests/run/r_mitch_chapman_2.pyx +++ b/tests/run/r_mitch_chapman_2.pyx @@ -1,9 +1,8 @@ -__doc__ = u""" +def boolExpressionsFail(): + """ >>> boolExpressionsFail() 'Not 2b' -""" - -def boolExpressionsFail(): + """ dict = {1: 1} if not "2b" in dict: return "Not 2b" diff --git a/tests/run/r_primes.pyx b/tests/run/r_primes.pyx index 16a93b06..558513c2 100644 --- a/tests/run/r_primes.pyx +++ b/tests/run/r_primes.pyx @@ -1,9 +1,8 @@ -__doc__ = u""" +def primes(int kmax): + """ >>> primes(20) [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71] -""" - -def primes(int kmax): + """ cdef int n, k, i cdef int p[1000] result = [] diff --git a/tests/run/r_print.pyx b/tests/run/r_print.pyx index ea716dff..38b87ced 100644 --- a/tests/run/r_print.pyx +++ b/tests/run/r_print.pyx @@ -1,8 +1,6 @@ -__doc__ = u""" - >>> frighten() - NOBODY expects the Spanish Inquisition! -""" - def frighten(): + """ + >>> frighten() + NOBODY expects the Spanish Inquisition! + """ print u"NOBODY", u"expects", u"the Spanish Inquisition!" - diff --git a/tests/run/r_pyclass.pyx b/tests/run/r_pyclass.pyx index 68342245..18d34222 100644 --- a/tests/run/r_pyclass.pyx +++ b/tests/run/r_pyclass.pyx @@ -1,8 +1,3 @@ -__doc__ = u""" - >>> order() - 42 tons of spam! -""" - class Spam: def __init__(self, w): @@ -12,5 +7,9 @@ class Spam: print self.weight, u"tons of spam!" def order(): + """ + >>> order() + 42 tons of spam! + """ s = Spam(42) s.serve() diff --git a/tests/run/r_starargcall.pyx b/tests/run/r_starargcall.pyx index dbd47ee1..d307aa67 100644 --- a/tests/run/r_starargcall.pyx +++ b/tests/run/r_starargcall.pyx @@ -1,13 +1,11 @@ -__doc__ = u""" - >>> eggs() - Args: 1 2 3 - Args: buckle my shoe -""" - def spam(a, b, c): print u"Args:", a, b, c def eggs(): + """ + >>> eggs() + Args: 1 2 3 + Args: buckle my shoe + """ spam(*(1,2,3)) spam(*[u"buckle",u"my",u"shoe"]) - diff --git a/tests/run/r_starargs.pyx b/tests/run/r_starargs.pyx index 03f08c59..10cfcf2f 100644 --- a/tests/run/r_starargs.pyx +++ b/tests/run/r_starargs.pyx @@ -1,38 +1,32 @@ -__doc__ = u""" +def swallow(name, airspeed, *args, **kwds): + """ >>> swallow("Brian", 42) Name: Brian Airspeed: 42 Extra args: () Extra keywords: {} - >>> swallow("Brian", 42, "African") Name: Brian Airspeed: 42 Extra args: ('African',) Extra keywords: {} - >>> swallow("Brian", airspeed = 42) Name: Brian Airspeed: 42 Extra args: () Extra keywords: {} - >>> swallow("Brian", airspeed = 42, species = "African", coconuts = 3) Name: Brian Airspeed: 42 Extra args: () Extra keywords: {'coconuts': 3, 'species': 'African'} - >>> swallow("Brian", 42, "African", coconuts = 3) Name: Brian Airspeed: 42 Extra args: ('African',) Extra keywords: {'coconuts': 3} -""" - -def swallow(name, airspeed, *args, **kwds): + """ print u"Name:", name print u"Airspeed:", airspeed print u"Extra args:", args print u"Extra keywords:", kwds - diff --git a/tests/run/r_starargsonly.pyx b/tests/run/r_starargsonly.pyx index a0fa25df..08dc798a 100644 --- a/tests/run/r_starargsonly.pyx +++ b/tests/run/r_starargsonly.pyx @@ -1,12 +1,10 @@ -__doc__ = u""" +def spam(*args): + """ >>> spam() Args: () >>> spam(42) Args: (42,) >>> spam("one", 2, "buckle my shoe") Args: ('one', 2, 'buckle my shoe') -""" - -def spam(*args): + """ print u"Args:", args - diff --git a/tests/run/r_typecast.pyx b/tests/run/r_typecast.pyx index a4a6b598..a93b1711 100644 --- a/tests/run/r_typecast.pyx +++ b/tests/run/r_typecast.pyx @@ -1,8 +1,3 @@ -__doc__ = u""" ->>> call_method( ExtType() ).method() -1 -""" - cdef class ExtType: cdef c_method(self): return self @@ -11,4 +6,8 @@ cdef class ExtType: return 1 def call_method(ExtType et): + """ + >>> call_method( ExtType() ).method() + 1 + """ return et.c_method() diff --git a/tests/run/r_vree_1.pyx b/tests/run/r_vree_1.pyx index 1a14c268..f9744757 100644 --- a/tests/run/r_vree_1.pyx +++ b/tests/run/r_vree_1.pyx @@ -1,4 +1,3 @@ - import sys if sys.version_info[0] < 3: __doc__ = u""" diff --git a/tests/run/range_optimisation_T203.pyx b/tests/run/range_optimisation_T203.pyx index 38ec0e2b..690dd1dd 100644 --- a/tests/run/range_optimisation_T203.pyx +++ b/tests/run/range_optimisation_T203.pyx @@ -1,83 +1,33 @@ -__doc__ = u""" ->>> for_from_range(5, 10) -range(5) -at 0 -at 1 -at 2 -at 3 -at 4 -range(5, 10) -at 5 -at 6 -at 7 -at 8 -at 9 -range(5, 10, 2) -at 5 -at 7 -at 9 -9 ->>> for_from_range(-5, -10) -range(-5) -range(-5, -10) -range(-5, -10, 2) -100 ->>> for_from_bound_reassignment(5, 1) -at 0 -at 1 -at 2 -at 3 -at 4 -5 ->>> for_from_step_reassignment(15, 5, 2) -at 0 -at 5 -at 10 -15 ->>> for_from_target_reassignment(10, 2) -at 0 -at 1 -at 3 -at 7 -15 ->>> for_from_py_target_reassignment(10, 2) -at 0 -at 1 -at 3 -at 7 -15 ->>> for_from_py_global_target_reassignment(10, 2) -at 0 -at 1 -at 3 -at 7 -15 ->>> for_in_target_reassignment(10, 2) -at 0 -at 1 -at 2 -at 3 -at 4 -at 5 -at 6 -at 7 -at 8 -at 9 -18 ->>> test_func(5) -get_bound(5) -at 0 -at 1 -at 2 -at 3 -at 4 -5 -""" cdef int get_bound(int m): print u"get_bound(%s)"%m return m def for_from_range(a, b): + """ + >>> for_from_range(5, 10) + range(5) + at 0 + at 1 + at 2 + at 3 + at 4 + range(5, 10) + at 5 + at 6 + at 7 + at 8 + at 9 + range(5, 10, 2) + at 5 + at 7 + at 9 + 9 + >>> for_from_range(-5, -10) + range(-5) + range(-5, -10) + range(-5, -10, 2) + 100 + """ cdef int i = 100 print u"range(%s)" % a for i in range(a): @@ -91,6 +41,15 @@ def for_from_range(a, b): return i def for_from_bound_reassignment(int bound, int fake_bound): + """ + >>> for_from_bound_reassignment(5, 1) + at 0 + at 1 + at 2 + at 3 + at 4 + 5 + """ cdef int i = 100 for i from 0 <= i < bound: print u"at", i @@ -98,6 +57,13 @@ def for_from_bound_reassignment(int bound, int fake_bound): return i def for_from_step_reassignment(int bound, int step, int fake_step): + """ + >>> for_from_step_reassignment(15, 5, 2) + at 0 + at 5 + at 10 + 15 + """ cdef int i = 100 for i from 0 <= i < bound by step: print u"at", i @@ -105,6 +71,14 @@ def for_from_step_reassignment(int bound, int step, int fake_step): return i def for_from_target_reassignment(int bound, int factor): + """ + >>> for_from_target_reassignment(10, 2) + at 0 + at 1 + at 3 + at 7 + 15 + """ cdef int i = 100 for i from 0 <= i < bound: print u"at", i @@ -112,6 +86,14 @@ def for_from_target_reassignment(int bound, int factor): return i def for_from_py_target_reassignment(int bound, int factor): + """ + >>> for_from_py_target_reassignment(10, 2) + at 0 + at 1 + at 3 + at 7 + 15 + """ cdef object i for i from 0 <= i < bound: print u"at", i @@ -119,6 +101,14 @@ def for_from_py_target_reassignment(int bound, int factor): return i def for_from_py_global_target_reassignment(int bound, int factor): + """ + >>> for_from_py_global_target_reassignment(10, 2) + at 0 + at 1 + at 3 + at 7 + 15 + """ global g_var for g_var from 0 <= g_var < bound: print u"at", g_var @@ -126,6 +116,20 @@ def for_from_py_global_target_reassignment(int bound, int factor): return g_var def for_in_target_reassignment(int bound, int factor): + """ + >>> for_in_target_reassignment(10, 2) + at 0 + at 1 + at 2 + at 3 + at 4 + at 5 + at 6 + at 7 + at 8 + at 9 + 18 + """ cdef int i = 100 for i in range(bound): print u"at", i @@ -133,6 +137,16 @@ def for_in_target_reassignment(int bound, int factor): return i def test_func(int n): + """ + >>> test_func(5) + get_bound(5) + at 0 + at 1 + at 2 + at 3 + at 4 + 5 + """ cdef int i = 100 for i from 0 <= i < get_bound(n): print u"at", i diff --git a/tests/run/ref2local.pyx b/tests/run/ref2local.pyx index 9b108ba9..340b63b8 100644 --- a/tests/run/ref2local.pyx +++ b/tests/run/ref2local.pyx @@ -1,9 +1,8 @@ -__doc__ = u""" +def f(): + """ >>> f() 42 -""" - -def f(): + """ a = 42 b = a return b diff --git a/tests/run/return.pyx b/tests/run/return.pyx index 1016c720..513db711 100644 --- a/tests/run/return.pyx +++ b/tests/run/return.pyx @@ -1,11 +1,7 @@ -__doc__ = u""" - >>> f('test') - >>> test_g() - >>> test_h(5) - 5 -""" - def f(a): + """ + >>> f('test') + """ return return a return 42 @@ -19,7 +15,14 @@ cdef int h(a): return i def test_g(): + """ + >>> test_g() + """ g() def test_h(i): + """ + >>> test_h(5) + 5 + """ return h(i) diff --git a/tests/run/returnparassign.pyx b/tests/run/returnparassign.pyx index 8d4fffd3..5bfa1c81 100644 --- a/tests/run/returnparassign.pyx +++ b/tests/run/returnparassign.pyx @@ -1,8 +1,7 @@ -__doc__ = u""" ->>> test() -5 -""" - def test(): + """ + >>> test() + 5 + """ a = b = c = 5 return a diff --git a/tests/run/simpcall.pyx b/tests/run/simpcall.pyx index 497df8b0..6d0957e2 100644 --- a/tests/run/simpcall.pyx +++ b/tests/run/simpcall.pyx @@ -1,16 +1,5 @@ -__doc__ = u""" +__doc__ = """ >>> z(1,9.2, b'test') - >>> failtype() - Traceback (most recent call last): - TypeError: an integer is required - - >>> fail0(1,2) - Traceback (most recent call last): - TypeError: f() takes exactly 2 positional arguments (0 given) - - >>> fail1(1,2) - Traceback (most recent call last): - TypeError: f() takes exactly 2 positional arguments (1 given) """ import sys @@ -33,10 +22,25 @@ def z(a, b, c): g(a, b, c) def fail0(a, b): + """ + >>> fail0(1,2) + Traceback (most recent call last): + TypeError: f() takes exactly 2 positional arguments (0 given) + """ f() def fail1(a, b): + """ + >>> fail1(1,2) + Traceback (most recent call last): + TypeError: f() takes exactly 2 positional arguments (1 given) + """ f(a) def failtype(): + """ + >>> failtype() + Traceback (most recent call last): + TypeError: an integer is required + """ h(42, "eggs") diff --git a/tests/run/sizeof.pyx b/tests/run/sizeof.pyx index 3360273f..4120bb6a 100644 --- a/tests/run/sizeof.pyx +++ b/tests/run/sizeof.pyx @@ -1,11 +1,10 @@ -__doc__ = u""" - >>> f() -""" - cdef struct Spam: char *grail def f(): + """ + >>> f() + """ cdef int i, j, k cdef char *p i = sizeof(p) diff --git a/tests/run/slice2.pyx b/tests/run/slice2.pyx index c4926442..29e3f999 100644 --- a/tests/run/slice2.pyx +++ b/tests/run/slice2.pyx @@ -1,39 +1,37 @@ -__doc__ = u""" +def f(obj1, obj2, obj3, obj4): + """ >>> l = [1,2,3,4] - >>> f(1, l, 2, 3) [1, 2, 3, 4] >>> l == f(1, l, 2, 3) True >>> l is f(1, l, 2, 3) False - - >>> g(1, [1,2,3,4], 2, 3) - [3, 4] - - >>> h(1, [1,2,3,4], 2, 3) - [1, 2, 3] - - >>> j(1, [1,2,3,4], 2, 3) - [3] - - >>> slice_of_temporary_smoketest() - [3, 2] -""" - -def f(obj1, obj2, obj3, obj4): + """ obj1 = obj2[:] return obj1 def g(obj1, obj2, obj3, obj4): + """ + >>> g(1, [1,2,3,4], 2, 3) + [3, 4] + """ obj1 = obj2[obj3:] return obj1 def h(obj1, obj2, obj3, obj4): + """ + >>> h(1, [1,2,3,4], 2, 3) + [1, 2, 3] + """ obj1 = obj2[:obj4] return obj1 def j(obj1, obj2, obj3, obj4): + """ + >>> j(1, [1,2,3,4], 2, 3) + [3] + """ obj1 = obj2[obj3:obj4] return obj1 @@ -41,6 +39,10 @@ class A(object): pass def slice_of_temporary_smoketest(): + """ + >>> slice_of_temporary_smoketest() + [3, 2] + """ x = A() x.a = [1, 2] x.a[:] = [3,2] diff --git a/tests/run/specialfloat.pyx b/tests/run/specialfloat.pyx index af96fa2a..993d1478 100644 --- a/tests/run/specialfloat.pyx +++ b/tests/run/specialfloat.pyx @@ -1,56 +1,3 @@ -__doc__ = u""" - >>> f() - 12.5 - - >>> nan1() - nan - >>> nan2() - nan - >>> nan3() - nan - >>> float_nan - nan - - >>> infp1() - inf - >>> infp1() == float('inf') - True - >>> infp2() - inf - >>> infp2() == float('inf') - True - >>> infp3() - inf - >>> infp3() == float('inf') - True - >>> float_infp - inf - >>> float_infp == float('inf') - True - - >>> infn1() - -inf - >>> infn1() == float('-inf') - True - >>> infn2() - -inf - >>> infn2() == float('-inf') - True - >>> infn3() - -inf - >>> infn3() == float('-inf') - True - >>> float_infn - -inf - >>> float_infn == float('-inf') - True - - >>> global_floats()[1:] == (float('+inf'), float('-inf')) - True - >>> global_floats()[0] - nan -""" - DEF FLOAT = 12.5 DEF FLOAT_NAN = float('nan') DEF FLOAT_INFP = float('+inf') @@ -65,54 +12,122 @@ float_infp = FLOAT_INFP float_infn = FLOAT_INFN def f(): + """ + >>> f() + 12.5 + """ cdef float f f = FLOAT return f def nan1(): + """ + >>> nan1() + nan + """ cdef double f f = FLOAT_NAN return f def nan2(): + """ + >>> nan2() + nan + """ cdef double f f = float('nan') return f def nan3(): + """ + >>> nan3() + nan + >>> float_nan + nan + """ cdef float f f = FLOAT_NAN return f def infp1(): + """ + >>> infp1() + inf + >>> infp1() == float('inf') + True + """ cdef double f f = FLOAT_INFP return f def infp2(): + """ + >>> infp2() + inf + >>> infp2() == float('inf') + True + """ cdef double f f = float('+inf') return f def infp3(): + """ + >>> infp3() + inf + >>> infp3() == float('inf') + True + >>> float_infp + inf + >>> float_infp == float('inf') + True + """ cdef float f f = FLOAT_INFP return f def infn1(): + """ + >>> infn1() + -inf + >>> infn1() == float('-inf') + True + """ cdef double f f = FLOAT_INFN return f def infn2(): + """ + >>> infn2() + -inf + >>> infn2() == float('-inf') + True + """ cdef double f f = float('-inf') return f def infn3(): + """ + >>> infn3() + -inf + >>> infn3() == float('-inf') + True + >>> float_infn + -inf + >>> float_infn == float('-inf') + True + """ cdef float f f = FLOAT_INFN return f def global_floats(): + """ + >>> global_floats()[1:] == (float('+inf'), float('-inf')) + True + >>> global_floats()[0] + nan + """ return (cdef_float_nan, cdef_float_infp, cdef_float_infn) diff --git a/tests/run/starargs.pyx b/tests/run/starargs.pyx index c4908cc7..5e17faa4 100644 --- a/tests/run/starargs.pyx +++ b/tests/run/starargs.pyx @@ -1,4 +1,10 @@ -__doc__ = u""" +cdef sorteditems(d): + l = list(d.items()) + l.sort() + return tuple(l) + +def spam(x, y, z): + """ >>> spam(1,2,3) (1, 2, 3) >>> spam(1,2) @@ -10,7 +16,11 @@ __doc__ = u""" >>> spam(1,2,3, a=1) Traceback (most recent call last): TypeError: spam() got an unexpected keyword argument 'a' + """ + return (x, y, z) +def grail(x, y, z, *a): + """ >>> grail(1,2,3) (1, 2, 3, ()) >>> grail(1,2,3,4) @@ -23,7 +33,11 @@ __doc__ = u""" >>> grail(1,2,3, a=1) Traceback (most recent call last): TypeError: grail() got an unexpected keyword argument 'a' + """ + return (x, y, z, a) +def swallow(x, y, z, **k): + """ >>> swallow(1,2,3) (1, 2, 3, ()) >>> swallow(1,2,3,4) @@ -34,7 +48,11 @@ __doc__ = u""" >>> swallow(1,2,3, x=1) Traceback (most recent call last): TypeError: swallow() got multiple values for keyword argument 'x' + """ + return (x, y, z, sorteditems(k)) +def creosote(x, y, z, *a, **k): + """ >>> creosote(1,2,3) (1, 2, 3, (), ()) >>> creosote(1,2,3,4) @@ -46,7 +64,11 @@ __doc__ = u""" >>> creosote(1,2,3,4, x=1) Traceback (most recent call last): TypeError: creosote() got multiple values for keyword argument 'x' + """ + return (x, y, z, a, sorteditems(k)) +def onlyt(*a): + """ >>> onlyt(1) (1,) >>> onlyt(1,2) @@ -57,7 +79,11 @@ __doc__ = u""" >>> onlyt(1, a=2) Traceback (most recent call last): TypeError: onlyt() got an unexpected keyword argument 'a' + """ + return a +def onlyk(**k): + """ >>> onlyk(a=1) (('a', 1),) >>> onlyk(a=1, b=2) @@ -71,7 +97,11 @@ __doc__ = u""" >>> onlyk(1, a=1, b=2) Traceback (most recent call last): TypeError: onlyk() takes exactly 0 positional arguments (1 given) + """ + return sorteditems(k) +def tk(*a, **k): + """ >>> tk(a=1) (('a', 1),) >>> tk(a=1, b=2) @@ -82,30 +112,5 @@ __doc__ = u""" (1, 2) >>> tk(1, a=1, b=2) (1, ('a', 1), ('b', 2)) -""" - -cdef sorteditems(d): - l = list(d.items()) - l.sort() - return tuple(l) - -def spam(x, y, z): - return (x, y, z) - -def grail(x, y, z, *a): - return (x, y, z, a) - -def swallow(x, y, z, **k): - return (x, y, z, sorteditems(k)) - -def creosote(x, y, z, *a, **k): - return (x, y, z, a, sorteditems(k)) - -def onlyt(*a): - return a - -def onlyk(**k): - return sorteditems(k) - -def tk(*a, **k): + """ return a + sorteditems(k) diff --git a/tests/run/str_char_coercion_T412.pyx b/tests/run/str_char_coercion_T412.pyx index 298d3ba3..ff796e90 100644 --- a/tests/run/str_char_coercion_T412.pyx +++ b/tests/run/str_char_coercion_T412.pyx @@ -1,43 +1,15 @@ -__doc__ = u""" ->>> test_eq() -True -True -True -True - ->>> test_cascaded_eq() -True -True -True -True -True -True -True -True - ->>> test_cascaded_ineq() -True -True -True -True -True -True -True -True - ->>> test_long_ineq() -True - ->>> test_long_ineq_py() -True -True -""" - cdef int i = 'x' cdef char c = 'x' cdef char* s = 'x' def test_eq(): + """ + >>> test_eq() + True + True + True + True + """ print i == 'x' print i == c'x' print c == 'x' @@ -46,6 +18,17 @@ def test_eq(): # print s == c'x' # error def test_cascaded_eq(): + """ + >>> test_cascaded_eq() + True + True + True + True + True + True + True + True + """ print 'x' == i == 'x' print 'x' == i == c'x' print c'x' == i == 'x' @@ -57,6 +40,17 @@ def test_cascaded_eq(): print c'x' == c == c'x' def test_cascaded_ineq(): + """ + >>> test_cascaded_ineq() + True + True + True + True + True + True + True + True + """ print 'a' <= i <= 'z' print 'a' <= i <= c'z' print c'a' <= i <= 'z' @@ -68,8 +62,17 @@ def test_cascaded_ineq(): print c'a' <= c <= c'z' def test_long_ineq(): + """ + >>> test_long_ineq() + True + """ print 'a' < 'b' < 'c' < 'd' < c < 'y' < 'z' def test_long_ineq_py(): + """ + >>> test_long_ineq_py() + True + True + """ print 'abcdef' < 'b' < 'c' < 'd' < 'y' < 'z' print 'a' < 'b' < 'cde' < 'd' < 'y' < 'z' diff --git a/tests/run/strconstinclass.pyx b/tests/run/strconstinclass.pyx index e07fae4f..ea8f3cef 100644 --- a/tests/run/strconstinclass.pyx +++ b/tests/run/strconstinclass.pyx @@ -6,4 +6,3 @@ __doc__ = u""" class C: x = "foo" - diff --git a/tests/run/strfunction.pyx b/tests/run/strfunction.pyx index 757cfcdc..47c6366f 100644 --- a/tests/run/strfunction.pyx +++ b/tests/run/strfunction.pyx @@ -3,29 +3,35 @@ __doc__ = u""" 'test' >>> z 'test' - >>> c('testing') - 'testing' - >>> sub('testing a subtype') - 'testing a subtype' - >>> subs('testing a subtype') - 'testing a subtype' - -# >>> csub('testing a subtype') -# 'testing a subtype' -# >>> csubs('testing a subtype') -# 'testing a subtype' """ s = str z = str('test') def c(string): + """ + >>> c('testing') + 'testing' + """ return str(string) class subs(str): + """ + >>> subs('testing a subtype') + 'testing a subtype' + + # >>> csub('testing a subtype') + # 'testing a subtype' + # >>> csubs('testing a subtype') + # 'testing a subtype' + """ pass def sub(string): + """ + >>> sub('testing a subtype') + 'testing a subtype' + """ return subs(string) #cdef class subs(str): diff --git a/tests/run/struct_conversion.pyx b/tests/run/struct_conversion.pyx index 2234b0e4..aa8100d1 100644 --- a/tests/run/struct_conversion.pyx +++ b/tests/run/struct_conversion.pyx @@ -1,45 +1,41 @@ -__doc__ = u""" +cdef struct Point: + double x + double y + int color + +def test_constructor(x, y, color): + """ >>> test_constructor(1,2,255) {'y': 2.0, 'x': 1.0, 'color': 255} >>> test_constructor(1,None,255) Traceback (most recent call last): ... TypeError: a float is required - + """ + cdef Point p = Point(x, y, color) + return p + +def test_constructor_kwds(x, y, color): + """ >>> test_constructor_kwds(1.25, 2.5, 128) {'y': 2.5, 'x': 1.25, 'color': 128} >>> test_constructor_kwds(1.25, 2.5, None) Traceback (most recent call last): ... TypeError: an integer is required - + """ + cdef Point p = Point(x=x, y=y, color=color) + return p + +def test_dict_construction(x, y, color): + """ >>> test_dict_construction(4, 5, 64) {'y': 5.0, 'x': 4.0, 'color': 64} >>> test_dict_construction("foo", 5, 64) Traceback (most recent call last): ... TypeError: a float is required - - >>> test_pointers(100, 2.71828) - 100 - 2.71828 - True -""" - -cdef struct Point: - double x - double y - int color - -def test_constructor(x, y, color): - cdef Point p = Point(x, y, color) - return p - -def test_constructor_kwds(x, y, color): - cdef Point p = Point(x=x, y=y, color=color) - return p - -def test_dict_construction(x, y, color): + """ cdef Point p = {'color': color, 'x': x, 'y': y} return p @@ -53,6 +49,12 @@ cdef struct with_pointers: void* ptr def test_pointers(int n, double x): + """ + >>> test_pointers(100, 2.71828) + 100 + 2.71828 + True + """ cdef with_pointers a = [True, {'n': n}, NULL] cdef with_pointers b = with_pointers(False, {'x': x}, NULL) print a.data.n diff --git a/tests/run/subclasses.pyx b/tests/run/subclasses.pyx index ece74280..51a5eb44 100644 --- a/tests/run/subclasses.pyx +++ b/tests/run/subclasses.pyx @@ -1,37 +1,3 @@ -__doc__ = u""" ->>> zoo = Zoo() ->>> for cl in (Zoo, Bam, Bar, Foo, Base, Base0): assert isinstance(zoo, cl) ->>> fooit(zoo) -42 - ->>> bam = Bam() ->>> for cl in (Bam, Bar, Foo, Base, Base0): assert isinstance(bam, cl) ->>> fooit(bam) -42 - ->>> bar = Bar() ->>> for cl in (Bar, Foo, Base, Base0): assert isinstance(bar, cl) ->>> fooit(bar) -42 - ->>> foo = Foo() ->>> for cl in (Foo, Base, Base0): assert isinstance(foo, cl) ->>> fooit(foo) -42 - ->>> base = Base() ->>> for cl in (Base, Base0): assert isinstance(base, cl) ->>> fooit(base) -Traceback (most recent call last): -TypeError: Argument 'foo' has incorrect type (expected subclasses.Foo, got subclasses.Base) - ->>> base0 = Base0() ->>> for cl in (Base0,): assert isinstance(base0, cl) ->>> fooit(base0) -Traceback (most recent call last): -TypeError: Argument 'foo' has incorrect type (expected subclasses.Foo, got subclasses.Base0) -""" - cdef class Base0: pass @@ -53,4 +19,32 @@ cdef class Zoo(Bam): def fooit(Foo foo): + """ + >>> zoo = Zoo() + >>> for cl in (Zoo, Bam, Bar, Foo, Base, Base0): assert isinstance(zoo, cl) + >>> fooit(zoo) + 42 + >>> bam = Bam() + >>> for cl in (Bam, Bar, Foo, Base, Base0): assert isinstance(bam, cl) + >>> fooit(bam) + 42 + >>> bar = Bar() + >>> for cl in (Bar, Foo, Base, Base0): assert isinstance(bar, cl) + >>> fooit(bar) + 42 + >>> foo = Foo() + >>> for cl in (Foo, Base, Base0): assert isinstance(foo, cl) + >>> fooit(foo) + 42 + >>> base = Base() + >>> for cl in (Base, Base0): assert isinstance(base, cl) + >>> fooit(base) + Traceback (most recent call last): + TypeError: Argument 'foo' has incorrect type (expected subclasses.Foo, got subclasses.Base) + >>> base0 = Base0() + >>> for cl in (Base0,): assert isinstance(base0, cl) + >>> fooit(base0) + Traceback (most recent call last): + TypeError: Argument 'foo' has incorrect type (expected subclasses.Foo, got subclasses.Base0) + """ return foo.fooit() diff --git a/tests/run/subop.pyx b/tests/run/subop.pyx index 25ef4701..5166b183 100644 --- a/tests/run/subop.pyx +++ b/tests/run/subop.pyx @@ -1,11 +1,8 @@ -__doc__ = u""" +def f(): + """ >>> f() (-1, -1) - >>> p() - 0 -""" - -def f(): + """ cdef int int1, int2, int3 obj1 = 1 obj2 = 2 @@ -18,6 +15,10 @@ def f(): return int1, obj1 def p(): + """ + >>> p() + 0 + """ cdef int int1, int2, int3 cdef char *ptr1, *ptr2, *ptr3 int2 = 2 diff --git a/tests/run/switch.pyx b/tests/run/switch.pyx index 4781bd5e..91b5c647 100644 --- a/tests/run/switch.pyx +++ b/tests/run/switch.pyx @@ -1,111 +1,16 @@ -__doc__ = u""" ->>> switch_simple_py(1) -1 ->>> switch_simple_py(2) -2 ->>> switch_simple_py(3) -3 ->>> switch_simple_py(4) -8 ->>> switch_simple_py(5) -0 - ->>> switch_py(1) -1 ->>> switch_py(2) -2 ->>> switch_py(3) -3 ->>> switch_py(4) -4 ->>> switch_py(5) -4 ->>> switch_py(6) -0 ->>> switch_py(8) -4 ->>> switch_py(10) -10 ->>> switch_py(12) -12 ->>> switch_py(13) -0 - ->>> switch_simple_c(1) -1 ->>> switch_simple_c(2) -2 ->>> switch_simple_c(3) -3 ->>> switch_simple_c(4) -8 ->>> switch_simple_c(5) -0 - ->>> switch_c(1) -1 ->>> switch_c(2) -2 ->>> switch_c(3) -3 ->>> switch_c(4) -4 ->>> switch_c(5) -4 ->>> switch_c(6) -0 ->>> switch_c(8) -4 ->>> switch_c(10) -10 ->>> switch_c(12) -12 ->>> switch_c(13) -0 - ->>> switch_or(0) -0 ->>> switch_or(1) -1 ->>> switch_or(2) -1 ->>> switch_or(3) -1 ->>> switch_or(4) -0 - ->>> switch_in(0) -0 ->>> switch_in(1) -1 ->>> switch_in(2) -0 ->>> switch_in(7) -1 ->>> switch_in(8) -0 - ->>> switch_short(0) -0 ->>> switch_short(1) -1 ->>> switch_short(2) -2 ->>> switch_short(3) -0 - ->>> switch_off(0) -0 ->>> switch_off(1) -1 ->>> switch_off(2) -0 - ->>> switch_pass(1) -1 -""" - def switch_simple_py(x): + """ + >>> switch_simple_py(1) + 1 + >>> switch_simple_py(2) + 2 + >>> switch_simple_py(3) + 3 + >>> switch_simple_py(4) + 8 + >>> switch_simple_py(5) + 0 + """ if x == 1: return 1 elif 2 == x: @@ -119,6 +24,28 @@ def switch_simple_py(x): return -1 def switch_py(x): + """ + >>> switch_py(1) + 1 + >>> switch_py(2) + 2 + >>> switch_py(3) + 3 + >>> switch_py(4) + 4 + >>> switch_py(5) + 4 + >>> switch_py(6) + 0 + >>> switch_py(8) + 4 + >>> switch_py(10) + 10 + >>> switch_py(12) + 12 + >>> switch_py(13) + 0 + """ if x == 1: return 1 elif 2 == x: @@ -136,6 +63,18 @@ def switch_py(x): return -1 def switch_simple_c(int x): + """ + >>> switch_simple_c(1) + 1 + >>> switch_simple_c(2) + 2 + >>> switch_simple_c(3) + 3 + >>> switch_simple_c(4) + 8 + >>> switch_simple_c(5) + 0 + """ if x == 1: return 1 elif 2 == x: @@ -149,6 +88,28 @@ def switch_simple_c(int x): return -1 def switch_c(int x): + """ + >>> switch_c(1) + 1 + >>> switch_c(2) + 2 + >>> switch_c(3) + 3 + >>> switch_c(4) + 4 + >>> switch_c(5) + 4 + >>> switch_c(6) + 0 + >>> switch_c(8) + 4 + >>> switch_c(10) + 10 + >>> switch_c(12) + 12 + >>> switch_c(13) + 0 + """ if x == 1: return 1 elif 2 == x: @@ -166,6 +127,18 @@ def switch_c(int x): return -1 def switch_or(int x): + """ + >>> switch_or(0) + 0 + >>> switch_or(1) + 1 + >>> switch_or(2) + 1 + >>> switch_or(3) + 1 + >>> switch_or(4) + 0 + """ if x == 1 or x == 2 or x == 3: return 1 else: @@ -173,11 +146,33 @@ def switch_or(int x): return -1 def switch_in(int X): + """ + >>> switch_in(0) + 0 + >>> switch_in(1) + 1 + >>> switch_in(2) + 0 + >>> switch_in(7) + 1 + >>> switch_in(8) + 0 + """ if X in (1,3,5,7): return 1 return 0 def switch_short(int x): + """ + >>> switch_short(0) + 0 + >>> switch_short(1) + 1 + >>> switch_short(2) + 2 + >>> switch_short(3) + 0 + """ if x == 1: return 1 elif 2 == x: @@ -187,6 +182,14 @@ def switch_short(int x): return -1 def switch_off(int x): + """ + >>> switch_off(0) + 0 + >>> switch_off(1) + 1 + >>> switch_off(2) + 0 + """ if x == 1: return 1 else: @@ -194,6 +197,10 @@ def switch_off(int x): return -1 def switch_pass(int x): + """ + >>> switch_pass(1) + 1 + """ if x == 1: pass elif x == 2: diff --git a/tests/run/tandemstats.pyx b/tests/run/tandemstats.pyx index fa926e55..d076f904 100644 --- a/tests/run/tandemstats.pyx +++ b/tests/run/tandemstats.pyx @@ -1,12 +1,11 @@ -__doc__ = u""" ->>> result() == (99, 17*42, 17*42) -True -""" - cdef int i, j, k i = 17; j = 42; k = i * j if j > k: i = 88 else: i = 99; j = k def result(): + """ + >>> result() == (99, 17*42, 17*42) + True + """ return (i,j,k) diff --git a/tests/run/temp_alloc_T409.pyx b/tests/run/temp_alloc_T409.pyx index d7927230..823a0a5c 100644 --- a/tests/run/temp_alloc_T409.pyx +++ b/tests/run/temp_alloc_T409.pyx @@ -1,11 +1,10 @@ -__doc__ = """ - >>> foo() - ([0, 0], [0, 0]) -""" - # Extracted from sage/plot/plot3d/index_face_set.pyx:502 # Turns out to be a bug in implementation of PEP 3132 (Extended Iterable Unpacking) def foo(): + """ + >>> foo() + ([0, 0], [0, 0]) + """ a = b = [0,0] return a, b diff --git a/tests/run/temps_corner1.pyx b/tests/run/temps_corner1.pyx index 5d454ddc..da97e75c 100644 --- a/tests/run/temps_corner1.pyx +++ b/tests/run/temps_corner1.pyx @@ -1,8 +1,3 @@ -__doc__ = u""" - >>> B().coeffs_bitsize() - [2] -""" - cdef class A: def numerator(self): return self @@ -13,6 +8,10 @@ cdef int bitsize(A a): coeffs = [A()] class B: + """ + >>> B().coeffs_bitsize() + [2] + """ def coeffs_bitsize(self): r = [bitsize(c.numerator())+1 for c in coeffs] return r diff --git a/tests/run/ticket_124.pyx b/tests/run/ticket_124.pyx index 2a27bb9f..cd87168b 100644 --- a/tests/run/ticket_124.pyx +++ b/tests/run/ticket_124.pyx @@ -1,8 +1,8 @@ -__doc__ = u""" ->>> spam(dict(test=2)) -False -""" def spam(dict d): + """ + >>> spam(dict(test=2)) + False + """ for elm in d: return False return True diff --git a/tests/run/tuple.pyx b/tests/run/tuple.pyx index b7c5e051..71e939d4 100644 --- a/tests/run/tuple.pyx +++ b/tests/run/tuple.pyx @@ -1,24 +1,3 @@ -__doc__ = u""" - >>> f(1,2,3,4,5) - () - >>> g(1,2,3,4,5) - (2,) - >>> h(1,2,3,4,5) - (2, 3) - >>> j(1,2,3,4,5) - (2, 3, 4) - >>> k(1,2,3,4,5) - (2, 3, 4) - >>> l(1,2,3,4,5) - (17, 42, 88) - >>> tuple_none() - Traceback (most recent call last): - TypeError: 'NoneType' object is not iterable - >>> tuple_none_list() - Traceback (most recent call last): - TypeError: 'NoneType' object is not iterable -""" - import sys if sys.version_info < (2,5): __doc__ = __doc__.replace( @@ -26,21 +5,37 @@ if sys.version_info < (2,5): u'iteration over non-sequence\n >>> tuple_none_list()') def f(obj1, obj2, obj3, obj4, obj5): + """ + >>> f(1,2,3,4,5) + () + """ obj1 = () return obj1 def g(obj1, obj2, obj3, obj4, obj5): + """ + >>> g(1,2,3,4,5) + (2,) + """ obj1 = () obj1 = (obj2,) return obj1 def h(obj1, obj2, obj3, obj4, obj5): + """ + >>> h(1,2,3,4,5) + (2, 3) + """ obj1 = () obj1 = (obj2,) obj1 = obj2, obj3 return obj1 def j(obj1, obj2, obj3, obj4, obj5): + """ + >>> j(1,2,3,4,5) + (2, 3, 4) + """ obj1 = () obj1 = (obj2,) obj1 = obj2, obj3 @@ -48,6 +43,10 @@ def j(obj1, obj2, obj3, obj4, obj5): return obj1 def k(obj1, obj2, obj3, obj4, obj5): + """ + >>> k(1,2,3,4,5) + (2, 3, 4) + """ obj1 = () obj1 = (obj2,) obj1 = obj2, obj3 @@ -56,6 +55,10 @@ def k(obj1, obj2, obj3, obj4, obj5): return obj1 def l(obj1, obj2, obj3, obj4, obj5): + """ + >>> l(1,2,3,4,5) + (17, 42, 88) + """ obj1 = () obj1 = (obj2,) obj1 = obj2, obj3 @@ -65,8 +68,18 @@ def l(obj1, obj2, obj3, obj4, obj5): return obj1 def tuple_none(): + """ + >>> tuple_none() + Traceback (most recent call last): + TypeError: 'NoneType' object is not iterable + """ return tuple(None) def tuple_none_list(): + """ + >>> tuple_none_list() + Traceback (most recent call last): + TypeError: 'NoneType' object is not iterable + """ cdef list none = None return tuple(none) diff --git a/tests/run/tupleassign.pyx b/tests/run/tupleassign.pyx index 1a1a6052..875e70bd 100644 --- a/tests/run/tupleassign.pyx +++ b/tests/run/tupleassign.pyx @@ -1,108 +1,92 @@ -__doc__ = u""" ->>> assign3(l) -(1, 2, 3) ->>> assign3(t) -(1, 2, 3) ->>> assign3_typed(t) -(1, 2, 3) ->>> assign3_int(l) -(1, 2, 3) ->>> assign3_mixed1(l) -(1, 2, 3) ->>> assign3_mixed2(l) -(1, 2, 3) ->>> assign3_mixed3(l) -(1, 2, 3) - ->>> assign3_typed(l) -Traceback (most recent call last): -TypeError: Argument 't' has incorrect type (expected tuple, got list) - ->>> a,b,c = (1,) # doctest: +ELLIPSIS -Traceback (most recent call last): -ValueError: ... ->>> assign3((1,)) -Traceback (most recent call last): -ValueError: need more than 1 value to unpack ->>> assign3_typed((1,)) -Traceback (most recent call last): -ValueError: need more than 1 value to unpack - ->>> a,b,c = (1,2) # doctest: +ELLIPSIS -Traceback (most recent call last): -ValueError: ... ->>> assign3((1,2)) -Traceback (most recent call last): -ValueError: need more than 2 values to unpack ->>> assign3_typed((1,2)) -Traceback (most recent call last): -ValueError: need more than 2 values to unpack - ->>> a,b,c = (1,2,3,4) -Traceback (most recent call last): -ValueError: too many values to unpack ->>> assign3((1,2,3,4)) -Traceback (most recent call last): -ValueError: too many values to unpack ->>> assign3_typed((1,2,3,4)) -Traceback (most recent call last): -ValueError: too many values to unpack - ->>> a,b = 99,98 ->>> a,b = t -Traceback (most recent call last): -ValueError: too many values to unpack ->>> a,b -(99, 98) - ->>> test_overwrite(l) -(99, 98) ->>> test_overwrite(t) -(99, 98) - ->>> test_overwrite_int(l) -(99, 98) ->>> test_overwrite_int(t) -(99, 98) - ->>> test_overwrite_mixed(l) -(99, 98) ->>> test_overwrite_mixed(t) -(99, 98) - ->>> test_overwrite_mixed2(l) -(99, 98) ->>> test_overwrite_mixed2(t) -(99, 98) -""" - t = (1,2,3) l = [1,2,3] def assign3(t): + """ + >>> assign3(l) + (1, 2, 3) + >>> assign3(t) + (1, 2, 3) + >>> assign3((1,)) + Traceback (most recent call last): + ValueError: need more than 1 value to unpack + >>> assign3((1,2)) + Traceback (most recent call last): + ValueError: need more than 2 values to unpack + >>> assign3((1,2,3,4)) + Traceback (most recent call last): + ValueError: too many values to unpack + """ a,b,c = t return (a,b,c) def assign3_typed(tuple t): + """ + >>> assign3_typed(t) + (1, 2, 3) + >>> assign3_typed(l) + Traceback (most recent call last): + TypeError: Argument 't' has incorrect type (expected tuple, got list) + >>> a,b,c = (1,) # doctest: +ELLIPSIS + Traceback (most recent call last): + ValueError: ... + >>> assign3_typed((1,)) + Traceback (most recent call last): + ValueError: need more than 1 value to unpack + >>> a,b,c = (1,2) # doctest: +ELLIPSIS + Traceback (most recent call last): + ValueError: ... + >>> assign3_typed((1,2)) + Traceback (most recent call last): + ValueError: need more than 2 values to unpack + >>> a,b,c = (1,2,3,4) + Traceback (most recent call last): + ValueError: too many values to unpack + >>> assign3_typed((1,2,3,4)) + Traceback (most recent call last): + ValueError: too many values to unpack + >>> a,b = 99,98 + >>> a,b = t + Traceback (most recent call last): + ValueError: too many values to unpack + >>> a,b + (99, 98) + """ a,b,c = t return (a,b,c) def assign3_int(t): + """ + >>> assign3_int(l) + (1, 2, 3) + """ cdef int a,b,c a,b,c = t return (a,b,c) def assign3_mixed1(t): + """ + >>> assign3_mixed1(l) + (1, 2, 3) + """ cdef int a a,b,c = t return (a,b,c) def assign3_mixed2(t): + """ + >>> assign3_mixed2(l) + (1, 2, 3) + """ cdef int b a,b,c = t return (a,b,c) def assign3_mixed3(t): + """ + >>> assign3_mixed3(l) + (1, 2, 3) + """ cdef int c a,b,c = t return (a,b,c) @@ -113,6 +97,12 @@ def assign3_mixed4(t): return (a,b,c) def test_overwrite(t): + """ + >>> test_overwrite(l) + (99, 98) + >>> test_overwrite(t) + (99, 98) + """ a,b = 99,98 try: a,b = t @@ -121,6 +111,12 @@ def test_overwrite(t): return (a,b) def test_overwrite_int(t): + """ + >>> test_overwrite_int(l) + (99, 98) + >>> test_overwrite_int(t) + (99, 98) + """ cdef int a,b a,b = 99,98 try: @@ -130,6 +126,12 @@ def test_overwrite_int(t): return (a,b) def test_overwrite_mixed(t): + """ + >>> test_overwrite_mixed(l) + (99, 98) + >>> test_overwrite_mixed(t) + (99, 98) + """ cdef int b a,b = 99,98 try: @@ -139,6 +141,12 @@ def test_overwrite_mixed(t): return (a,b) def test_overwrite_mixed2(t): + """ + >>> test_overwrite_mixed2(l) + (99, 98) + >>> test_overwrite_mixed2(t) + (99, 98) + """ cdef int a a,b = 99,98 try: diff --git a/tests/run/tuplereassign.pyx b/tests/run/tuplereassign.pyx index 2f64a231..7bf28284 100644 --- a/tests/run/tuplereassign.pyx +++ b/tests/run/tuplereassign.pyx @@ -1,27 +1,32 @@ -__doc__ = u""" +def test1(t): + """ >>> test1( (1,2,3) ) 1 - >>> test3( (1,2,3) ) - 3 - >>> test( (1,2,3) ) - 3 - >>> testnonsense() # doctest: +ELLIPSIS - Traceback (most recent call last): - TypeError: ... -""" - -def test1(t): + """ t,a,b = t return t def test3(t): + """ + >>> test3( (1,2,3) ) + 3 + """ a,b,t = t return t def test(t): + """ + >>> test( (1,2,3) ) + 3 + """ t,t,t = t return t def testnonsense(): + """ + >>> testnonsense() # doctest: +ELLIPSIS + Traceback (most recent call last): + TypeError: ... + """ t,t,t = 1*2 return t diff --git a/tests/run/type_inference.pyx b/tests/run/type_inference.pyx index f8ec4521..28592a3d 100644 --- a/tests/run/type_inference.pyx +++ b/tests/run/type_inference.pyx @@ -1,17 +1,12 @@ # cython: infer_types = True -__doc__ = u""" - >>> simple() - >>> multiple_assignments() - >>> arithmatic() - >>> cascade() - >>> increment() - >>> loop() -""" from cython cimport typeof def simple(): + """ + >>> simple() + """ i = 3 assert typeof(i) == "long", typeof(i) x = 1.41 @@ -32,6 +27,9 @@ def simple(): assert typeof(t) == "tuple object", typeof(t) def multiple_assignments(): + """ + >>> multiple_assignments() + """ a = 3 a = 4 a = 5 @@ -46,6 +44,9 @@ def multiple_assignments(): assert typeof(c) == "Python object" def arithmatic(): + """ + >>> arithmatic() + """ a = 1 + 2 assert typeof(a) == "long" b = 1 + 1.5 @@ -56,6 +57,9 @@ def arithmatic(): assert typeof(d) == "Python object" def cascade(): + """ + >>> cascade() + """ a = 1.0 b = a + 2 c = b + 3 @@ -74,11 +78,17 @@ def cascaded_assignment(): assert typeof(e) == "double" def increment(): + """ + >>> increment() + """ a = 5 a += 1 assert typeof(a) == "long" def loop(): + """ + >>> loop() + """ for a in range(10): pass assert typeof(a) == "long" diff --git a/tests/run/type_slots_int_long_T287.pyx b/tests/run/type_slots_int_long_T287.pyx index 9631ef82..22062a64 100644 --- a/tests/run/type_slots_int_long_T287.pyx +++ b/tests/run/type_slots_int_long_T287.pyx @@ -10,34 +10,37 @@ __doc__ = u""" >>> print( "%d" % IntLongC() ) 3 ->>> getint( Int() ) -2 ->>> getint( Long() ) -3 ->>> getint( IntLongA() ) -2 ->>> getint( IntLongB() ) -2 ->>> getint( IntLongC() ) -3 - ->>> getlong( Int() ) -2 ->>> getlong( Long() ) -3 ->>> getlong( IntLongA() ) -2 ->>> getlong( IntLongB() ) -2 ->>> getlong( IntLongC() ) -3 """ def getint(int i): + """ + >>> getint( Int() ) + 2 + >>> getint( Long() ) + 3 + >>> getint( IntLongA() ) + 2 + >>> getint( IntLongB() ) + 2 + >>> getint( IntLongC() ) + 3 + """ return i def getlong(long long i): + """ + >>> getlong( Int() ) + 2 + >>> getlong( Long() ) + 3 + >>> getlong( IntLongA() ) + 2 + >>> getlong( IntLongB() ) + 2 + >>> getlong( IntLongC() ) + 3 + """ return i diff --git a/tests/run/typed_slice.pyx b/tests/run/typed_slice.pyx index c5301014..8161c362 100644 --- a/tests/run/typed_slice.pyx +++ b/tests/run/typed_slice.pyx @@ -1,34 +1,8 @@ -__doc__ = u""" - >>> l = [1,2,3,4] - - >>> slice_list(l) - [2, 3] - >>> slice_tuple(tuple(l)) - (2, 3) - - >>> l2 = l[:] - >>> slice_list_assign_list(l2) - [1, 1, 2, 3, 4, 4] - - >>> l2 = l[:] - >>> slice_list_assign_tuple(l2) - [1, 1, 2, 3, 4, 4] - - >>> l2 = l[:] - >>> slice_list_assign(l2, (1,2,3,4)) - [1, 1, 2, 3, 4, 4] - - >>> l2 = l[:] - >>> slice_list_assign(l2, dict(zip(l,l))) - [1, 1, 2, 3, 4, 4] - - >>> print("%s" % slice_charp('abcdefg')) - bc - >>> print("%s" % slice_charp_repeat('abcdefg')) - cd -""" - def slice_list(list l): + """ + >>> slice_list([1,2,3,4]) + [2, 3] + """ return l[1:3] def slice_list_copy(list l): @@ -36,27 +10,63 @@ def slice_list_copy(list l): return retlist def slice_tuple(tuple t): + """ + >>> l = [1,2,3,4] + >>> slice_tuple(tuple(l)) + (2, 3) + """ return t[1:3] def slice_list_assign_list(list l): + """ + >>> l = [1,2,3,4] + >>> l2 = l[:] + >>> slice_list_assign_list(l2) + [1, 1, 2, 3, 4, 4] + """ l[1:3] = [1,2,3,4] return l def slice_list_assign_tuple(list l): + """ + >>> l = [1,2,3,4] + >>> l2 = l[:] + >>> slice_list_assign_tuple(l2) + [1, 1, 2, 3, 4, 4] + """ l[1:3] = (1,2,3,4) return l def slice_list_assign(list l, value): + """ + >>> l = [1,2,3,4] + >>> l2 = l[:] + >>> slice_list_assign(l2, (1,2,3,4)) + [1, 1, 2, 3, 4, 4] + >>> l2 = l[:] + >>> slice_list_assign(l2, dict(zip(l,l))) + [1, 1, 2, 3, 4, 4] + """ l[1:3] = value return l def slice_charp(py_string_arg): + """ + >>> l = [1,2,3,4] + >>> print("%s" % slice_charp('abcdefg')) + bc + """ cdef bytes py_string = py_string_arg.encode(u'ASCII') cdef char* s = py_string return s[1:3].decode(u'ASCII') def slice_charp_repeat(py_string_arg): + """ + >>> l = [1,2,3,4] + >>> print("%s" % slice_charp_repeat('abcdefg')) + cd + """ cdef bytes py_string = py_string_arg.encode(u'ASCII') cdef char* s = py_string cdef bytes slice_val = s[1:6] diff --git a/tests/run/typedfieldbug_T303.pyx b/tests/run/typedfieldbug_T303.pyx index 4b19ef1f..8a64444f 100644 --- a/tests/run/typedfieldbug_T303.pyx +++ b/tests/run/typedfieldbug_T303.pyx @@ -1,19 +1,3 @@ -__doc__ = u""" ->>> f() -42.0 -42.0 ->>> global_vars(12.0) -12.0 12.0 ->>> readonly() -Traceback (most recent call last): - ... -TypeError: readonly attribute ->>> longdouble_access() -Traceback (most recent call last): - ... -SystemError: bad memberdescr type -""" - import sys if sys.version_info[0] >= 3: __doc__ = __doc__.replace(u'TypeError:', u'AttributeError:') @@ -38,22 +22,42 @@ cdef class MyClass: self.float_isreally_longdouble = 42.0 def global_vars(x): + """ + >>> global_vars(12.0) + 12.0 12.0 + """ global global_tdef, global_double global_tdef = x global_double = x print global_tdef, global_double def f(): + """ + >>> f() + 42.0 + 42.0 + """ c = MyClass() print c.actual_double print c.float_isreally_double def longdouble_access(): + """ + >>> longdouble_access() + Traceback (most recent call last): + ... + SystemError: bad memberdescr type + """ c = MyClass() print c.float_isreally_longdouble def readonly(): + """ + >>> readonly() + Traceback (most recent call last): + ... + TypeError: readonly attribute + """ c = MyClass() c.actual_double = 3 - diff --git a/tests/run/typeof.pyx b/tests/run/typeof.pyx index 52a14d72..ced4c871 100644 --- a/tests/run/typeof.pyx +++ b/tests/run/typeof.pyx @@ -1,22 +1,3 @@ -__doc__ = u""" - >>> simple() - int - long - long long - int * - int ** - A - B - X - Python object - - >>> expression() - double - double complex - int - unsigned int -""" - from cython cimport typeof cdef class A: @@ -30,6 +11,18 @@ cdef struct X: double complex b def simple(): + """ + >>> simple() + int + long + long long + int * + int ** + A + B + X + Python object + """ cdef int i = 0 cdef long l = 0 cdef long long ll = 0 @@ -50,6 +43,13 @@ def simple(): used = i, l, ll, iptr, iptrptr, a, b, x def expression(): + """ + >>> expression() + double + double complex + int + unsigned int + """ cdef X x = X(a=1, b=2) cdef X *xptr = &x cdef short s = 0 diff --git a/tests/run/unop.pyx b/tests/run/unop.pyx index 21609a78..db16863d 100644 --- a/tests/run/unop.pyx +++ b/tests/run/unop.pyx @@ -1,9 +1,8 @@ -__doc__ = u""" +def f(obj1, obj2, obj3): + """ >>> f(1, 2, 3) (-3, -4, 1) -""" - -def f(obj1, obj2, obj3): + """ cdef int bool1, bool2 cdef int int1, int2 cdef char *str1 diff --git a/tests/run/unpack.pyx b/tests/run/unpack.pyx index fd163926..3d65f029 100644 --- a/tests/run/unpack.pyx +++ b/tests/run/unpack.pyx @@ -1,9 +1,8 @@ -__doc__ = u""" +def f(obj1, obj2, obj3, obj4, obj5): + """ >>> f(1, (2,), (3,4,5), (6,(7,(8,9))), 0) (8, 9, (8, 9), (6, (7, (8, 9))), 0) -""" - -def f(obj1, obj2, obj3, obj4, obj5): + """ obj1, = obj2 obj1, obj2 = obj2 + obj2 obj1, obj2, obj3 = obj3 diff --git a/tests/run/unpacklistcomp.pyx b/tests/run/unpacklistcomp.pyx index f785deb6..1e13db14 100644 --- a/tests/run/unpacklistcomp.pyx +++ b/tests/run/unpacklistcomp.pyx @@ -1,31 +1,32 @@ -__doc__ = u""" +def unpack_normal(l): + """ >>> unpack_normal([1,2]) (1, 2) >>> unpack_normal([1,2,3]) # doctest: +ELLIPSIS Traceback (most recent call last): ValueError: ... + """ + a,b = l + return a,b +def unpack_comp(l): + """ >>> unpack_comp([1,2]) (1, 2) >>> unpack_comp([1,2,3]) # doctest: +ELLIPSIS Traceback (most recent call last): ValueError: ... + """ + a,b = [ n for n in l ] + return a,b +def unpack_expr(l): + """ >>> unpack_expr([1,2]) (1, 4) >>> unpack_expr([1,2,3]) # doctest: +ELLIPSIS Traceback (most recent call last): ValueError: ... -""" - -def unpack_normal(l): - a,b = l - return a,b - -def unpack_comp(l): - a,b = [ n for n in l ] - return a,b - -def unpack_expr(l): + """ a,b = [ n*n for n in l ] return a,b diff --git a/tests/run/varargcall.pyx b/tests/run/varargcall.pyx index ee70ce57..79af8080 100644 --- a/tests/run/varargcall.pyx +++ b/tests/run/varargcall.pyx @@ -1,10 +1,9 @@ -__doc__ = u""" - >>> swallow() -""" - cdef grail(char *blarg, ...): pass def swallow(): + """ + >>> swallow() + """ grail("spam") grail("spam", 42) diff --git a/tests/run/varargdecl.pyx b/tests/run/varargdecl.pyx index 9e624cdf..1a46fceb 100644 --- a/tests/run/varargdecl.pyx +++ b/tests/run/varargdecl.pyx @@ -1,10 +1,9 @@ -__doc__ = u""" ->>> test() -""" - cdef grail(char *blarg, ...): pass def test(): + """ + >>> test() + """ grail(b"test") grail(b"test", b"toast") diff --git a/tests/run/watts1.pyx b/tests/run/watts1.pyx index 7025915f..62ff80e5 100644 --- a/tests/run/watts1.pyx +++ b/tests/run/watts1.pyx @@ -1,10 +1,8 @@ -__doc__ = u""" ->>> test() == 55 + 66 -True -""" - - def test(): + """ + >>> test() == 55 + 66 + True + """ cdef int a,b foo=(55,66) a,b=foo diff --git a/tests/run/withnogil.pyx b/tests/run/withnogil.pyx index 8d1f8d36..55b7896a 100644 --- a/tests/run/withnogil.pyx +++ b/tests/run/withnogil.pyx @@ -1,11 +1,8 @@ -__doc__ = u""" +def f(x): + """ >>> f(1) (1, 17) - >>> g() - 1 -""" - -def f(x): + """ cdef int y z = 42 with nogil: @@ -14,6 +11,10 @@ def f(x): return z,y def g(): + """ + >>> g() + 1 + """ with nogil: h() return 1 diff --git a/tests/run/withstat.pyx b/tests/run/withstat.pyx index e31e7db8..2d5eda51 100644 --- a/tests/run/withstat.pyx +++ b/tests/run/withstat.pyx @@ -1,42 +1,5 @@ from __future__ import with_statement -__doc__ = u""" ->>> no_as() -enter -hello -exit ->>> basic() -enter -value -exit ->>> with_return() -enter -exit ->>> with_pass() -enter -exit ->>> with_exception(None) -enter -value -exit -outer except ->>> with_exception(True) -enter -value -exit ->>> multitarget() -enter -1 2 3 4 5 -exit ->>> tupletarget() -enter -(1, 2, (3, (4, 5))) -exit ->>> typed() -enter -10 -exit -""" import sys if sys.version_info < (2,5): @@ -63,24 +26,57 @@ class ContextManager(object): return self.value def no_as(): + """ + >>> no_as() + enter + hello + exit + """ with ContextManager(u"value"): print u"hello" def basic(): + """ + >>> basic() + enter + value + exit + """ with ContextManager(u"value") as x: print x def with_pass(): + """ + >>> with_pass() + enter + exit + """ with ContextManager(u"value") as x: pass def with_return(): + """ + >>> with_return() + enter + exit + """ with ContextManager(u"value") as x: # FIXME: DISABLED - currently crashes!! # return x pass def with_exception(exit_ret): + """ + >>> with_exception(None) + enter + value + exit + outer except + >>> with_exception(True) + enter + value + exit + """ try: with ContextManager(u"value", exit_ret=exit_ret) as value: print value @@ -89,14 +85,32 @@ def with_exception(exit_ret): print u"outer except" def multitarget(): + """ + >>> multitarget() + enter + 1 2 3 4 5 + exit + """ with ContextManager((1, 2, (3, (4, 5)))) as (a, b, (c, (d, e))): print a, b, c, d, e def tupletarget(): + """ + >>> tupletarget() + enter + (1, 2, (3, (4, 5))) + exit + """ with ContextManager((1, 2, (3, (4, 5)))) as t: print t def typed(): + """ + >>> typed() + enter + 10 + exit + """ cdef unsigned char i c = ContextManager(255) with c as i: -- 2.26.2