annotate Modules/_testmodule.c @ 16413:8819867f14ef legacy-trunk

Patch derived from Trent's 101162: a Python/C API testing framework. STILL NEEDS UNIX BUILD CHANGES.
author Tim Peters <tim.peters@gmail.com>
date Fri, 02 Feb 2001 05:57:15 +0000
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
16413
8819867f14ef Patch derived from Trent's 101162: a Python/C API testing framework.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
1 /*
8819867f14ef Patch derived from Trent's 101162: a Python/C API testing framework.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
2 * C Extension module to test Python interpreter C APIs.
8819867f14ef Patch derived from Trent's 101162: a Python/C API testing framework.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
3 *
8819867f14ef Patch derived from Trent's 101162: a Python/C API testing framework.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
4 * The 'test_*' functions exported by this module are run as part of the
8819867f14ef Patch derived from Trent's 101162: a Python/C API testing framework.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
5 * standard Python regression test, via Lib/test/test_capi.py.
8819867f14ef Patch derived from Trent's 101162: a Python/C API testing framework.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
6 */
8819867f14ef Patch derived from Trent's 101162: a Python/C API testing framework.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
7
8819867f14ef Patch derived from Trent's 101162: a Python/C API testing framework.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
8 #include "Python.h"
8819867f14ef Patch derived from Trent's 101162: a Python/C API testing framework.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
9
8819867f14ef Patch derived from Trent's 101162: a Python/C API testing framework.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
10 static PyObject *TestError; /* set to exception object in init */
8819867f14ef Patch derived from Trent's 101162: a Python/C API testing framework.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
11
8819867f14ef Patch derived from Trent's 101162: a Python/C API testing framework.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
12 /* Test #defines from config.h (particularly the SIZEOF_* defines).
8819867f14ef Patch derived from Trent's 101162: a Python/C API testing framework.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
13
8819867f14ef Patch derived from Trent's 101162: a Python/C API testing framework.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
14 The ones derived from autoconf on the UNIX-like OSes can be relied
8819867f14ef Patch derived from Trent's 101162: a Python/C API testing framework.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
15 upon (in the absence of sloppy cross-compiling), but the Windows
8819867f14ef Patch derived from Trent's 101162: a Python/C API testing framework.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
16 platforms have these hardcoded. Better safe than sorry.
8819867f14ef Patch derived from Trent's 101162: a Python/C API testing framework.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
17 */
8819867f14ef Patch derived from Trent's 101162: a Python/C API testing framework.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
18 static PyObject*
8819867f14ef Patch derived from Trent's 101162: a Python/C API testing framework.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
19 sizeof_error(const char* fatname, const char* typename,
8819867f14ef Patch derived from Trent's 101162: a Python/C API testing framework.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
20 int expected, int got)
8819867f14ef Patch derived from Trent's 101162: a Python/C API testing framework.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
21 {
8819867f14ef Patch derived from Trent's 101162: a Python/C API testing framework.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
22 char buf[1024];
8819867f14ef Patch derived from Trent's 101162: a Python/C API testing framework.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
23 sprintf(buf, "%s #define == %d but sizeof(%s) == %d",
8819867f14ef Patch derived from Trent's 101162: a Python/C API testing framework.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
24 fatname, expected, typename, got);
8819867f14ef Patch derived from Trent's 101162: a Python/C API testing framework.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
25 PyErr_SetString(TestError, buf);
8819867f14ef Patch derived from Trent's 101162: a Python/C API testing framework.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
26 return (PyObject*)NULL;
8819867f14ef Patch derived from Trent's 101162: a Python/C API testing framework.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
27 }
8819867f14ef Patch derived from Trent's 101162: a Python/C API testing framework.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
28
8819867f14ef Patch derived from Trent's 101162: a Python/C API testing framework.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
29 static PyObject*
8819867f14ef Patch derived from Trent's 101162: a Python/C API testing framework.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
30 test_config(PyObject *self, PyObject *args)
8819867f14ef Patch derived from Trent's 101162: a Python/C API testing framework.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
31 {
8819867f14ef Patch derived from Trent's 101162: a Python/C API testing framework.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
32 if (!PyArg_ParseTuple(args, ":test_config"))
8819867f14ef Patch derived from Trent's 101162: a Python/C API testing framework.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
33 return NULL;
8819867f14ef Patch derived from Trent's 101162: a Python/C API testing framework.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
34
8819867f14ef Patch derived from Trent's 101162: a Python/C API testing framework.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
35 #define CHECK_SIZEOF(FATNAME, TYPE) \
8819867f14ef Patch derived from Trent's 101162: a Python/C API testing framework.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
36 if (FATNAME != sizeof(TYPE)) \
8819867f14ef Patch derived from Trent's 101162: a Python/C API testing framework.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
37 return sizeof_error(#FATNAME, #TYPE, FATNAME, sizeof(TYPE))
8819867f14ef Patch derived from Trent's 101162: a Python/C API testing framework.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
38
8819867f14ef Patch derived from Trent's 101162: a Python/C API testing framework.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
39 CHECK_SIZEOF(SIZEOF_INT, int);
8819867f14ef Patch derived from Trent's 101162: a Python/C API testing framework.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
40 CHECK_SIZEOF(SIZEOF_LONG, long);
8819867f14ef Patch derived from Trent's 101162: a Python/C API testing framework.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
41 CHECK_SIZEOF(SIZEOF_VOID_P, void*);
8819867f14ef Patch derived from Trent's 101162: a Python/C API testing framework.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
42 CHECK_SIZEOF(SIZEOF_TIME_T, time_t);
8819867f14ef Patch derived from Trent's 101162: a Python/C API testing framework.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
43 #ifdef HAVE_LONG_LONG
8819867f14ef Patch derived from Trent's 101162: a Python/C API testing framework.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
44 CHECK_SIZEOF(SIZEOF_LONG_LONG, LONG_LONG);
8819867f14ef Patch derived from Trent's 101162: a Python/C API testing framework.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
45 #endif
8819867f14ef Patch derived from Trent's 101162: a Python/C API testing framework.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
46
8819867f14ef Patch derived from Trent's 101162: a Python/C API testing framework.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
47 #undef CHECK_SIZEOF
8819867f14ef Patch derived from Trent's 101162: a Python/C API testing framework.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
48
8819867f14ef Patch derived from Trent's 101162: a Python/C API testing framework.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
49 Py_INCREF(Py_None);
8819867f14ef Patch derived from Trent's 101162: a Python/C API testing framework.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
50 return Py_None;
8819867f14ef Patch derived from Trent's 101162: a Python/C API testing framework.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
51 }
8819867f14ef Patch derived from Trent's 101162: a Python/C API testing framework.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
52
8819867f14ef Patch derived from Trent's 101162: a Python/C API testing framework.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
53 static PyMethodDef TestMethods[] = {
8819867f14ef Patch derived from Trent's 101162: a Python/C API testing framework.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
54 {"test_config", test_config, METH_VARARGS},
8819867f14ef Patch derived from Trent's 101162: a Python/C API testing framework.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
55 {NULL, NULL} /* sentinel */
8819867f14ef Patch derived from Trent's 101162: a Python/C API testing framework.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
56 };
8819867f14ef Patch derived from Trent's 101162: a Python/C API testing framework.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
57
8819867f14ef Patch derived from Trent's 101162: a Python/C API testing framework.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
58 DL_EXPORT(void)
8819867f14ef Patch derived from Trent's 101162: a Python/C API testing framework.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
59 init_test(void)
8819867f14ef Patch derived from Trent's 101162: a Python/C API testing framework.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
60 {
8819867f14ef Patch derived from Trent's 101162: a Python/C API testing framework.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
61 PyObject *m, *d;
8819867f14ef Patch derived from Trent's 101162: a Python/C API testing framework.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
62
8819867f14ef Patch derived from Trent's 101162: a Python/C API testing framework.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
63 m = Py_InitModule("_test", TestMethods);
8819867f14ef Patch derived from Trent's 101162: a Python/C API testing framework.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
64
8819867f14ef Patch derived from Trent's 101162: a Python/C API testing framework.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
65 TestError = PyErr_NewException("_test.error", NULL, NULL);
8819867f14ef Patch derived from Trent's 101162: a Python/C API testing framework.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
66 d = PyModule_GetDict(m);
8819867f14ef Patch derived from Trent's 101162: a Python/C API testing framework.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
67 PyDict_SetItemString(d, "error", TestError);
8819867f14ef Patch derived from Trent's 101162: a Python/C API testing framework.
Tim Peters <tim.peters@gmail.com>
parents:
diff changeset
68 }