Home | History | Annotate | Download | only in Modules
      1 /*
      2  * C Extension module to test Python interpreter C APIs.
      3  *
      4  * The 'test_*' functions exported by this module are run as part of the
      5  * standard Python regression test, via Lib/test/test_capi.py.
      6  */
      7 
      8 #include "Python.h"
      9 #include <float.h>
     10 #include "structmember.h"
     11 #include "datetime.h"
     12 #include "marshal.h"
     13 
     14 #ifdef WITH_THREAD
     15 #include "pythread.h"
     16 #endif /* WITH_THREAD */
     17 static PyObject *TestError;     /* set to exception object in init */
     18 
     19 /* Raise TestError with test_name + ": " + msg, and return NULL. */
     20 
     21 static PyObject *
     22 raiseTestError(const char* test_name, const char* msg)
     23 {
     24     char buf[2048];
     25 
     26     if (strlen(test_name) + strlen(msg) > sizeof(buf) - 50)
     27         PyErr_SetString(TestError, "internal error msg too large");
     28     else {
     29         PyOS_snprintf(buf, sizeof(buf), "%s: %s", test_name, msg);
     30         PyErr_SetString(TestError, buf);
     31     }
     32     return NULL;
     33 }
     34 
     35 /* Test #defines from pyconfig.h (particularly the SIZEOF_* defines).
     36 
     37    The ones derived from autoconf on the UNIX-like OSes can be relied
     38    upon (in the absence of sloppy cross-compiling), but the Windows
     39    platforms have these hardcoded.  Better safe than sorry.
     40 */
     41 static PyObject*
     42 sizeof_error(const char* fatname, const char* typname,
     43     int expected, int got)
     44 {
     45     char buf[1024];
     46     PyOS_snprintf(buf, sizeof(buf),
     47         "%.200s #define == %d but sizeof(%.200s) == %d",
     48         fatname, expected, typname, got);
     49     PyErr_SetString(TestError, buf);
     50     return (PyObject*)NULL;
     51 }
     52 
     53 static PyObject*
     54 test_config(PyObject *self)
     55 {
     56 #define CHECK_SIZEOF(FATNAME, TYPE) \
     57             if (FATNAME != sizeof(TYPE)) \
     58                 return sizeof_error(#FATNAME, #TYPE, FATNAME, sizeof(TYPE))
     59 
     60     CHECK_SIZEOF(SIZEOF_SHORT, short);
     61     CHECK_SIZEOF(SIZEOF_INT, int);
     62     CHECK_SIZEOF(SIZEOF_LONG, long);
     63     CHECK_SIZEOF(SIZEOF_VOID_P, void*);
     64     CHECK_SIZEOF(SIZEOF_TIME_T, time_t);
     65 #ifdef HAVE_LONG_LONG
     66     CHECK_SIZEOF(SIZEOF_LONG_LONG, PY_LONG_LONG);
     67 #endif
     68 
     69 #undef CHECK_SIZEOF
     70 
     71     Py_INCREF(Py_None);
     72     return Py_None;
     73 }
     74 
     75 static PyObject*
     76 test_list_api(PyObject *self)
     77 {
     78     PyObject* list;
     79     int i;
     80 
     81     /* SF bug 132008:  PyList_Reverse segfaults */
     82 #define NLIST 30
     83     list = PyList_New(NLIST);
     84     if (list == (PyObject*)NULL)
     85         return (PyObject*)NULL;
     86     /* list = range(NLIST) */
     87     for (i = 0; i < NLIST; ++i) {
     88         PyObject* anint = PyInt_FromLong(i);
     89         if (anint == (PyObject*)NULL) {
     90             Py_DECREF(list);
     91             return (PyObject*)NULL;
     92         }
     93         PyList_SET_ITEM(list, i, anint);
     94     }
     95     /* list.reverse(), via PyList_Reverse() */
     96     i = PyList_Reverse(list);   /* should not blow up! */
     97     if (i != 0) {
     98         Py_DECREF(list);
     99         return (PyObject*)NULL;
    100     }
    101     /* Check that list == range(29, -1, -1) now */
    102     for (i = 0; i < NLIST; ++i) {
    103         PyObject* anint = PyList_GET_ITEM(list, i);
    104         if (PyInt_AS_LONG(anint) != NLIST-1-i) {
    105             PyErr_SetString(TestError,
    106                             "test_list_api: reverse screwed up");
    107             Py_DECREF(list);
    108             return (PyObject*)NULL;
    109         }
    110     }
    111     Py_DECREF(list);
    112 #undef NLIST
    113 
    114     Py_INCREF(Py_None);
    115     return Py_None;
    116 }
    117 
    118 static int
    119 test_dict_inner(int count)
    120 {
    121     Py_ssize_t pos = 0, iterations = 0;
    122     int i;
    123     PyObject *dict = PyDict_New();
    124     PyObject *v, *k;
    125 
    126     if (dict == NULL)
    127         return -1;
    128 
    129     for (i = 0; i < count; i++) {
    130         v = PyInt_FromLong(i);
    131         PyDict_SetItem(dict, v, v);
    132         Py_DECREF(v);
    133     }
    134 
    135     while (PyDict_Next(dict, &pos, &k, &v)) {
    136         PyObject *o;
    137         iterations++;
    138 
    139         i = PyInt_AS_LONG(v) + 1;
    140         o = PyInt_FromLong(i);
    141         if (o == NULL)
    142             return -1;
    143         if (PyDict_SetItem(dict, k, o) < 0) {
    144             Py_DECREF(o);
    145             return -1;
    146         }
    147         Py_DECREF(o);
    148     }
    149 
    150     Py_DECREF(dict);
    151 
    152     if (iterations != count) {
    153         PyErr_SetString(
    154             TestError,
    155             "test_dict_iteration: dict iteration went wrong ");
    156         return -1;
    157     } else {
    158         return 0;
    159     }
    160 }
    161 
    162 static PyObject*
    163 test_dict_iteration(PyObject* self)
    164 {
    165     int i;
    166 
    167     for (i = 0; i < 200; i++) {
    168         if (test_dict_inner(i) < 0) {
    169             return NULL;
    170         }
    171     }
    172 
    173     Py_INCREF(Py_None);
    174     return Py_None;
    175 }
    176 
    177 
    178 /* Issue #4701: Check that PyObject_Hash implicitly calls
    179  *   PyType_Ready if it hasn't already been called
    180  */
    181 static PyTypeObject _HashInheritanceTester_Type = {
    182     PyObject_HEAD_INIT(NULL)
    183     0,                          /* Number of items for varobject */
    184     "hashinheritancetester",            /* Name of this type */
    185     sizeof(PyObject),           /* Basic object size */
    186     0,                          /* Item size for varobject */
    187     (destructor)PyObject_Del, /* tp_dealloc */
    188     0,                          /* tp_print */
    189     0,                          /* tp_getattr */
    190     0,                          /* tp_setattr */
    191     0,                          /* tp_compare */
    192     0,                          /* tp_repr */
    193     0,                          /* tp_as_number */
    194     0,                          /* tp_as_sequence */
    195     0,                          /* tp_as_mapping */
    196     0,                          /* tp_hash */
    197     0,                          /* tp_call */
    198     0,                          /* tp_str */
    199     PyObject_GenericGetAttr,  /* tp_getattro */
    200     0,                          /* tp_setattro */
    201     0,                          /* tp_as_buffer */
    202     Py_TPFLAGS_DEFAULT,         /* tp_flags */
    203     0,                          /* tp_doc */
    204     0,                          /* tp_traverse */
    205     0,                          /* tp_clear */
    206     0,                          /* tp_richcompare */
    207     0,                          /* tp_weaklistoffset */
    208     0,                          /* tp_iter */
    209     0,                          /* tp_iternext */
    210     0,                          /* tp_methods */
    211     0,                          /* tp_members */
    212     0,                          /* tp_getset */
    213     0,                          /* tp_base */
    214     0,                          /* tp_dict */
    215     0,                          /* tp_descr_get */
    216     0,                          /* tp_descr_set */
    217     0,                          /* tp_dictoffset */
    218     0,                          /* tp_init */
    219     0,                          /* tp_alloc */
    220     PyType_GenericNew,                  /* tp_new */
    221 };
    222 
    223 static PyObject*
    224 test_lazy_hash_inheritance(PyObject* self)
    225 {
    226     PyTypeObject *type;
    227     PyObject *obj;
    228     long hash;
    229 
    230     type = &_HashInheritanceTester_Type;
    231 
    232     if (type->tp_dict != NULL)
    233         /* The type has already been initialized. This probably means
    234            -R is being used. */
    235         Py_RETURN_NONE;
    236 
    237 
    238     obj = PyObject_New(PyObject, type);
    239     if (obj == NULL) {
    240         PyErr_Clear();
    241         PyErr_SetString(
    242             TestError,
    243             "test_lazy_hash_inheritance: failed to create object");
    244         return NULL;
    245     }
    246 
    247     if (type->tp_dict != NULL) {
    248         PyErr_SetString(
    249             TestError,
    250             "test_lazy_hash_inheritance: type initialised too soon");
    251         Py_DECREF(obj);
    252         return NULL;
    253     }
    254 
    255     hash = PyObject_Hash(obj);
    256     if ((hash == -1) && PyErr_Occurred()) {
    257         PyErr_Clear();
    258         PyErr_SetString(
    259             TestError,
    260             "test_lazy_hash_inheritance: could not hash object");
    261         Py_DECREF(obj);
    262         return NULL;
    263     }
    264 
    265     if (type->tp_dict == NULL) {
    266         PyErr_SetString(
    267             TestError,
    268             "test_lazy_hash_inheritance: type not initialised by hash()");
    269         Py_DECREF(obj);
    270         return NULL;
    271     }
    272 
    273     if (type->tp_hash != PyType_Type.tp_hash) {
    274         PyErr_SetString(
    275             TestError,
    276             "test_lazy_hash_inheritance: unexpected hash function");
    277         Py_DECREF(obj);
    278         return NULL;
    279     }
    280 
    281     Py_DECREF(obj);
    282 
    283     Py_RETURN_NONE;
    284 }
    285 
    286 
    287 /* Issue #7385: Check that memoryview() does not crash
    288  *   when bf_getbuffer returns an error
    289  */
    290 
    291 static int
    292 broken_buffer_getbuffer(PyObject *self, Py_buffer *view, int flags)
    293 {
    294     PyErr_SetString(
    295         TestError,
    296         "test_broken_memoryview: expected error in bf_getbuffer");
    297     return -1;
    298 }
    299 
    300 static PyBufferProcs memoryviewtester_as_buffer = {
    301     0,          /* bf_getreadbuffer */
    302     0,          /* bf_getwritebuffer */
    303     0,          /* bf_getsegcount */
    304     0,          /* bf_getcharbuffer */
    305     (getbufferproc)broken_buffer_getbuffer,     /* bf_getbuffer */
    306     0,          /* bf_releasebuffer */
    307 };
    308 
    309 static PyTypeObject _MemoryViewTester_Type = {
    310     PyObject_HEAD_INIT(NULL)
    311     0,                          /* Number of items for varobject */
    312     "memoryviewtester",         /* Name of this type */
    313     sizeof(PyObject),           /* Basic object size */
    314     0,                          /* Item size for varobject */
    315     (destructor)PyObject_Del, /* tp_dealloc */
    316     0,                          /* tp_print */
    317     0,                          /* tp_getattr */
    318     0,                          /* tp_setattr */
    319     0,                          /* tp_compare */
    320     0,                          /* tp_repr */
    321     0,                          /* tp_as_number */
    322     0,                          /* tp_as_sequence */
    323     0,                          /* tp_as_mapping */
    324     0,                          /* tp_hash */
    325     0,                          /* tp_call */
    326     0,                          /* tp_str */
    327     PyObject_GenericGetAttr,  /* tp_getattro */
    328     0,                          /* tp_setattro */
    329     &memoryviewtester_as_buffer,                        /* tp_as_buffer */
    330     Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_NEWBUFFER,     /* tp_flags */
    331     0,                          /* tp_doc */
    332     0,                          /* tp_traverse */
    333     0,                          /* tp_clear */
    334     0,                          /* tp_richcompare */
    335     0,                          /* tp_weaklistoffset */
    336     0,                          /* tp_iter */
    337     0,                          /* tp_iternext */
    338     0,                          /* tp_methods */
    339     0,                          /* tp_members */
    340     0,                          /* tp_getset */
    341     0,                          /* tp_base */
    342     0,                          /* tp_dict */
    343     0,                          /* tp_descr_get */
    344     0,                          /* tp_descr_set */
    345     0,                          /* tp_dictoffset */
    346     0,                          /* tp_init */
    347     0,                          /* tp_alloc */
    348     PyType_GenericNew,                  /* tp_new */
    349 };
    350 
    351 static PyObject*
    352 test_broken_memoryview(PyObject* self)
    353 {
    354     PyObject *obj = PyObject_New(PyObject, &_MemoryViewTester_Type);
    355     PyObject *res;
    356 
    357     if (obj == NULL) {
    358         PyErr_Clear();
    359         PyErr_SetString(
    360             TestError,
    361             "test_broken_memoryview: failed to create object");
    362         return NULL;
    363     }
    364 
    365     res = PyMemoryView_FromObject(obj);
    366     if (res || !PyErr_Occurred()){
    367         PyErr_SetString(
    368             TestError,
    369             "test_broken_memoryview: memoryview() didn't raise an Exception");
    370         Py_XDECREF(res);
    371         Py_DECREF(obj);
    372         return NULL;
    373     }
    374 
    375     PyErr_Clear();
    376     Py_DECREF(obj);
    377     Py_RETURN_NONE;
    378 }
    379 
    380 static PyObject *
    381 test_to_contiguous(PyObject* self, PyObject *noargs)
    382 {
    383     int data[9] = {0, -1, 1, -1, 2, -1,  3, -1, 4};
    384     int result[5];
    385     Py_ssize_t itemsize = sizeof(int);
    386     Py_ssize_t shape = 5;
    387     Py_ssize_t strides = 2 * itemsize;
    388     Py_buffer view = {
    389         data,
    390         NULL,
    391         5 * itemsize,
    392         itemsize,
    393         1,
    394         1,
    395         NULL,
    396         &shape,
    397         &strides,
    398         NULL,
    399         {0, 0},
    400         NULL
    401     };
    402     int i;
    403 
    404     PyBuffer_ToContiguous(result, &view, view.len, 'C');
    405     for (i = 0; i < 5; i++) {
    406         if (result[i] != i) {
    407             PyErr_SetString(TestError,
    408                 "test_to_contiguous: incorrect result");
    409             return NULL;
    410         }
    411     }
    412 
    413     view.buf = &data[8];
    414     view.strides[0] = -2 * itemsize;
    415 
    416     PyBuffer_ToContiguous(result, &view, view.len, 'C');
    417     for (i = 0; i < 5; i++) {
    418         if (result[i] != 4-i) {
    419             PyErr_SetString(TestError,
    420                 "test_to_contiguous: incorrect result");
    421             return NULL;
    422         }
    423     }
    424 
    425     Py_RETURN_NONE;
    426 }
    427 
    428 static PyObject *
    429 test_from_contiguous(PyObject* self, PyObject *noargs)
    430 {
    431     int data[9] = {-1,-1,-1,-1,-1,-1,-1,-1,-1};
    432     int init[5] = {0, 1, 2, 3, 4};
    433     Py_ssize_t itemsize = sizeof(int);
    434     Py_ssize_t shape = 5;
    435     Py_ssize_t strides = 2 * itemsize;
    436     Py_buffer view = {
    437         data,
    438         NULL,
    439         5 * itemsize,
    440         itemsize,
    441         1,
    442         1,
    443         NULL,
    444         &shape,
    445         &strides,
    446         NULL,
    447         {0, 0},
    448         NULL
    449     };
    450     int *ptr;
    451     int i;
    452 
    453     PyBuffer_FromContiguous(&view, init, view.len, 'C');
    454     ptr = view.buf;
    455     for (i = 0; i < 5; i++) {
    456         if (ptr[2*i] != i) {
    457             PyErr_SetString(TestError,
    458                 "test_from_contiguous: incorrect result");
    459             return NULL;
    460         }
    461     }
    462 
    463     view.buf = &data[8];
    464     view.strides[0] = -2 * itemsize;
    465 
    466     PyBuffer_FromContiguous(&view, init, view.len, 'C');
    467     ptr = view.buf;
    468     for (i = 0; i < 5; i++) {
    469         if (*(ptr-2*i) != i) {
    470             PyErr_SetString(TestError,
    471                 "test_from_contiguous: incorrect result");
    472             return NULL;
    473         }
    474     }
    475 
    476     Py_RETURN_NONE;
    477 }
    478 
    479 
    480 /* Tests of PyLong_{As, From}{Unsigned,}Long(), and (#ifdef HAVE_LONG_LONG)
    481    PyLong_{As, From}{Unsigned,}LongLong().
    482 
    483    Note that the meat of the test is contained in testcapi_long.h.
    484    This is revolting, but delicate code duplication is worse:  "almost
    485    exactly the same" code is needed to test PY_LONG_LONG, but the ubiquitous
    486    dependence on type names makes it impossible to use a parameterized
    487    function.  A giant macro would be even worse than this.  A C++ template
    488    would be perfect.
    489 
    490    The "report an error" functions are deliberately not part of the #include
    491    file:  if the test fails, you can set a breakpoint in the appropriate
    492    error function directly, and crawl back from there in the debugger.
    493 */
    494 
    495 #define UNBIND(X)  Py_DECREF(X); (X) = NULL
    496 
    497 static PyObject *
    498 raise_test_long_error(const char* msg)
    499 {
    500     return raiseTestError("test_long_api", msg);
    501 }
    502 
    503 #define TESTNAME        test_long_api_inner
    504 #define TYPENAME        long
    505 #define F_S_TO_PY       PyLong_FromLong
    506 #define F_PY_TO_S       PyLong_AsLong
    507 #define F_U_TO_PY       PyLong_FromUnsignedLong
    508 #define F_PY_TO_U       PyLong_AsUnsignedLong
    509 
    510 #include "testcapi_long.h"
    511 
    512 static PyObject *
    513 test_long_api(PyObject* self)
    514 {
    515     return TESTNAME(raise_test_long_error);
    516 }
    517 
    518 #undef TESTNAME
    519 #undef TYPENAME
    520 #undef F_S_TO_PY
    521 #undef F_PY_TO_S
    522 #undef F_U_TO_PY
    523 #undef F_PY_TO_U
    524 
    525 #ifdef HAVE_LONG_LONG
    526 
    527 static PyObject *
    528 raise_test_longlong_error(const char* msg)
    529 {
    530     return raiseTestError("test_longlong_api", msg);
    531 }
    532 
    533 #define TESTNAME        test_longlong_api_inner
    534 #define TYPENAME        PY_LONG_LONG
    535 #define F_S_TO_PY       PyLong_FromLongLong
    536 #define F_PY_TO_S       PyLong_AsLongLong
    537 #define F_U_TO_PY       PyLong_FromUnsignedLongLong
    538 #define F_PY_TO_U       PyLong_AsUnsignedLongLong
    539 
    540 #include "testcapi_long.h"
    541 
    542 static PyObject *
    543 test_longlong_api(PyObject* self, PyObject *args)
    544 {
    545     return TESTNAME(raise_test_longlong_error);
    546 }
    547 
    548 #undef TESTNAME
    549 #undef TYPENAME
    550 #undef F_S_TO_PY
    551 #undef F_PY_TO_S
    552 #undef F_U_TO_PY
    553 #undef F_PY_TO_U
    554 
    555 /* Test the PyLong_AsLongAndOverflow API. General conversion to PY_LONG
    556    is tested by test_long_api_inner. This test will concentrate on proper
    557    handling of overflow.
    558 */
    559 
    560 static PyObject *
    561 test_long_and_overflow(PyObject *self)
    562 {
    563     PyObject *num, *one, *temp;
    564     long value;
    565     int overflow;
    566 
    567     /* Test that overflow is set properly for a large value. */
    568     /* num is a number larger than LONG_MAX even on 64-bit platforms */
    569     num = PyLong_FromString("FFFFFFFFFFFFFFFFFFFFFFFF", NULL, 16);
    570     if (num == NULL)
    571         return NULL;
    572     overflow = 1234;
    573     value = PyLong_AsLongAndOverflow(num, &overflow);
    574     Py_DECREF(num);
    575     if (value == -1 && PyErr_Occurred())
    576         return NULL;
    577     if (value != -1)
    578         return raiseTestError("test_long_and_overflow",
    579             "return value was not set to -1");
    580     if (overflow != 1)
    581         return raiseTestError("test_long_and_overflow",
    582             "overflow was not set to 1");
    583 
    584     /* Same again, with num = LONG_MAX + 1 */
    585     num = PyLong_FromLong(LONG_MAX);
    586     if (num == NULL)
    587         return NULL;
    588     one = PyLong_FromLong(1L);
    589     if (one == NULL) {
    590         Py_DECREF(num);
    591         return NULL;
    592     }
    593     temp = PyNumber_Add(num, one);
    594     Py_DECREF(one);
    595     Py_DECREF(num);
    596     num = temp;
    597     if (num == NULL)
    598         return NULL;
    599     overflow = 0;
    600     value = PyLong_AsLongAndOverflow(num, &overflow);
    601     Py_DECREF(num);
    602     if (value == -1 && PyErr_Occurred())
    603         return NULL;
    604     if (value != -1)
    605         return raiseTestError("test_long_and_overflow",
    606             "return value was not set to -1");
    607     if (overflow != 1)
    608         return raiseTestError("test_long_and_overflow",
    609             "overflow was not set to 1");
    610 
    611     /* Test that overflow is set properly for a large negative value. */
    612     /* num is a number smaller than LONG_MIN even on 64-bit platforms */
    613     num = PyLong_FromString("-FFFFFFFFFFFFFFFFFFFFFFFF", NULL, 16);
    614     if (num == NULL)
    615         return NULL;
    616     overflow = 1234;
    617     value = PyLong_AsLongAndOverflow(num, &overflow);
    618     Py_DECREF(num);
    619     if (value == -1 && PyErr_Occurred())
    620         return NULL;
    621     if (value != -1)
    622         return raiseTestError("test_long_and_overflow",
    623             "return value was not set to -1");
    624     if (overflow != -1)
    625         return raiseTestError("test_long_and_overflow",
    626             "overflow was not set to -1");
    627 
    628     /* Same again, with num = LONG_MIN - 1 */
    629     num = PyLong_FromLong(LONG_MIN);
    630     if (num == NULL)
    631         return NULL;
    632     one = PyLong_FromLong(1L);
    633     if (one == NULL) {
    634         Py_DECREF(num);
    635         return NULL;
    636     }
    637     temp = PyNumber_Subtract(num, one);
    638     Py_DECREF(one);
    639     Py_DECREF(num);
    640     num = temp;
    641     if (num == NULL)
    642         return NULL;
    643     overflow = 0;
    644     value = PyLong_AsLongAndOverflow(num, &overflow);
    645     Py_DECREF(num);
    646     if (value == -1 && PyErr_Occurred())
    647         return NULL;
    648     if (value != -1)
    649         return raiseTestError("test_long_and_overflow",
    650             "return value was not set to -1");
    651     if (overflow != -1)
    652         return raiseTestError("test_long_and_overflow",
    653             "overflow was not set to -1");
    654 
    655     /* Test that overflow is cleared properly for small values. */
    656     num = PyLong_FromString("FF", NULL, 16);
    657     if (num == NULL)
    658         return NULL;
    659     overflow = 1234;
    660     value = PyLong_AsLongAndOverflow(num, &overflow);
    661     Py_DECREF(num);
    662     if (value == -1 && PyErr_Occurred())
    663         return NULL;
    664     if (value != 0xFF)
    665         return raiseTestError("test_long_and_overflow",
    666             "expected return value 0xFF");
    667     if (overflow != 0)
    668         return raiseTestError("test_long_and_overflow",
    669             "overflow was not cleared");
    670 
    671     num = PyLong_FromString("-FF", NULL, 16);
    672     if (num == NULL)
    673         return NULL;
    674     overflow = 0;
    675     value = PyLong_AsLongAndOverflow(num, &overflow);
    676     Py_DECREF(num);
    677     if (value == -1 && PyErr_Occurred())
    678         return NULL;
    679     if (value != -0xFF)
    680         return raiseTestError("test_long_and_overflow",
    681             "expected return value 0xFF");
    682     if (overflow != 0)
    683         return raiseTestError("test_long_and_overflow",
    684             "overflow was set incorrectly");
    685 
    686     num = PyLong_FromLong(LONG_MAX);
    687     if (num == NULL)
    688         return NULL;
    689     overflow = 1234;
    690     value = PyLong_AsLongAndOverflow(num, &overflow);
    691     Py_DECREF(num);
    692     if (value == -1 && PyErr_Occurred())
    693         return NULL;
    694     if (value != LONG_MAX)
    695         return raiseTestError("test_long_and_overflow",
    696             "expected return value LONG_MAX");
    697     if (overflow != 0)
    698         return raiseTestError("test_long_and_overflow",
    699             "overflow was not cleared");
    700 
    701     num = PyLong_FromLong(LONG_MIN);
    702     if (num == NULL)
    703         return NULL;
    704     overflow = 0;
    705     value = PyLong_AsLongAndOverflow(num, &overflow);
    706     Py_DECREF(num);
    707     if (value == -1 && PyErr_Occurred())
    708         return NULL;
    709     if (value != LONG_MIN)
    710         return raiseTestError("test_long_and_overflow",
    711             "expected return value LONG_MIN");
    712     if (overflow != 0)
    713         return raiseTestError("test_long_and_overflow",
    714             "overflow was not cleared");
    715 
    716     Py_INCREF(Py_None);
    717     return Py_None;
    718 }
    719 
    720 /* Test the PyLong_AsLongLongAndOverflow API. General conversion to
    721    PY_LONG_LONG is tested by test_long_api_inner. This test will
    722    concentrate on proper handling of overflow.
    723 */
    724 
    725 static PyObject *
    726 test_long_long_and_overflow(PyObject *self)
    727 {
    728     PyObject *num, *one, *temp;
    729     PY_LONG_LONG value;
    730     int overflow;
    731 
    732     /* Test that overflow is set properly for a large value. */
    733     /* num is a number larger than PY_LLONG_MAX on a typical machine. */
    734     num = PyLong_FromString("FFFFFFFFFFFFFFFFFFFFFFFF", NULL, 16);
    735     if (num == NULL)
    736         return NULL;
    737     overflow = 1234;
    738     value = PyLong_AsLongLongAndOverflow(num, &overflow);
    739     Py_DECREF(num);
    740     if (value == -1 && PyErr_Occurred())
    741         return NULL;
    742     if (value != -1)
    743         return raiseTestError("test_long_long_and_overflow",
    744             "return value was not set to -1");
    745     if (overflow != 1)
    746         return raiseTestError("test_long_long_and_overflow",
    747             "overflow was not set to 1");
    748 
    749     /* Same again, with num = PY_LLONG_MAX + 1 */
    750     num = PyLong_FromLongLong(PY_LLONG_MAX);
    751     if (num == NULL)
    752         return NULL;
    753     one = PyLong_FromLong(1L);
    754     if (one == NULL) {
    755         Py_DECREF(num);
    756         return NULL;
    757     }
    758     temp = PyNumber_Add(num, one);
    759     Py_DECREF(one);
    760     Py_DECREF(num);
    761     num = temp;
    762     if (num == NULL)
    763         return NULL;
    764     overflow = 0;
    765     value = PyLong_AsLongLongAndOverflow(num, &overflow);
    766     Py_DECREF(num);
    767     if (value == -1 && PyErr_Occurred())
    768         return NULL;
    769     if (value != -1)
    770         return raiseTestError("test_long_long_and_overflow",
    771             "return value was not set to -1");
    772     if (overflow != 1)
    773         return raiseTestError("test_long_long_and_overflow",
    774             "overflow was not set to 1");
    775 
    776     /* Test that overflow is set properly for a large negative value. */
    777     /* num is a number smaller than PY_LLONG_MIN on a typical platform */
    778     num = PyLong_FromString("-FFFFFFFFFFFFFFFFFFFFFFFF", NULL, 16);
    779     if (num == NULL)
    780         return NULL;
    781     overflow = 1234;
    782     value = PyLong_AsLongLongAndOverflow(num, &overflow);
    783     Py_DECREF(num);
    784     if (value == -1 && PyErr_Occurred())
    785         return NULL;
    786     if (value != -1)
    787         return raiseTestError("test_long_long_and_overflow",
    788             "return value was not set to -1");
    789     if (overflow != -1)
    790         return raiseTestError("test_long_long_and_overflow",
    791             "overflow was not set to -1");
    792 
    793     /* Same again, with num = PY_LLONG_MIN - 1 */
    794     num = PyLong_FromLongLong(PY_LLONG_MIN);
    795     if (num == NULL)
    796         return NULL;
    797     one = PyLong_FromLong(1L);
    798     if (one == NULL) {
    799         Py_DECREF(num);
    800         return NULL;
    801     }
    802     temp = PyNumber_Subtract(num, one);
    803     Py_DECREF(one);
    804     Py_DECREF(num);
    805     num = temp;
    806     if (num == NULL)
    807         return NULL;
    808     overflow = 0;
    809     value = PyLong_AsLongLongAndOverflow(num, &overflow);
    810     Py_DECREF(num);
    811     if (value == -1 && PyErr_Occurred())
    812         return NULL;
    813     if (value != -1)
    814         return raiseTestError("test_long_long_and_overflow",
    815             "return value was not set to -1");
    816     if (overflow != -1)
    817         return raiseTestError("test_long_long_and_overflow",
    818             "overflow was not set to -1");
    819 
    820     /* Test that overflow is cleared properly for small values. */
    821     num = PyLong_FromString("FF", NULL, 16);
    822     if (num == NULL)
    823         return NULL;
    824     overflow = 1234;
    825     value = PyLong_AsLongLongAndOverflow(num, &overflow);
    826     Py_DECREF(num);
    827     if (value == -1 && PyErr_Occurred())
    828         return NULL;
    829     if (value != 0xFF)
    830         return raiseTestError("test_long_long_and_overflow",
    831             "expected return value 0xFF");
    832     if (overflow != 0)
    833         return raiseTestError("test_long_long_and_overflow",
    834             "overflow was not cleared");
    835 
    836     num = PyLong_FromString("-FF", NULL, 16);
    837     if (num == NULL)
    838         return NULL;
    839     overflow = 0;
    840     value = PyLong_AsLongLongAndOverflow(num, &overflow);
    841     Py_DECREF(num);
    842     if (value == -1 && PyErr_Occurred())
    843         return NULL;
    844     if (value != -0xFF)
    845         return raiseTestError("test_long_long_and_overflow",
    846             "expected return value 0xFF");
    847     if (overflow != 0)
    848         return raiseTestError("test_long_long_and_overflow",
    849             "overflow was set incorrectly");
    850 
    851     num = PyLong_FromLongLong(PY_LLONG_MAX);
    852     if (num == NULL)
    853         return NULL;
    854     overflow = 1234;
    855     value = PyLong_AsLongLongAndOverflow(num, &overflow);
    856     Py_DECREF(num);
    857     if (value == -1 && PyErr_Occurred())
    858         return NULL;
    859     if (value != PY_LLONG_MAX)
    860         return raiseTestError("test_long_long_and_overflow",
    861             "expected return value PY_LLONG_MAX");
    862     if (overflow != 0)
    863         return raiseTestError("test_long_long_and_overflow",
    864             "overflow was not cleared");
    865 
    866     num = PyLong_FromLongLong(PY_LLONG_MIN);
    867     if (num == NULL)
    868         return NULL;
    869     overflow = 0;
    870     value = PyLong_AsLongLongAndOverflow(num, &overflow);
    871     Py_DECREF(num);
    872     if (value == -1 && PyErr_Occurred())
    873         return NULL;
    874     if (value != PY_LLONG_MIN)
    875         return raiseTestError("test_long_long_and_overflow",
    876             "expected return value PY_LLONG_MIN");
    877     if (overflow != 0)
    878         return raiseTestError("test_long_long_and_overflow",
    879             "overflow was not cleared");
    880 
    881     Py_INCREF(Py_None);
    882     return Py_None;
    883 }
    884 
    885 /* Test the L code for PyArg_ParseTuple.  This should deliver a PY_LONG_LONG
    886    for both long and int arguments.  The test may leak a little memory if
    887    it fails.
    888 */
    889 static PyObject *
    890 test_L_code(PyObject *self)
    891 {
    892     PyObject *tuple, *num;
    893     PY_LONG_LONG value;
    894 
    895     tuple = PyTuple_New(1);
    896     if (tuple == NULL)
    897         return NULL;
    898 
    899     num = PyLong_FromLong(42);
    900     if (num == NULL)
    901         return NULL;
    902 
    903     PyTuple_SET_ITEM(tuple, 0, num);
    904 
    905     value = -1;
    906     if (PyArg_ParseTuple(tuple, "L:test_L_code", &value) < 0)
    907         return NULL;
    908     if (value != 42)
    909         return raiseTestError("test_L_code",
    910             "L code returned wrong value for long 42");
    911 
    912     Py_DECREF(num);
    913     num = PyInt_FromLong(42);
    914     if (num == NULL)
    915         return NULL;
    916 
    917     PyTuple_SET_ITEM(tuple, 0, num);
    918 
    919     value = -1;
    920     if (PyArg_ParseTuple(tuple, "L:test_L_code", &value) < 0)
    921         return NULL;
    922     if (value != 42)
    923         return raiseTestError("test_L_code",
    924             "L code returned wrong value for int 42");
    925 
    926     Py_DECREF(tuple);
    927     Py_INCREF(Py_None);
    928     return Py_None;
    929 }
    930 
    931 #endif  /* ifdef HAVE_LONG_LONG */
    932 
    933 static PyObject *
    934 return_none(void *unused)
    935 {
    936     Py_RETURN_NONE;
    937 }
    938 
    939 static PyObject *
    940 raise_error(void *unused)
    941 {
    942     PyErr_SetNone(PyExc_ValueError);
    943     return NULL;
    944 }
    945 
    946 static int
    947 test_buildvalue_N_error(const char *fmt)
    948 {
    949     PyObject *arg, *res;
    950 
    951     arg = PyList_New(0);
    952     if (arg == NULL) {
    953         return -1;
    954     }
    955 
    956     Py_INCREF(arg);
    957     res = Py_BuildValue(fmt, return_none, NULL, arg);
    958     if (res == NULL) {
    959         return -1;
    960     }
    961     Py_DECREF(res);
    962     if (Py_REFCNT(arg) != 1) {
    963         PyErr_Format(TestError, "test_buildvalue_N: "
    964                      "arg was not decrefed in successful "
    965                      "Py_BuildValue(\"%s\")", fmt);
    966         return -1;
    967     }
    968 
    969     Py_INCREF(arg);
    970     res = Py_BuildValue(fmt, raise_error, NULL, arg);
    971     if (res != NULL || !PyErr_Occurred()) {
    972         PyErr_Format(TestError, "test_buildvalue_N: "
    973                      "Py_BuildValue(\"%s\") didn't complain", fmt);
    974         return -1;
    975     }
    976     PyErr_Clear();
    977     if (Py_REFCNT(arg) != 1) {
    978         PyErr_Format(TestError, "test_buildvalue_N: "
    979                      "arg was not decrefed in failed "
    980                      "Py_BuildValue(\"%s\")", fmt);
    981         return -1;
    982     }
    983     Py_DECREF(arg);
    984     return 0;
    985 }
    986 
    987 static PyObject *
    988 test_buildvalue_N(PyObject *self, PyObject *noargs)
    989 {
    990     PyObject *arg, *res;
    991 
    992     arg = PyList_New(0);
    993     if (arg == NULL) {
    994         return NULL;
    995     }
    996     Py_INCREF(arg);
    997     res = Py_BuildValue("N", arg);
    998     if (res == NULL) {
    999         return NULL;
   1000     }
   1001     if (res != arg) {
   1002         return raiseTestError("test_buildvalue_N",
   1003                               "Py_BuildValue(\"N\") returned wrong result");
   1004     }
   1005     if (Py_REFCNT(arg) != 2) {
   1006         return raiseTestError("test_buildvalue_N",
   1007                               "arg was not decrefed in Py_BuildValue(\"N\")");
   1008     }
   1009     Py_DECREF(res);
   1010     Py_DECREF(arg);
   1011 
   1012     if (test_buildvalue_N_error("O&N") < 0)
   1013         return NULL;
   1014     if (test_buildvalue_N_error("(O&N)") < 0)
   1015         return NULL;
   1016     if (test_buildvalue_N_error("[O&N]") < 0)
   1017         return NULL;
   1018     if (test_buildvalue_N_error("{O&N}") < 0)
   1019         return NULL;
   1020     if (test_buildvalue_N_error("{()O&(())N}") < 0)
   1021         return NULL;
   1022 
   1023     Py_RETURN_NONE;
   1024 }
   1025 
   1026 
   1027 static PyObject *
   1028 get_args(PyObject *self, PyObject *args)
   1029 {
   1030     if (args == NULL) {
   1031         args = Py_None;
   1032     }
   1033     Py_INCREF(args);
   1034     return args;
   1035 }
   1036 
   1037 static PyObject *
   1038 get_kwargs(PyObject *self, PyObject *args, PyObject *kwargs)
   1039 {
   1040     if (kwargs == NULL) {
   1041         kwargs = Py_None;
   1042     }
   1043     Py_INCREF(kwargs);
   1044     return kwargs;
   1045 }
   1046 
   1047 /* Test tuple argument processing */
   1048 static PyObject *
   1049 getargs_tuple(PyObject *self, PyObject *args)
   1050 {
   1051     int a, b, c;
   1052     if (!PyArg_ParseTuple(args, "i(ii)", &a, &b, &c))
   1053         return NULL;
   1054     return Py_BuildValue("iii", a, b, c);
   1055 }
   1056 
   1057 /* test PyArg_ParseTupleAndKeywords */
   1058 static PyObject *getargs_keywords(PyObject *self, PyObject *args, PyObject *kwargs)
   1059 {
   1060     static char *keywords[] = {"arg1","arg2","arg3","arg4","arg5", NULL};
   1061     static char *fmt="(ii)i|(i(ii))(iii)i";
   1062     int int_args[10]={-1, -1, -1, -1, -1, -1, -1, -1, -1, -1};
   1063 
   1064     if (!PyArg_ParseTupleAndKeywords(args, kwargs, fmt, keywords,
   1065         &int_args[0], &int_args[1], &int_args[2], &int_args[3], &int_args[4],
   1066         &int_args[5], &int_args[6], &int_args[7], &int_args[8], &int_args[9]))
   1067         return NULL;
   1068     return Py_BuildValue("iiiiiiiiii",
   1069         int_args[0], int_args[1], int_args[2], int_args[3], int_args[4],
   1070         int_args[5], int_args[6], int_args[7], int_args[8], int_args[9]);
   1071 }
   1072 
   1073 /* Functions to call PyArg_ParseTuple with integer format codes,
   1074    and return the result.
   1075 */
   1076 static PyObject *
   1077 getargs_b(PyObject *self, PyObject *args)
   1078 {
   1079     unsigned char value;
   1080     if (!PyArg_ParseTuple(args, "b", &value))
   1081         return NULL;
   1082     return PyLong_FromUnsignedLong((unsigned long)value);
   1083 }
   1084 
   1085 static PyObject *
   1086 getargs_B(PyObject *self, PyObject *args)
   1087 {
   1088     unsigned char value;
   1089     if (!PyArg_ParseTuple(args, "B", &value))
   1090         return NULL;
   1091     return PyLong_FromUnsignedLong((unsigned long)value);
   1092 }
   1093 
   1094 static PyObject *
   1095 getargs_h(PyObject *self, PyObject *args)
   1096 {
   1097     short value;
   1098     if (!PyArg_ParseTuple(args, "h", &value))
   1099         return NULL;
   1100     return PyLong_FromLong((long)value);
   1101 }
   1102 
   1103 static PyObject *
   1104 getargs_H(PyObject *self, PyObject *args)
   1105 {
   1106     unsigned short value;
   1107     if (!PyArg_ParseTuple(args, "H", &value))
   1108         return NULL;
   1109     return PyLong_FromUnsignedLong((unsigned long)value);
   1110 }
   1111 
   1112 static PyObject *
   1113 getargs_I(PyObject *self, PyObject *args)
   1114 {
   1115     unsigned int value;
   1116     if (!PyArg_ParseTuple(args, "I", &value))
   1117         return NULL;
   1118     return PyLong_FromUnsignedLong((unsigned long)value);
   1119 }
   1120 
   1121 static PyObject *
   1122 getargs_k(PyObject *self, PyObject *args)
   1123 {
   1124     unsigned long value;
   1125     if (!PyArg_ParseTuple(args, "k", &value))
   1126         return NULL;
   1127     return PyLong_FromUnsignedLong(value);
   1128 }
   1129 
   1130 static PyObject *
   1131 getargs_i(PyObject *self, PyObject *args)
   1132 {
   1133     int value;
   1134     if (!PyArg_ParseTuple(args, "i", &value))
   1135         return NULL;
   1136     return PyLong_FromLong((long)value);
   1137 }
   1138 
   1139 static PyObject *
   1140 getargs_l(PyObject *self, PyObject *args)
   1141 {
   1142     long value;
   1143     if (!PyArg_ParseTuple(args, "l", &value))
   1144         return NULL;
   1145     return PyLong_FromLong(value);
   1146 }
   1147 
   1148 static PyObject *
   1149 getargs_n(PyObject *self, PyObject *args)
   1150 {
   1151     Py_ssize_t value;
   1152     if (!PyArg_ParseTuple(args, "n", &value))
   1153     return NULL;
   1154     return PyInt_FromSsize_t(value);
   1155 }
   1156 
   1157 #ifdef HAVE_LONG_LONG
   1158 static PyObject *
   1159 getargs_L(PyObject *self, PyObject *args)
   1160 {
   1161     PY_LONG_LONG value;
   1162     if (!PyArg_ParseTuple(args, "L", &value))
   1163         return NULL;
   1164     return PyLong_FromLongLong(value);
   1165 }
   1166 
   1167 static PyObject *
   1168 getargs_K(PyObject *self, PyObject *args)
   1169 {
   1170     unsigned PY_LONG_LONG value;
   1171     if (!PyArg_ParseTuple(args, "K", &value))
   1172         return NULL;
   1173     return PyLong_FromUnsignedLongLong(value);
   1174 }
   1175 #endif
   1176 
   1177 /* This function not only tests the 'k' getargs code, but also the
   1178    PyInt_AsUnsignedLongMask() and PyInt_AsUnsignedLongMask() functions. */
   1179 static PyObject *
   1180 test_k_code(PyObject *self)
   1181 {
   1182     PyObject *tuple, *num;
   1183     unsigned long value;
   1184 
   1185     tuple = PyTuple_New(1);
   1186     if (tuple == NULL)
   1187         return NULL;
   1188 
   1189     /* a number larger than ULONG_MAX even on 64-bit platforms */
   1190     num = PyLong_FromString("FFFFFFFFFFFFFFFFFFFFFFFF", NULL, 16);
   1191     if (num == NULL)
   1192         return NULL;
   1193 
   1194     value = PyInt_AsUnsignedLongMask(num);
   1195     if (value != ULONG_MAX)
   1196         return raiseTestError("test_k_code",
   1197         "PyInt_AsUnsignedLongMask() returned wrong value for long 0xFFF...FFF");
   1198 
   1199     PyTuple_SET_ITEM(tuple, 0, num);
   1200 
   1201     value = 0;
   1202     if (PyArg_ParseTuple(tuple, "k:test_k_code", &value) < 0)
   1203         return NULL;
   1204     if (value != ULONG_MAX)
   1205         return raiseTestError("test_k_code",
   1206             "k code returned wrong value for long 0xFFF...FFF");
   1207 
   1208     Py_DECREF(num);
   1209     num = PyLong_FromString("-FFFFFFFF000000000000000042", NULL, 16);
   1210     if (num == NULL)
   1211         return NULL;
   1212 
   1213     value = PyInt_AsUnsignedLongMask(num);
   1214     if (value != (unsigned long)-0x42)
   1215         return raiseTestError("test_k_code",
   1216         "PyInt_AsUnsignedLongMask() returned wrong value for long 0xFFF...FFF");
   1217 
   1218     PyTuple_SET_ITEM(tuple, 0, num);
   1219 
   1220     value = 0;
   1221     if (PyArg_ParseTuple(tuple, "k:test_k_code", &value) < 0)
   1222         return NULL;
   1223     if (value != (unsigned long)-0x42)
   1224         return raiseTestError("test_k_code",
   1225             "k code returned wrong value for long -0xFFF..000042");
   1226 
   1227     Py_DECREF(tuple);
   1228     Py_INCREF(Py_None);
   1229     return Py_None;
   1230 }
   1231 
   1232 static PyObject *
   1233 getargs_f(PyObject *self, PyObject *args)
   1234 {
   1235     float f;
   1236     if (!PyArg_ParseTuple(args, "f", &f))
   1237         return NULL;
   1238     return PyFloat_FromDouble(f);
   1239 }
   1240 
   1241 static PyObject *
   1242 getargs_d(PyObject *self, PyObject *args)
   1243 {
   1244     double d;
   1245     if (!PyArg_ParseTuple(args, "d", &d))
   1246         return NULL;
   1247     return PyFloat_FromDouble(d);
   1248 }
   1249 
   1250 static PyObject *
   1251 getargs_D(PyObject *self, PyObject *args)
   1252 {
   1253     Py_complex cval;
   1254     if (!PyArg_ParseTuple(args, "D", &cval))
   1255         return NULL;
   1256     return PyComplex_FromCComplex(cval);
   1257 }
   1258 
   1259 static PyObject *
   1260 getargs_S(PyObject *self, PyObject *args)
   1261 {
   1262     PyObject *obj;
   1263     if (!PyArg_ParseTuple(args, "S", &obj))
   1264         return NULL;
   1265     Py_INCREF(obj);
   1266     return obj;
   1267 }
   1268 
   1269 static PyObject *
   1270 getargs_Y(PyObject *self, PyObject *args)
   1271 {
   1272     PyObject *obj;
   1273     if (!PyArg_ParseTuple(args, "Y", &obj))
   1274         return NULL;
   1275     Py_INCREF(obj);
   1276     return obj;
   1277 }
   1278 
   1279 #ifdef Py_USING_UNICODE
   1280 static PyObject *
   1281 getargs_U(PyObject *self, PyObject *args)
   1282 {
   1283     PyObject *obj;
   1284     if (!PyArg_ParseTuple(args, "U", &obj))
   1285         return NULL;
   1286     Py_INCREF(obj);
   1287     return obj;
   1288 }
   1289 #endif
   1290 
   1291 static PyObject *
   1292 getargs_c(PyObject *self, PyObject *args)
   1293 {
   1294     char c;
   1295     if (!PyArg_ParseTuple(args, "c", &c))
   1296         return NULL;
   1297     return PyInt_FromLong((unsigned char)c);
   1298 }
   1299 
   1300 static PyObject *
   1301 getargs_s(PyObject *self, PyObject *args)
   1302 {
   1303     const char *str;
   1304     if (!PyArg_ParseTuple(args, "s", &str))
   1305         return NULL;
   1306     return PyBytes_FromString(str);
   1307 }
   1308 
   1309 static PyObject *
   1310 getargs_s_star(PyObject *self, PyObject *args)
   1311 {
   1312     Py_buffer buffer;
   1313     PyObject *bytes;
   1314     if (!PyArg_ParseTuple(args, "s*", &buffer))
   1315         return NULL;
   1316     bytes = PyBytes_FromStringAndSize(buffer.buf, buffer.len);
   1317     PyBuffer_Release(&buffer);
   1318     return bytes;
   1319 }
   1320 
   1321 static PyObject *
   1322 getargs_s_hash(PyObject *self, PyObject *args)
   1323 {
   1324     const char *str;
   1325     int size;
   1326     if (!PyArg_ParseTuple(args, "s#", &str, &size))
   1327         return NULL;
   1328     return PyBytes_FromStringAndSize(str, size);
   1329 }
   1330 
   1331 static PyObject *
   1332 getargs_t_hash(PyObject *self, PyObject *args)
   1333 {
   1334     const char *str;
   1335     int size;
   1336     if (!PyArg_ParseTuple(args, "t#", &str, &size))
   1337         return NULL;
   1338     return PyBytes_FromStringAndSize(str, size);
   1339 }
   1340 
   1341 static PyObject *
   1342 getargs_z(PyObject *self, PyObject *args)
   1343 {
   1344     const char *str;
   1345     if (!PyArg_ParseTuple(args, "z", &str))
   1346         return NULL;
   1347     if (str != NULL)
   1348         return PyBytes_FromString(str);
   1349     else
   1350         Py_RETURN_NONE;
   1351 }
   1352 
   1353 static PyObject *
   1354 getargs_z_star(PyObject *self, PyObject *args)
   1355 {
   1356     Py_buffer buffer;
   1357     PyObject *bytes;
   1358     if (!PyArg_ParseTuple(args, "z*", &buffer))
   1359         return NULL;
   1360     if (buffer.buf != NULL)
   1361         bytes = PyBytes_FromStringAndSize(buffer.buf, buffer.len);
   1362     else {
   1363         Py_INCREF(Py_None);
   1364         bytes = Py_None;
   1365     }
   1366     PyBuffer_Release(&buffer);
   1367     return bytes;
   1368 }
   1369 
   1370 static PyObject *
   1371 getargs_z_hash(PyObject *self, PyObject *args)
   1372 {
   1373     const char *str;
   1374     int size;
   1375     if (!PyArg_ParseTuple(args, "z#", &str, &size))
   1376         return NULL;
   1377     if (str != NULL)
   1378         return PyBytes_FromStringAndSize(str, size);
   1379     else
   1380         Py_RETURN_NONE;
   1381 }
   1382 
   1383 static PyObject *
   1384 getargs_w(PyObject *self, PyObject *args)
   1385 {
   1386     char *str;
   1387     Py_ssize_t size;
   1388 
   1389     if (!PyArg_ParseTuple(args, "wn", &str, &size))
   1390         return NULL;
   1391 
   1392     if (2 <= size) {
   1393         str[0] = '[';
   1394         str[size-1] = ']';
   1395     }
   1396 
   1397     return PyBytes_FromStringAndSize(str, size);
   1398 }
   1399 
   1400 static PyObject *
   1401 getargs_w_hash(PyObject *self, PyObject *args)
   1402 {
   1403     char *str;
   1404     int size;
   1405 
   1406     if (!PyArg_ParseTuple(args, "w#", &str, &size))
   1407         return NULL;
   1408 
   1409     if (2 <= size) {
   1410         str[0] = '[';
   1411         str[size-1] = ']';
   1412     }
   1413 
   1414     return PyBytes_FromStringAndSize(str, size);
   1415 }
   1416 
   1417 static PyObject *
   1418 getargs_w_star(PyObject *self, PyObject *args)
   1419 {
   1420     Py_buffer buffer;
   1421     PyObject *result;
   1422     char *str;
   1423 
   1424     if (!PyArg_ParseTuple(args, "w*", &buffer))
   1425         return NULL;
   1426 
   1427     if (2 <= buffer.len) {
   1428         str = buffer.buf;
   1429         str[0] = '[';
   1430         str[buffer.len-1] = ']';
   1431     }
   1432 
   1433     result = PyBytes_FromStringAndSize(buffer.buf, buffer.len);
   1434     PyBuffer_Release(&buffer);
   1435     return result;
   1436 }
   1437 
   1438 #ifdef Py_USING_UNICODE
   1439 
   1440 static int
   1441 _ustrlen(const Py_UNICODE *u)
   1442 {
   1443     int i = 0;
   1444     const Py_UNICODE *v = u;
   1445     while (*v != 0) { i++; v++; }
   1446     return i;
   1447 }
   1448 
   1449 static PyObject *
   1450 getargs_u(PyObject *self, PyObject *args)
   1451 {
   1452     const Py_UNICODE *str;
   1453     int size;
   1454     if (!PyArg_ParseTuple(args, "u", &str))
   1455         return NULL;
   1456     size = _ustrlen(str);
   1457     return PyUnicode_FromUnicode(str, size);
   1458 }
   1459 
   1460 static PyObject *
   1461 getargs_u_hash(PyObject *self, PyObject *args)
   1462 {
   1463     const Py_UNICODE *str;
   1464     int size;
   1465     if (!PyArg_ParseTuple(args, "u#", &str, &size))
   1466         return NULL;
   1467     return PyUnicode_FromUnicode(str, size);
   1468 }
   1469 
   1470 #endif
   1471 
   1472 static PyObject *
   1473 getargs_es(PyObject *self, PyObject *args)
   1474 {
   1475     PyObject *arg, *result;
   1476     const char *encoding = NULL;
   1477     char *str;
   1478 
   1479     if (!PyArg_ParseTuple(args, "O|s", &arg, &encoding))
   1480         return NULL;
   1481     if (!PyArg_Parse(arg, "es", encoding, &str))
   1482         return NULL;
   1483     result = PyBytes_FromString(str);
   1484     PyMem_Free(str);
   1485     return result;
   1486 }
   1487 
   1488 static PyObject *
   1489 getargs_et(PyObject *self, PyObject *args)
   1490 {
   1491     PyObject *arg, *result;
   1492     const char *encoding = NULL;
   1493     char *str;
   1494 
   1495     if (!PyArg_ParseTuple(args, "O|s", &arg, &encoding))
   1496         return NULL;
   1497     if (!PyArg_Parse(arg, "et", encoding, &str))
   1498         return NULL;
   1499     result = PyBytes_FromString(str);
   1500     PyMem_Free(str);
   1501     return result;
   1502 }
   1503 
   1504 static PyObject *
   1505 getargs_es_hash(PyObject *self, PyObject *args)
   1506 {
   1507     PyObject *arg, *result;
   1508     const char *encoding = NULL;
   1509     PyByteArrayObject *buffer = NULL;
   1510     char *str = NULL;
   1511     int size;
   1512 
   1513     if (!PyArg_ParseTuple(args, "O|sO!",
   1514                           &arg, &encoding, &PyByteArray_Type, &buffer))
   1515         return NULL;
   1516     if (buffer != NULL) {
   1517         str = PyByteArray_AS_STRING(buffer);
   1518         size = PyByteArray_GET_SIZE(buffer);
   1519     }
   1520     if (!PyArg_Parse(arg, "es#", encoding, &str, &size))
   1521         return NULL;
   1522     result = PyBytes_FromStringAndSize(str, size);
   1523     if (buffer == NULL)
   1524         PyMem_Free(str);
   1525     return result;
   1526 }
   1527 
   1528 static PyObject *
   1529 getargs_et_hash(PyObject *self, PyObject *args)
   1530 {
   1531     PyObject *arg, *result;
   1532     const char *encoding = NULL;
   1533     PyByteArrayObject *buffer = NULL;
   1534     char *str = NULL;
   1535     int size;
   1536 
   1537     if (!PyArg_ParseTuple(args, "O|sO!",
   1538                           &arg, &encoding, &PyByteArray_Type, &buffer))
   1539         return NULL;
   1540     if (buffer != NULL) {
   1541         str = PyByteArray_AS_STRING(buffer);
   1542         size = PyByteArray_GET_SIZE(buffer);
   1543     }
   1544     if (!PyArg_Parse(arg, "et#", encoding, &str, &size))
   1545         return NULL;
   1546     result = PyBytes_FromStringAndSize(str, size);
   1547     if (buffer == NULL)
   1548         PyMem_Free(str);
   1549     return result;
   1550 }
   1551 
   1552 #ifdef Py_USING_UNICODE
   1553 
   1554 static volatile int x;
   1555 
   1556 /* Test the u and u# codes for PyArg_ParseTuple. May leak memory in case
   1557    of an error.
   1558 */
   1559 static PyObject *
   1560 test_u_code(PyObject *self)
   1561 {
   1562     PyObject *tuple, *obj;
   1563     Py_UNICODE *value;
   1564     int len;
   1565 
   1566     /* issue4122: Undefined reference to _Py_ascii_whitespace on Windows */
   1567     /* Just use the macro and check that it compiles */
   1568     x = Py_UNICODE_ISSPACE(25);
   1569 
   1570     tuple = PyTuple_New(1);
   1571     if (tuple == NULL)
   1572         return NULL;
   1573 
   1574     obj = PyUnicode_Decode("test", strlen("test"),
   1575                            "ascii", NULL);
   1576     if (obj == NULL)
   1577         return NULL;
   1578 
   1579     PyTuple_SET_ITEM(tuple, 0, obj);
   1580 
   1581     value = 0;
   1582     if (PyArg_ParseTuple(tuple, "u:test_u_code", &value) < 0)
   1583         return NULL;
   1584     if (value != PyUnicode_AS_UNICODE(obj))
   1585         return raiseTestError("test_u_code",
   1586             "u code returned wrong value for u'test'");
   1587     value = 0;
   1588     if (PyArg_ParseTuple(tuple, "u#:test_u_code", &value, &len) < 0)
   1589         return NULL;
   1590     if (value != PyUnicode_AS_UNICODE(obj) ||
   1591         len != PyUnicode_GET_SIZE(obj))
   1592         return raiseTestError("test_u_code",
   1593             "u# code returned wrong values for u'test'");
   1594 
   1595     Py_DECREF(tuple);
   1596     Py_INCREF(Py_None);
   1597     return Py_None;
   1598 }
   1599 
   1600 static PyObject *
   1601 test_widechar(PyObject *self)
   1602 {
   1603 #if defined(SIZEOF_WCHAR_T) && (SIZEOF_WCHAR_T == 4)
   1604     const wchar_t wtext[2] = {(wchar_t)0x10ABCDu};
   1605     size_t wtextlen = 1;
   1606 #else
   1607     const wchar_t wtext[3] = {(wchar_t)0xDBEAu, (wchar_t)0xDFCDu};
   1608     size_t wtextlen = 2;
   1609 #endif
   1610     PyObject *wide, *utf8;
   1611 
   1612     wide = PyUnicode_FromWideChar(wtext, wtextlen);
   1613     if (wide == NULL)
   1614         return NULL;
   1615 
   1616     utf8 = PyUnicode_FromString("\xf4\x8a\xaf\x8d");
   1617     if (utf8 == NULL) {
   1618         Py_DECREF(wide);
   1619         return NULL;
   1620     }
   1621 
   1622     if (PyUnicode_GET_SIZE(wide) != PyUnicode_GET_SIZE(utf8)) {
   1623         Py_DECREF(wide);
   1624         Py_DECREF(utf8);
   1625         return raiseTestError("test_widechar",
   1626                         "wide string and utf8 string have different length");
   1627     }
   1628     if (PyUnicode_Compare(wide, utf8)) {
   1629         Py_DECREF(wide);
   1630         Py_DECREF(utf8);
   1631         if (PyErr_Occurred())
   1632             return NULL;
   1633         return raiseTestError("test_widechar",
   1634                         "wide string and utf8 string are differents");
   1635     }
   1636 
   1637     Py_DECREF(wide);
   1638     Py_DECREF(utf8);
   1639     Py_RETURN_NONE;
   1640 }
   1641 
   1642 static PyObject *
   1643 unicode_encodedecimal(PyObject *self, PyObject *args)
   1644 {
   1645     Py_UNICODE *unicode;
   1646     int length;
   1647     char *errors = NULL;
   1648     PyObject *decimal;
   1649     Py_ssize_t decimal_length, new_length;
   1650     int res;
   1651 
   1652     if (!PyArg_ParseTuple(args, "u#|s", &unicode, &length, &errors))
   1653         return NULL;
   1654 
   1655     decimal_length = length * 10; /* len('&#1114111;') */
   1656     decimal = PyBytes_FromStringAndSize(NULL, decimal_length);
   1657     if (decimal == NULL)
   1658         return NULL;
   1659 
   1660     res = PyUnicode_EncodeDecimal(unicode, length,
   1661                                   PyBytes_AS_STRING(decimal),
   1662                                   errors);
   1663     if (res < 0) {
   1664         Py_DECREF(decimal);
   1665         return NULL;
   1666     }
   1667 
   1668     new_length = strlen(PyBytes_AS_STRING(decimal));
   1669     assert(new_length <= decimal_length);
   1670     res = _PyBytes_Resize(&decimal, new_length);
   1671     if (res < 0)
   1672         return NULL;
   1673 
   1674     return decimal;
   1675 }
   1676 
   1677 static PyObject *
   1678 test_empty_argparse(PyObject *self)
   1679 {
   1680     /* Test that formats can begin with '|'. See issue #4720. */
   1681     PyObject *tuple, *dict = NULL;
   1682     static char *kwlist[] = {NULL};
   1683     int result;
   1684     tuple = PyTuple_New(0);
   1685     if (!tuple)
   1686         return NULL;
   1687     if ((result = PyArg_ParseTuple(tuple, "|:test_empty_argparse")) < 0)
   1688         goto done;
   1689     dict = PyDict_New();
   1690     if (!dict)
   1691         goto done;
   1692     result = PyArg_ParseTupleAndKeywords(tuple, dict, "|:test_empty_argparse", kwlist);
   1693   done:
   1694     Py_DECREF(tuple);
   1695     Py_XDECREF(dict);
   1696     if (result < 0)
   1697         return NULL;
   1698     else {
   1699         Py_RETURN_NONE;
   1700     }
   1701 }
   1702 
   1703 static PyObject *
   1704 codec_incrementalencoder(PyObject *self, PyObject *args)
   1705 {
   1706     const char *encoding, *errors = NULL;
   1707     if (!PyArg_ParseTuple(args, "s|s:test_incrementalencoder",
   1708                           &encoding, &errors))
   1709         return NULL;
   1710     return PyCodec_IncrementalEncoder(encoding, errors);
   1711 }
   1712 
   1713 static PyObject *
   1714 codec_incrementaldecoder(PyObject *self, PyObject *args)
   1715 {
   1716     const char *encoding, *errors = NULL;
   1717     if (!PyArg_ParseTuple(args, "s|s:test_incrementaldecoder",
   1718                           &encoding, &errors))
   1719         return NULL;
   1720     return PyCodec_IncrementalDecoder(encoding, errors);
   1721 }
   1722 
   1723 #endif
   1724 
   1725 /* Simple test of _PyLong_NumBits and _PyLong_Sign. */
   1726 static PyObject *
   1727 test_long_numbits(PyObject *self)
   1728 {
   1729     struct triple {
   1730         long input;
   1731         size_t nbits;
   1732         int sign;
   1733     } testcases[] = {{0, 0, 0},
   1734                      {1L, 1, 1},
   1735                      {-1L, 1, -1},
   1736                      {2L, 2, 1},
   1737                      {-2L, 2, -1},
   1738                      {3L, 2, 1},
   1739                      {-3L, 2, -1},
   1740                      {4L, 3, 1},
   1741                      {-4L, 3, -1},
   1742                      {0x7fffL, 15, 1},          /* one Python long digit */
   1743              {-0x7fffL, 15, -1},
   1744              {0xffffL, 16, 1},
   1745              {-0xffffL, 16, -1},
   1746              {0xfffffffL, 28, 1},
   1747              {-0xfffffffL, 28, -1}};
   1748     int i;
   1749 
   1750     for (i = 0; i < sizeof(testcases) / sizeof(struct triple); ++i) {
   1751         PyObject *plong = PyLong_FromLong(testcases[i].input);
   1752         size_t nbits = _PyLong_NumBits(plong);
   1753         int sign = _PyLong_Sign(plong);
   1754 
   1755         Py_DECREF(plong);
   1756         if (nbits != testcases[i].nbits)
   1757             return raiseTestError("test_long_numbits",
   1758                             "wrong result for _PyLong_NumBits");
   1759         if (sign != testcases[i].sign)
   1760             return raiseTestError("test_long_numbits",
   1761                             "wrong result for _PyLong_Sign");
   1762     }
   1763     Py_INCREF(Py_None);
   1764     return Py_None;
   1765 }
   1766 
   1767 /* Example passing NULLs to PyObject_Str(NULL) and PyObject_Unicode(NULL). */
   1768 
   1769 static PyObject *
   1770 test_null_strings(PyObject *self)
   1771 {
   1772     PyObject *o1 = PyObject_Str(NULL);
   1773 #ifdef Py_USING_UNICODE
   1774     PyObject *o2 = PyObject_Unicode(NULL);
   1775 #else
   1776     PyObject *o2 = PyObject_Str(NULL);
   1777 #endif
   1778     PyObject *tuple = PyTuple_Pack(2, o1, o2);
   1779     Py_XDECREF(o1);
   1780     Py_XDECREF(o2);
   1781     return tuple;
   1782 }
   1783 
   1784 static PyObject *
   1785 raise_exception(PyObject *self, PyObject *args)
   1786 {
   1787     PyObject *exc;
   1788     PyObject *exc_args, *v;
   1789     int num_args, i;
   1790 
   1791     if (!PyArg_ParseTuple(args, "Oi:raise_exception",
   1792                           &exc, &num_args))
   1793         return NULL;
   1794     if (!PyExceptionClass_Check(exc)) {
   1795         PyErr_Format(PyExc_TypeError, "an exception class is required");
   1796         return NULL;
   1797     }
   1798 
   1799     exc_args = PyTuple_New(num_args);
   1800     if (exc_args == NULL)
   1801         return NULL;
   1802     for (i = 0; i < num_args; ++i) {
   1803         v = PyInt_FromLong(i);
   1804         if (v == NULL) {
   1805             Py_DECREF(exc_args);
   1806             return NULL;
   1807         }
   1808         PyTuple_SET_ITEM(exc_args, i, v);
   1809     }
   1810     PyErr_SetObject(exc, exc_args);
   1811     Py_DECREF(exc_args);
   1812     return NULL;
   1813 }
   1814 
   1815 static PyObject *
   1816 set_errno(PyObject *self, PyObject *args)
   1817 {
   1818     int new_errno;
   1819 
   1820     if (!PyArg_ParseTuple(args, "i:set_errno", &new_errno))
   1821         return NULL;
   1822 
   1823     errno = new_errno;
   1824     Py_RETURN_NONE;
   1825 }
   1826 
   1827 #ifdef Py_USING_UNICODE
   1828 static int test_run_counter = 0;
   1829 
   1830 static PyObject *
   1831 test_datetime_capi(PyObject *self, PyObject *args) {
   1832     if (PyDateTimeAPI) {
   1833         if (test_run_counter) {
   1834             /* Probably regrtest.py -R */
   1835             Py_RETURN_NONE;
   1836         }
   1837         else {
   1838             PyErr_SetString(PyExc_AssertionError,
   1839                             "PyDateTime_CAPI somehow initialized");
   1840             return NULL;
   1841         }
   1842     }
   1843     test_run_counter++;
   1844     PyDateTime_IMPORT;
   1845     if (PyDateTimeAPI)
   1846         Py_RETURN_NONE;
   1847     else
   1848         return NULL;
   1849 }
   1850 #endif
   1851 
   1852 
   1853 #ifdef WITH_THREAD
   1854 
   1855 /* test_thread_state spawns a thread of its own, and that thread releases
   1856  * `thread_done` when it's finished.  The driver code has to know when the
   1857  * thread finishes, because the thread uses a PyObject (the callable) that
   1858  * may go away when the driver finishes.  The former lack of this explicit
   1859  * synchronization caused rare segfaults, so rare that they were seen only
   1860  * on a Mac buildbot (although they were possible on any box).
   1861  */
   1862 static PyThread_type_lock thread_done = NULL;
   1863 
   1864 static int
   1865 _make_call(void *callable)
   1866 {
   1867     PyObject *rc;
   1868     int success;
   1869     PyGILState_STATE s = PyGILState_Ensure();
   1870     rc = PyObject_CallFunction((PyObject *)callable, "");
   1871     success = (rc != NULL);
   1872     Py_XDECREF(rc);
   1873     PyGILState_Release(s);
   1874     return success;
   1875 }
   1876 
   1877 /* Same thing, but releases `thread_done` when it returns.  This variant
   1878  * should be called only from threads spawned by test_thread_state().
   1879  */
   1880 static void
   1881 _make_call_from_thread(void *callable)
   1882 {
   1883     _make_call(callable);
   1884     PyThread_release_lock(thread_done);
   1885 }
   1886 
   1887 static PyObject *
   1888 test_thread_state(PyObject *self, PyObject *args)
   1889 {
   1890     PyObject *fn;
   1891     int success = 1;
   1892 
   1893     if (!PyArg_ParseTuple(args, "O:test_thread_state", &fn))
   1894         return NULL;
   1895 
   1896     if (!PyCallable_Check(fn)) {
   1897         PyErr_Format(PyExc_TypeError, "'%s' object is not callable",
   1898             fn->ob_type->tp_name);
   1899         return NULL;
   1900     }
   1901 
   1902     /* Ensure Python is set up for threading */
   1903     PyEval_InitThreads();
   1904     thread_done = PyThread_allocate_lock();
   1905     if (thread_done == NULL)
   1906         return PyErr_NoMemory();
   1907     PyThread_acquire_lock(thread_done, 1);
   1908 
   1909     /* Start a new thread with our callback. */
   1910     PyThread_start_new_thread(_make_call_from_thread, fn);
   1911     /* Make the callback with the thread lock held by this thread */
   1912     success &= _make_call(fn);
   1913     /* Do it all again, but this time with the thread-lock released */
   1914     Py_BEGIN_ALLOW_THREADS
   1915     success &= _make_call(fn);
   1916     PyThread_acquire_lock(thread_done, 1);  /* wait for thread to finish */
   1917     Py_END_ALLOW_THREADS
   1918 
   1919     /* And once more with and without a thread
   1920        XXX - should use a lock and work out exactly what we are trying
   1921        to test <wink>
   1922     */
   1923     Py_BEGIN_ALLOW_THREADS
   1924     PyThread_start_new_thread(_make_call_from_thread, fn);
   1925     success &= _make_call(fn);
   1926     PyThread_acquire_lock(thread_done, 1);  /* wait for thread to finish */
   1927     Py_END_ALLOW_THREADS
   1928 
   1929     /* Release lock we acquired above.  This is required on HP-UX. */
   1930     PyThread_release_lock(thread_done);
   1931 
   1932     PyThread_free_lock(thread_done);
   1933     if (!success)
   1934         return NULL;
   1935     Py_RETURN_NONE;
   1936 }
   1937 
   1938 /* test Py_AddPendingCalls using threads */
   1939 static int _pending_callback(void *arg)
   1940 {
   1941     /* we assume the argument is callable object to which we own a reference */
   1942     PyObject *callable = (PyObject *)arg;
   1943     PyObject *r = PyObject_CallObject(callable, NULL);
   1944     Py_DECREF(callable);
   1945     Py_XDECREF(r);
   1946     return r != NULL ? 0 : -1;
   1947 }
   1948 
   1949 /* The following requests n callbacks to _pending_callback.  It can be
   1950  * run from any python thread.
   1951  */
   1952 PyObject *pending_threadfunc(PyObject *self, PyObject *arg)
   1953 {
   1954     PyObject *callable;
   1955     int r;
   1956     if (PyArg_ParseTuple(arg, "O", &callable) == 0)
   1957         return NULL;
   1958 
   1959     /* create the reference for the callbackwhile we hold the lock */
   1960     Py_INCREF(callable);
   1961 
   1962     Py_BEGIN_ALLOW_THREADS
   1963     r = Py_AddPendingCall(&_pending_callback, callable);
   1964     Py_END_ALLOW_THREADS
   1965 
   1966     if (r<0) {
   1967         Py_DECREF(callable); /* unsuccessful add, destroy the extra reference */
   1968         Py_INCREF(Py_False);
   1969         return Py_False;
   1970     }
   1971     Py_INCREF(Py_True);
   1972     return Py_True;
   1973 }
   1974 #endif
   1975 
   1976 /* Some tests of PyString_FromFormat().  This needs more tests. */
   1977 static PyObject *
   1978 test_string_from_format(PyObject *self, PyObject *args)
   1979 {
   1980     PyObject *result;
   1981     char *msg;
   1982 
   1983 #define CHECK_1_FORMAT(FORMAT, TYPE)                    \
   1984     result = PyString_FromFormat(FORMAT, (TYPE)1);      \
   1985     if (result == NULL)                                 \
   1986         return NULL;                                    \
   1987     if (strcmp(PyString_AsString(result), "1")) {       \
   1988         msg = FORMAT " failed at 1";                    \
   1989         goto Fail;                                      \
   1990     }                                                   \
   1991     Py_DECREF(result)
   1992 
   1993     CHECK_1_FORMAT("%d", int);
   1994     CHECK_1_FORMAT("%ld", long);
   1995     /* The z width modifier was added in Python 2.5. */
   1996     CHECK_1_FORMAT("%zd", Py_ssize_t);
   1997 
   1998     /* The u type code was added in Python 2.5. */
   1999     CHECK_1_FORMAT("%u", unsigned int);
   2000     CHECK_1_FORMAT("%lu", unsigned long);
   2001     CHECK_1_FORMAT("%zu", size_t);
   2002 
   2003     /* "%lld" and "%llu" support added in Python 2.7. */
   2004 #ifdef HAVE_LONG_LONG
   2005     CHECK_1_FORMAT("%llu", unsigned PY_LONG_LONG);
   2006     CHECK_1_FORMAT("%lld", PY_LONG_LONG);
   2007 #endif
   2008 
   2009     Py_RETURN_NONE;
   2010 
   2011  Fail:
   2012     Py_XDECREF(result);
   2013     return raiseTestError("test_string_from_format", msg);
   2014 
   2015 #undef CHECK_1_FORMAT
   2016 }
   2017 
   2018 /* Coverage testing of capsule objects. */
   2019 
   2020 static const char *capsule_name = "capsule name";
   2021 static       char *capsule_pointer = "capsule pointer";
   2022 static       char *capsule_context = "capsule context";
   2023 static const char *capsule_error = NULL;
   2024 static int
   2025 capsule_destructor_call_count = 0;
   2026 
   2027 static void
   2028 capsule_destructor(PyObject *o) {
   2029     capsule_destructor_call_count++;
   2030     if (PyCapsule_GetContext(o) != capsule_context) {
   2031         capsule_error = "context did not match in destructor!";
   2032     } else if (PyCapsule_GetDestructor(o) != capsule_destructor) {
   2033         capsule_error = "destructor did not match in destructor!  (woah!)";
   2034     } else if (PyCapsule_GetName(o) != capsule_name) {
   2035         capsule_error = "name did not match in destructor!";
   2036     } else if (PyCapsule_GetPointer(o, capsule_name) != capsule_pointer) {
   2037         capsule_error = "pointer did not match in destructor!";
   2038     }
   2039 }
   2040 
   2041 typedef struct {
   2042     char *name;
   2043     char *module;
   2044     char *attribute;
   2045 } known_capsule;
   2046 
   2047 static PyObject *
   2048 test_capsule(PyObject *self, PyObject *args)
   2049 {
   2050     PyObject *object;
   2051     const char *error = NULL;
   2052     void *pointer;
   2053     void *pointer2;
   2054     known_capsule known_capsules[] = {
   2055         #define KNOWN_CAPSULE(module, name)             { module "." name, module, name }
   2056         KNOWN_CAPSULE("_socket", "CAPI"),
   2057         KNOWN_CAPSULE("_curses", "_C_API"),
   2058         KNOWN_CAPSULE("datetime", "datetime_CAPI"),
   2059         { NULL, NULL },
   2060     };
   2061     known_capsule *known = &known_capsules[0];
   2062 
   2063 #define FAIL(x) { error = (x); goto exit; }
   2064 
   2065 #define CHECK_DESTRUCTOR \
   2066     if (capsule_error) { \
   2067         FAIL(capsule_error); \
   2068     } \
   2069     else if (!capsule_destructor_call_count) {          \
   2070         FAIL("destructor not called!"); \
   2071     } \
   2072     capsule_destructor_call_count = 0; \
   2073 
   2074     object = PyCapsule_New(capsule_pointer, capsule_name, capsule_destructor);
   2075     PyCapsule_SetContext(object, capsule_context);
   2076     capsule_destructor(object);
   2077     CHECK_DESTRUCTOR;
   2078     Py_DECREF(object);
   2079     CHECK_DESTRUCTOR;
   2080 
   2081     object = PyCapsule_New(known, "ignored", NULL);
   2082     PyCapsule_SetPointer(object, capsule_pointer);
   2083     PyCapsule_SetName(object, capsule_name);
   2084     PyCapsule_SetDestructor(object, capsule_destructor);
   2085     PyCapsule_SetContext(object, capsule_context);
   2086     capsule_destructor(object);
   2087     CHECK_DESTRUCTOR;
   2088     /* intentionally access using the wrong name */
   2089     pointer2 = PyCapsule_GetPointer(object, "the wrong name");
   2090     if (!PyErr_Occurred()) {
   2091         FAIL("PyCapsule_GetPointer should have failed but did not!");
   2092     }
   2093     PyErr_Clear();
   2094     if (pointer2) {
   2095         if (pointer2 == capsule_pointer) {
   2096             FAIL("PyCapsule_GetPointer should not have"
   2097                      " returned the internal pointer!");
   2098         } else {
   2099             FAIL("PyCapsule_GetPointer should have "
   2100                      "returned NULL pointer but did not!");
   2101         }
   2102     }
   2103     PyCapsule_SetDestructor(object, NULL);
   2104     Py_DECREF(object);
   2105     if (capsule_destructor_call_count) {
   2106         FAIL("destructor called when it should not have been!");
   2107     }
   2108 
   2109     for (known = &known_capsules[0]; known->module != NULL; known++) {
   2110         /* yeah, ordinarily I wouldn't do this either,
   2111            but it's fine for this test harness.
   2112         */
   2113         static char buffer[256];
   2114 #undef FAIL
   2115 #define FAIL(x) \
   2116         { \
   2117         sprintf(buffer, "%s module: \"%s\" attribute: \"%s\"", \
   2118             x, known->module, known->attribute); \
   2119         error = buffer; \
   2120         goto exit; \
   2121         } \
   2122 
   2123         PyObject *module = PyImport_ImportModule(known->module);
   2124         if (module) {
   2125             pointer = PyCapsule_Import(known->name, 0);
   2126             if (!pointer) {
   2127                 Py_DECREF(module);
   2128                 FAIL("PyCapsule_GetPointer returned NULL unexpectedly!");
   2129             }
   2130             object = PyObject_GetAttrString(module, known->attribute);
   2131             if (!object) {
   2132                 Py_DECREF(module);
   2133                 return NULL;
   2134             }
   2135             pointer2 = PyCapsule_GetPointer(object,
   2136                                     "weebles wobble but they don't fall down");
   2137             if (!PyErr_Occurred()) {
   2138                 Py_DECREF(object);
   2139                 Py_DECREF(module);
   2140                 FAIL("PyCapsule_GetPointer should have failed but did not!");
   2141             }
   2142             PyErr_Clear();
   2143             if (pointer2) {
   2144                 Py_DECREF(module);
   2145                 Py_DECREF(object);
   2146                 if (pointer2 == pointer) {
   2147                     FAIL("PyCapsule_GetPointer should not have"
   2148                              " returned its internal pointer!");
   2149                 } else {
   2150                     FAIL("PyCapsule_GetPointer should have"
   2151                              " returned NULL pointer but did not!");
   2152                 }
   2153             }
   2154             Py_DECREF(object);
   2155             Py_DECREF(module);
   2156         }
   2157         else
   2158             PyErr_Clear();
   2159     }
   2160 
   2161   exit:
   2162     if (error) {
   2163         return raiseTestError("test_capsule", error);
   2164     }
   2165     Py_RETURN_NONE;
   2166 #undef FAIL
   2167 }
   2168 
   2169 /* This is here to provide a docstring for test_descr. */
   2170 static PyObject *
   2171 test_with_docstring(PyObject *self)
   2172 {
   2173     Py_RETURN_NONE;
   2174 }
   2175 
   2176 /* To test the format of tracebacks as printed out. */
   2177 static PyObject *
   2178 traceback_print(PyObject *self, PyObject *args)
   2179 {
   2180     PyObject *file;
   2181     PyObject *traceback;
   2182     int result;
   2183 
   2184     if (!PyArg_ParseTuple(args, "OO:traceback_print",
   2185                             &traceback, &file))
   2186         return NULL;
   2187 
   2188     result = PyTraceBack_Print(traceback, file);
   2189     if (result < 0)
   2190         return NULL;
   2191     Py_RETURN_NONE;
   2192 }
   2193 
   2194 /* To test that the result of PyCode_NewEmpty has the right members. */
   2195 static PyObject *
   2196 code_newempty(PyObject *self, PyObject *args)
   2197 {
   2198     const char *filename;
   2199     const char *funcname;
   2200     int firstlineno;
   2201 
   2202     if (!PyArg_ParseTuple(args, "ssi:code_newempty",
   2203                           &filename, &funcname, &firstlineno))
   2204         return NULL;
   2205 
   2206     return (PyObject *)PyCode_NewEmpty(filename, funcname, firstlineno);
   2207 }
   2208 
   2209 /* Test PyErr_NewExceptionWithDoc (also exercise PyErr_NewException).
   2210    Run via Lib/test/test_exceptions.py */
   2211 static PyObject *
   2212 make_exception_with_doc(PyObject *self, PyObject *args, PyObject *kwargs)
   2213 {
   2214     char *name;
   2215     char *doc = NULL;
   2216     PyObject *base = NULL;
   2217     PyObject *dict = NULL;
   2218 
   2219     static char *kwlist[] = {"name", "doc", "base", "dict", NULL};
   2220 
   2221     if (!PyArg_ParseTupleAndKeywords(args, kwargs,
   2222                     "s|sOO:make_exception_with_doc", kwlist,
   2223                                      &name, &doc, &base, &dict))
   2224         return NULL;
   2225 
   2226     return PyErr_NewExceptionWithDoc(name, doc, base, dict);
   2227 }
   2228 
   2229 static PyObject *
   2230 sequence_delitem(PyObject *self, PyObject *args)
   2231 {
   2232     PyObject *seq;
   2233     Py_ssize_t i;
   2234 
   2235     if (!PyArg_ParseTuple(args, "On", &seq, &i))
   2236         return NULL;
   2237     if (PySequence_DelItem(seq, i) < 0)
   2238         return NULL;
   2239     Py_RETURN_NONE;
   2240 }
   2241 
   2242 #ifdef WITH_THREAD
   2243 typedef struct {
   2244     PyThread_type_lock start_event;
   2245     PyThread_type_lock exit_event;
   2246     PyObject *callback;
   2247 } test_c_thread_t;
   2248 
   2249 static void
   2250 temporary_c_thread(void *data)
   2251 {
   2252     test_c_thread_t *test_c_thread = data;
   2253     PyGILState_STATE state;
   2254     PyObject *res;
   2255 
   2256     PyThread_release_lock(test_c_thread->start_event);
   2257 
   2258     /* Allocate a Python thread state for this thread */
   2259     state = PyGILState_Ensure();
   2260 
   2261     res = PyObject_CallFunction(test_c_thread->callback, "", NULL);
   2262     Py_CLEAR(test_c_thread->callback);
   2263 
   2264     if (res == NULL) {
   2265         PyErr_Print();
   2266     }
   2267     else {
   2268         Py_DECREF(res);
   2269     }
   2270 
   2271     /* Destroy the Python thread state for this thread */
   2272     PyGILState_Release(state);
   2273 
   2274     PyThread_release_lock(test_c_thread->exit_event);
   2275 
   2276     PyThread_exit_thread();
   2277 }
   2278 
   2279 static PyObject *
   2280 call_in_temporary_c_thread(PyObject *self, PyObject *callback)
   2281 {
   2282     PyObject *res = NULL;
   2283     test_c_thread_t test_c_thread;
   2284     long thread;
   2285 
   2286     PyEval_InitThreads();
   2287 
   2288     test_c_thread.start_event = PyThread_allocate_lock();
   2289     test_c_thread.exit_event = PyThread_allocate_lock();
   2290     test_c_thread.callback = NULL;
   2291     if (!test_c_thread.start_event || !test_c_thread.exit_event) {
   2292         PyErr_SetString(PyExc_RuntimeError, "could not allocate lock");
   2293         goto exit;
   2294     }
   2295 
   2296     Py_INCREF(callback);
   2297     test_c_thread.callback = callback;
   2298 
   2299     PyThread_acquire_lock(test_c_thread.start_event, 1);
   2300     PyThread_acquire_lock(test_c_thread.exit_event, 1);
   2301 
   2302     thread = PyThread_start_new_thread(temporary_c_thread, &test_c_thread);
   2303     if (thread == -1) {
   2304         PyErr_SetString(PyExc_RuntimeError, "unable to start the thread");
   2305         PyThread_release_lock(test_c_thread.start_event);
   2306         PyThread_release_lock(test_c_thread.exit_event);
   2307         goto exit;
   2308     }
   2309 
   2310     PyThread_acquire_lock(test_c_thread.start_event, 1);
   2311     PyThread_release_lock(test_c_thread.start_event);
   2312 
   2313     Py_BEGIN_ALLOW_THREADS
   2314         PyThread_acquire_lock(test_c_thread.exit_event, 1);
   2315         PyThread_release_lock(test_c_thread.exit_event);
   2316     Py_END_ALLOW_THREADS
   2317 
   2318     Py_INCREF(Py_None);
   2319     res = Py_None;
   2320 
   2321 exit:
   2322     Py_CLEAR(test_c_thread.callback);
   2323     if (test_c_thread.start_event)
   2324         PyThread_free_lock(test_c_thread.start_event);
   2325     if (test_c_thread.exit_event)
   2326         PyThread_free_lock(test_c_thread.exit_event);
   2327     return res;
   2328 }
   2329 #endif   /* WITH_THREAD */
   2330 
   2331 /* marshal */
   2332 
   2333 static PyObject*
   2334 pymarshal_write_long_to_file(PyObject* self, PyObject *args)
   2335 {
   2336     long value;
   2337     char *filename;
   2338     int version;
   2339     FILE *fp;
   2340 
   2341     if (!PyArg_ParseTuple(args, "lsi:pymarshal_write_long_to_file",
   2342                           &value, &filename, &version))
   2343         return NULL;
   2344 
   2345     fp = fopen(filename, "wb");
   2346     if (fp == NULL) {
   2347         PyErr_SetFromErrno(PyExc_OSError);
   2348         return NULL;
   2349     }
   2350 
   2351     PyMarshal_WriteLongToFile(value, fp, version);
   2352 
   2353     fclose(fp);
   2354     if (PyErr_Occurred())
   2355         return NULL;
   2356     Py_RETURN_NONE;
   2357 }
   2358 
   2359 static PyObject*
   2360 pymarshal_write_object_to_file(PyObject* self, PyObject *args)
   2361 {
   2362     PyObject *obj;
   2363     char *filename;
   2364     int version;
   2365     FILE *fp;
   2366 
   2367     if (!PyArg_ParseTuple(args, "Osi:pymarshal_write_object_to_file",
   2368                           &obj, &filename, &version))
   2369         return NULL;
   2370 
   2371     fp = fopen(filename, "wb");
   2372     if (fp == NULL) {
   2373         PyErr_SetFromErrno(PyExc_OSError);
   2374         return NULL;
   2375     }
   2376 
   2377     PyMarshal_WriteObjectToFile(obj, fp, version);
   2378 
   2379     fclose(fp);
   2380     if (PyErr_Occurred())
   2381         return NULL;
   2382     Py_RETURN_NONE;
   2383 }
   2384 
   2385 static PyObject*
   2386 pymarshal_read_short_from_file(PyObject* self, PyObject *args)
   2387 {
   2388     int value;
   2389     long pos;
   2390     char *filename;
   2391     FILE *fp;
   2392 
   2393     if (!PyArg_ParseTuple(args, "s:pymarshal_read_short_from_file", &filename))
   2394         return NULL;
   2395 
   2396     fp = fopen(filename, "rb");
   2397     if (fp == NULL) {
   2398         PyErr_SetFromErrno(PyExc_OSError);
   2399         return NULL;
   2400     }
   2401 
   2402     value = PyMarshal_ReadShortFromFile(fp);
   2403     pos = ftell(fp);
   2404 
   2405     fclose(fp);
   2406     if (PyErr_Occurred())
   2407         return NULL;
   2408     return Py_BuildValue("il", value, pos);
   2409 }
   2410 
   2411 static PyObject*
   2412 pymarshal_read_long_from_file(PyObject* self, PyObject *args)
   2413 {
   2414     long value, pos;
   2415     char *filename;
   2416     FILE *fp;
   2417 
   2418     if (!PyArg_ParseTuple(args, "s:pymarshal_read_long_from_file", &filename))
   2419         return NULL;
   2420 
   2421     fp = fopen(filename, "rb");
   2422     if (fp == NULL) {
   2423         PyErr_SetFromErrno(PyExc_OSError);
   2424         return NULL;
   2425     }
   2426 
   2427     value = PyMarshal_ReadLongFromFile(fp);
   2428     pos = ftell(fp);
   2429 
   2430     fclose(fp);
   2431     if (PyErr_Occurred())
   2432         return NULL;
   2433     return Py_BuildValue("ll", value, pos);
   2434 }
   2435 
   2436 static PyObject*
   2437 pymarshal_read_last_object_from_file(PyObject* self, PyObject *args)
   2438 {
   2439     PyObject *obj;
   2440     long pos;
   2441     char *filename;
   2442     FILE *fp;
   2443 
   2444     if (!PyArg_ParseTuple(args, "s:pymarshal_read_last_object_from_file", &filename))
   2445         return NULL;
   2446 
   2447     fp = fopen(filename, "rb");
   2448     if (fp == NULL) {
   2449         PyErr_SetFromErrno(PyExc_OSError);
   2450         return NULL;
   2451     }
   2452 
   2453     obj = PyMarshal_ReadLastObjectFromFile(fp);
   2454     pos = ftell(fp);
   2455 
   2456     fclose(fp);
   2457     return Py_BuildValue("Nl", obj, pos);
   2458 }
   2459 
   2460 static PyObject*
   2461 pymarshal_read_object_from_file(PyObject* self, PyObject *args)
   2462 {
   2463     PyObject *obj;
   2464     long pos;
   2465     char *filename;
   2466     FILE *fp;
   2467 
   2468     if (!PyArg_ParseTuple(args, "s:pymarshal_read_object_from_file", &filename))
   2469         return NULL;
   2470 
   2471     fp = fopen(filename, "rb");
   2472     if (fp == NULL) {
   2473         PyErr_SetFromErrno(PyExc_OSError);
   2474         return NULL;
   2475     }
   2476 
   2477     obj = PyMarshal_ReadObjectFromFile(fp);
   2478     pos = ftell(fp);
   2479 
   2480     fclose(fp);
   2481     return Py_BuildValue("Nl", obj, pos);
   2482 }
   2483 
   2484 
   2485 static PyMethodDef TestMethods[] = {
   2486     {"raise_exception",         raise_exception,                 METH_VARARGS},
   2487     {"set_errno",               set_errno,                       METH_VARARGS},
   2488     {"test_config",             (PyCFunction)test_config,        METH_NOARGS},
   2489 #ifdef Py_USING_UNICODE
   2490     {"test_datetime_capi",  test_datetime_capi,              METH_NOARGS},
   2491 #endif
   2492     {"test_list_api",           (PyCFunction)test_list_api,      METH_NOARGS},
   2493     {"test_dict_iteration",     (PyCFunction)test_dict_iteration,METH_NOARGS},
   2494     {"test_lazy_hash_inheritance",      (PyCFunction)test_lazy_hash_inheritance,METH_NOARGS},
   2495     {"test_broken_memoryview",          (PyCFunction)test_broken_memoryview,METH_NOARGS},
   2496     {"test_to_contiguous",      (PyCFunction)test_to_contiguous, METH_NOARGS},
   2497     {"test_from_contiguous",    (PyCFunction)test_from_contiguous, METH_NOARGS},
   2498     {"test_long_api",           (PyCFunction)test_long_api,      METH_NOARGS},
   2499     {"test_long_and_overflow", (PyCFunction)test_long_and_overflow,
   2500      METH_NOARGS},
   2501     {"test_long_numbits",       (PyCFunction)test_long_numbits,  METH_NOARGS},
   2502     {"test_k_code",             (PyCFunction)test_k_code,        METH_NOARGS},
   2503 #ifdef Py_USING_UNICODE
   2504     {"test_empty_argparse", (PyCFunction)test_empty_argparse,METH_NOARGS},
   2505 #endif
   2506     {"test_null_strings",       (PyCFunction)test_null_strings,  METH_NOARGS},
   2507     {"test_string_from_format", (PyCFunction)test_string_from_format, METH_NOARGS},
   2508     {"test_with_docstring", (PyCFunction)test_with_docstring, METH_NOARGS,
   2509      PyDoc_STR("This is a pretty normal docstring.")},
   2510 
   2511     {"test_buildvalue_N",       test_buildvalue_N,               METH_NOARGS},
   2512     {"get_args", get_args, METH_VARARGS},
   2513     {"get_kwargs", (PyCFunction)get_kwargs, METH_VARARGS|METH_KEYWORDS},
   2514     {"getargs_tuple",           getargs_tuple,                   METH_VARARGS},
   2515     {"getargs_keywords", (PyCFunction)getargs_keywords,
   2516       METH_VARARGS|METH_KEYWORDS},
   2517     {"getargs_b",               getargs_b,                       METH_VARARGS},
   2518     {"getargs_B",               getargs_B,                       METH_VARARGS},
   2519     {"getargs_h",               getargs_h,                       METH_VARARGS},
   2520     {"getargs_H",               getargs_H,                       METH_VARARGS},
   2521     {"getargs_I",               getargs_I,                       METH_VARARGS},
   2522     {"getargs_k",               getargs_k,                       METH_VARARGS},
   2523     {"getargs_i",               getargs_i,                       METH_VARARGS},
   2524     {"getargs_l",               getargs_l,                       METH_VARARGS},
   2525     {"getargs_n",               getargs_n,                       METH_VARARGS},
   2526 #ifdef HAVE_LONG_LONG
   2527     {"getargs_L",               getargs_L,                       METH_VARARGS},
   2528     {"getargs_K",               getargs_K,                       METH_VARARGS},
   2529     {"test_longlong_api",       test_longlong_api,               METH_NOARGS},
   2530     {"test_long_long_and_overflow",
   2531         (PyCFunction)test_long_long_and_overflow, METH_NOARGS},
   2532     {"test_L_code",             (PyCFunction)test_L_code,        METH_NOARGS},
   2533 #endif
   2534     {"getargs_f",               getargs_f,                       METH_VARARGS},
   2535     {"getargs_d",               getargs_d,                       METH_VARARGS},
   2536     {"getargs_D",               getargs_D,                       METH_VARARGS},
   2537     {"getargs_S",               getargs_S,                       METH_VARARGS},
   2538     {"getargs_Y",               getargs_Y,                       METH_VARARGS},
   2539 #ifdef Py_USING_UNICODE
   2540     {"getargs_U",               getargs_U,                       METH_VARARGS},
   2541 #endif
   2542     {"getargs_c",               getargs_c,                       METH_VARARGS},
   2543     {"getargs_s",               getargs_s,                       METH_VARARGS},
   2544     {"getargs_s_star",          getargs_s_star,                  METH_VARARGS},
   2545     {"getargs_s_hash",          getargs_s_hash,                  METH_VARARGS},
   2546     {"getargs_t_hash",          getargs_t_hash,                  METH_VARARGS},
   2547     {"getargs_z",               getargs_z,                       METH_VARARGS},
   2548     {"getargs_z_star",          getargs_z_star,                  METH_VARARGS},
   2549     {"getargs_z_hash",          getargs_z_hash,                  METH_VARARGS},
   2550     {"getargs_w",               getargs_w,                       METH_VARARGS},
   2551     {"getargs_w_star",          getargs_w_star,                  METH_VARARGS},
   2552     {"getargs_w_hash",          getargs_w_hash,                  METH_VARARGS},
   2553 #ifdef Py_USING_UNICODE
   2554     {"getargs_u",               getargs_u,                       METH_VARARGS},
   2555     {"getargs_u_hash",          getargs_u_hash,                  METH_VARARGS},
   2556 #endif
   2557     {"getargs_es",              getargs_es,                      METH_VARARGS},
   2558     {"getargs_et",              getargs_et,                      METH_VARARGS},
   2559     {"getargs_es_hash",         getargs_es_hash,                 METH_VARARGS},
   2560     {"getargs_et_hash",         getargs_et_hash,                 METH_VARARGS},
   2561 #ifdef Py_USING_UNICODE
   2562     {"codec_incrementalencoder",
   2563      (PyCFunction)codec_incrementalencoder,      METH_VARARGS},
   2564     {"codec_incrementaldecoder",
   2565      (PyCFunction)codec_incrementaldecoder,      METH_VARARGS},
   2566     {"test_u_code",             (PyCFunction)test_u_code,        METH_NOARGS},
   2567     {"test_widechar",           (PyCFunction)test_widechar,      METH_NOARGS},
   2568     {"unicode_encodedecimal",   unicode_encodedecimal,           METH_VARARGS},
   2569 #endif
   2570 #ifdef WITH_THREAD
   2571     {"_test_thread_state",  test_thread_state,                   METH_VARARGS},
   2572     {"_pending_threadfunc",     pending_threadfunc,              METH_VARARGS},
   2573 #endif
   2574     {"test_capsule", (PyCFunction)test_capsule, METH_NOARGS},
   2575     {"traceback_print", traceback_print,                 METH_VARARGS},
   2576     {"code_newempty", code_newempty,                     METH_VARARGS},
   2577     {"make_exception_with_doc", (PyCFunction)make_exception_with_doc,
   2578      METH_VARARGS | METH_KEYWORDS},
   2579     {"sequence_delitem", (PyCFunction)sequence_delitem, METH_VARARGS},
   2580 #ifdef WITH_THREAD
   2581     {"call_in_temporary_c_thread", call_in_temporary_c_thread, METH_O,
   2582      PyDoc_STR("set_error_class(error_class) -> None")},
   2583 #endif
   2584     {"pymarshal_write_long_to_file",
   2585         pymarshal_write_long_to_file, METH_VARARGS},
   2586     {"pymarshal_write_object_to_file",
   2587         pymarshal_write_object_to_file, METH_VARARGS},
   2588     {"pymarshal_read_short_from_file",
   2589         pymarshal_read_short_from_file, METH_VARARGS},
   2590     {"pymarshal_read_long_from_file",
   2591         pymarshal_read_long_from_file, METH_VARARGS},
   2592     {"pymarshal_read_last_object_from_file",
   2593         pymarshal_read_last_object_from_file, METH_VARARGS},
   2594     {"pymarshal_read_object_from_file",
   2595         pymarshal_read_object_from_file, METH_VARARGS},
   2596     {NULL, NULL} /* sentinel */
   2597 };
   2598 
   2599 #define AddSym(d, n, f, v) {PyObject *o = f(v); PyDict_SetItemString(d, n, o); Py_DECREF(o);}
   2600 
   2601 typedef struct {
   2602     char bool_member;
   2603     char byte_member;
   2604     unsigned char ubyte_member;
   2605     short short_member;
   2606     unsigned short ushort_member;
   2607     int int_member;
   2608     unsigned int uint_member;
   2609     long long_member;
   2610     unsigned long ulong_member;
   2611     float float_member;
   2612     double double_member;
   2613     char inplace_member[6];
   2614 #ifdef HAVE_LONG_LONG
   2615     PY_LONG_LONG longlong_member;
   2616     unsigned PY_LONG_LONG ulonglong_member;
   2617 #endif
   2618 } all_structmembers;
   2619 
   2620 typedef struct {
   2621     PyObject_HEAD
   2622     all_structmembers structmembers;
   2623 } test_structmembers;
   2624 
   2625 static struct PyMemberDef test_members[] = {
   2626     {"T_BOOL", T_BOOL, offsetof(test_structmembers, structmembers.bool_member), 0, NULL},
   2627     {"T_BYTE", T_BYTE, offsetof(test_structmembers, structmembers.byte_member), 0, NULL},
   2628     {"T_UBYTE", T_UBYTE, offsetof(test_structmembers, structmembers.ubyte_member), 0, NULL},
   2629     {"T_SHORT", T_SHORT, offsetof(test_structmembers, structmembers.short_member), 0, NULL},
   2630     {"T_USHORT", T_USHORT, offsetof(test_structmembers, structmembers.ushort_member), 0, NULL},
   2631     {"T_INT", T_INT, offsetof(test_structmembers, structmembers.int_member), 0, NULL},
   2632     {"T_UINT", T_UINT, offsetof(test_structmembers, structmembers.uint_member), 0, NULL},
   2633     {"T_LONG", T_LONG, offsetof(test_structmembers, structmembers.long_member), 0, NULL},
   2634     {"T_ULONG", T_ULONG, offsetof(test_structmembers, structmembers.ulong_member), 0, NULL},
   2635     {"T_FLOAT", T_FLOAT, offsetof(test_structmembers, structmembers.float_member), 0, NULL},
   2636     {"T_DOUBLE", T_DOUBLE, offsetof(test_structmembers, structmembers.double_member), 0, NULL},
   2637     {"T_STRING_INPLACE", T_STRING_INPLACE, offsetof(test_structmembers, structmembers.inplace_member), 0, NULL},
   2638 #ifdef HAVE_LONG_LONG
   2639     {"T_LONGLONG", T_LONGLONG, offsetof(test_structmembers, structmembers.longlong_member), 0, NULL},
   2640     {"T_ULONGLONG", T_ULONGLONG, offsetof(test_structmembers, structmembers.ulonglong_member), 0, NULL},
   2641 #endif
   2642     {NULL}
   2643 };
   2644 
   2645 
   2646 static PyObject *
   2647 test_structmembers_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
   2648 {
   2649     static char *keywords[] = {
   2650         "T_BOOL", "T_BYTE", "T_UBYTE", "T_SHORT", "T_USHORT",
   2651         "T_INT", "T_UINT", "T_LONG", "T_ULONG",
   2652         "T_FLOAT", "T_DOUBLE", "T_STRING_INPLACE",
   2653 #ifdef HAVE_LONG_LONG
   2654         "T_LONGLONG", "T_ULONGLONG",
   2655 #endif
   2656         NULL};
   2657     static char *fmt = "|bbBhHiIlkfds#"
   2658 #ifdef HAVE_LONG_LONG
   2659         "LK"
   2660 #endif
   2661         ;
   2662     test_structmembers *ob;
   2663     const char *s = NULL;
   2664     int string_len = 0;
   2665     ob = PyObject_New(test_structmembers, type);
   2666     if (ob == NULL)
   2667         return NULL;
   2668     memset(&ob->structmembers, 0, sizeof(all_structmembers));
   2669     if (!PyArg_ParseTupleAndKeywords(args, kwargs, fmt, keywords,
   2670                                      &ob->structmembers.bool_member,
   2671                                      &ob->structmembers.byte_member,
   2672                                      &ob->structmembers.ubyte_member,
   2673                                      &ob->structmembers.short_member,
   2674                                      &ob->structmembers.ushort_member,
   2675                                      &ob->structmembers.int_member,
   2676                                      &ob->structmembers.uint_member,
   2677                                      &ob->structmembers.long_member,
   2678                                      &ob->structmembers.ulong_member,
   2679                                      &ob->structmembers.float_member,
   2680                                      &ob->structmembers.double_member,
   2681                                      &s, &string_len
   2682 #ifdef HAVE_LONG_LONG
   2683                                      , &ob->structmembers.longlong_member,
   2684                                      &ob->structmembers.ulonglong_member
   2685 #endif
   2686         )) {
   2687         Py_DECREF(ob);
   2688         return NULL;
   2689     }
   2690     if (s != NULL) {
   2691         if (string_len > 5) {
   2692             Py_DECREF(ob);
   2693             PyErr_SetString(PyExc_ValueError, "string too long");
   2694             return NULL;
   2695         }
   2696         strcpy(ob->structmembers.inplace_member, s);
   2697     }
   2698     else {
   2699         strcpy(ob->structmembers.inplace_member, "");
   2700     }
   2701     return (PyObject *)ob;
   2702 }
   2703 
   2704 static void
   2705 test_structmembers_free(PyObject *ob)
   2706 {
   2707     PyObject_FREE(ob);
   2708 }
   2709 
   2710 static PyTypeObject test_structmembersType = {
   2711     PyVarObject_HEAD_INIT(NULL, 0)
   2712     "test_structmembersType",
   2713     sizeof(test_structmembers),         /* tp_basicsize */
   2714     0,                                  /* tp_itemsize */
   2715     test_structmembers_free,            /* destructor tp_dealloc */
   2716     0,                                  /* tp_print */
   2717     0,                                  /* tp_getattr */
   2718     0,                                  /* tp_setattr */
   2719     0,                                  /* tp_compare */
   2720     0,                                  /* tp_repr */
   2721     0,                                  /* tp_as_number */
   2722     0,                                  /* tp_as_sequence */
   2723     0,                                  /* tp_as_mapping */
   2724     0,                                  /* tp_hash */
   2725     0,                                  /* tp_call */
   2726     0,                                  /* tp_str */
   2727     PyObject_GenericGetAttr,            /* tp_getattro */
   2728     PyObject_GenericSetAttr,            /* tp_setattro */
   2729     0,                                  /* tp_as_buffer */
   2730     0,                                  /* tp_flags */
   2731     "Type containing all structmember types",
   2732     0,                                  /* traverseproc tp_traverse */
   2733     0,                                  /* tp_clear */
   2734     0,                                  /* tp_richcompare */
   2735     0,                                  /* tp_weaklistoffset */
   2736     0,                                  /* tp_iter */
   2737     0,                                  /* tp_iternext */
   2738     0,                                  /* tp_methods */
   2739     test_members,                       /* tp_members */
   2740     0,
   2741     0,
   2742     0,
   2743     0,
   2744     0,
   2745     0,
   2746     0,
   2747     0,
   2748     test_structmembers_new,             /* tp_new */
   2749 };
   2750 
   2751 
   2752 PyMODINIT_FUNC
   2753 init_testcapi(void)
   2754 {
   2755     PyObject *m;
   2756 
   2757     m = Py_InitModule("_testcapi", TestMethods);
   2758     if (m == NULL)
   2759         return;
   2760 
   2761     Py_TYPE(&_HashInheritanceTester_Type)=&PyType_Type;
   2762 
   2763     Py_TYPE(&test_structmembersType)=&PyType_Type;
   2764     Py_INCREF(&test_structmembersType);
   2765     /* don't use a name starting with "test", since we don't want
   2766        test_capi to automatically call this */
   2767     PyModule_AddObject(m, "_test_structmembersType", (PyObject *)&test_structmembersType);
   2768 
   2769     PyModule_AddObject(m, "CHAR_MAX", PyInt_FromLong(CHAR_MAX));
   2770     PyModule_AddObject(m, "CHAR_MIN", PyInt_FromLong(CHAR_MIN));
   2771     PyModule_AddObject(m, "UCHAR_MAX", PyInt_FromLong(UCHAR_MAX));
   2772     PyModule_AddObject(m, "SHRT_MAX", PyInt_FromLong(SHRT_MAX));
   2773     PyModule_AddObject(m, "SHRT_MIN", PyInt_FromLong(SHRT_MIN));
   2774     PyModule_AddObject(m, "USHRT_MAX", PyInt_FromLong(USHRT_MAX));
   2775     PyModule_AddObject(m, "INT_MAX",  PyLong_FromLong(INT_MAX));
   2776     PyModule_AddObject(m, "INT_MIN",  PyLong_FromLong(INT_MIN));
   2777     PyModule_AddObject(m, "UINT_MAX",  PyLong_FromUnsignedLong(UINT_MAX));
   2778     PyModule_AddObject(m, "LONG_MAX", PyInt_FromLong(LONG_MAX));
   2779     PyModule_AddObject(m, "LONG_MIN", PyInt_FromLong(LONG_MIN));
   2780     PyModule_AddObject(m, "ULONG_MAX", PyLong_FromUnsignedLong(ULONG_MAX));
   2781     PyModule_AddObject(m, "FLT_MAX", PyFloat_FromDouble(FLT_MAX));
   2782     PyModule_AddObject(m, "FLT_MIN", PyFloat_FromDouble(FLT_MIN));
   2783     PyModule_AddObject(m, "DBL_MAX", PyFloat_FromDouble(DBL_MAX));
   2784     PyModule_AddObject(m, "DBL_MIN", PyFloat_FromDouble(DBL_MIN));
   2785     PyModule_AddObject(m, "LLONG_MAX", PyLong_FromLongLong(PY_LLONG_MAX));
   2786     PyModule_AddObject(m, "LLONG_MIN", PyLong_FromLongLong(PY_LLONG_MIN));
   2787     PyModule_AddObject(m, "ULLONG_MAX", PyLong_FromUnsignedLongLong(PY_ULLONG_MAX));
   2788     PyModule_AddObject(m, "PY_SSIZE_T_MAX", PyInt_FromSsize_t(PY_SSIZE_T_MAX));
   2789     PyModule_AddObject(m, "PY_SSIZE_T_MIN", PyInt_FromSsize_t(PY_SSIZE_T_MIN));
   2790     PyModule_AddObject(m, "SIZEOF_PYGC_HEAD", PyInt_FromSsize_t(sizeof(PyGC_Head)));
   2791 
   2792     TestError = PyErr_NewException("_testcapi.error", NULL, NULL);
   2793     Py_INCREF(TestError);
   2794     PyModule_AddObject(m, "error", TestError);
   2795 }
   2796