diff options
author | Tim Peters <tim.peters@gmail.com> | 2001-02-04 03:09:53 (GMT) |
---|---|---|
committer | Tim Peters <tim.peters@gmail.com> | 2001-02-04 03:09:53 (GMT) |
commit | d66595fe423227f3bf8ea4867df5d27c6d2764e1 (patch) | |
tree | 678405a81330c78c8525ddc817350654c04dfaee /Modules/_testcapimodule.c | |
parent | 693291ba23d6406af58dd46066748a8d713fd1ba (diff) | |
download | cpython-d66595fe423227f3bf8ea4867df5d27c6d2764e1.zip cpython-d66595fe423227f3bf8ea4867df5d27c6d2764e1.tar.gz cpython-d66595fe423227f3bf8ea4867df5d27c6d2764e1.tar.bz2 |
Renamed _testXXX to _testcapiXXX. Jack is my hero -- good call!
Diffstat (limited to 'Modules/_testcapimodule.c')
-rw-r--r-- | Modules/_testcapimodule.c | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/Modules/_testcapimodule.c b/Modules/_testcapimodule.c new file mode 100644 index 0000000..1b3b596 --- /dev/null +++ b/Modules/_testcapimodule.c @@ -0,0 +1,68 @@ +/* + * C Extension module to test Python interpreter C APIs. + * + * The 'test_*' functions exported by this module are run as part of the + * standard Python regression test, via Lib/test/test_capi.py. + */ + +#include "Python.h" + +static PyObject *TestError; /* set to exception object in init */ + +/* Test #defines from config.h (particularly the SIZEOF_* defines). + + The ones derived from autoconf on the UNIX-like OSes can be relied + upon (in the absence of sloppy cross-compiling), but the Windows + platforms have these hardcoded. Better safe than sorry. +*/ +static PyObject* +sizeof_error(const char* fatname, const char* typename, + int expected, int got) +{ + char buf[1024]; + sprintf(buf, "%s #define == %d but sizeof(%s) == %d", + fatname, expected, typename, got); + PyErr_SetString(TestError, buf); + return (PyObject*)NULL; +} + +static PyObject* +test_config(PyObject *self, PyObject *args) +{ + if (!PyArg_ParseTuple(args, ":test_config")) + return NULL; + +#define CHECK_SIZEOF(FATNAME, TYPE) \ + if (FATNAME != sizeof(TYPE)) \ + return sizeof_error(#FATNAME, #TYPE, FATNAME, sizeof(TYPE)) + + CHECK_SIZEOF(SIZEOF_INT, int); + CHECK_SIZEOF(SIZEOF_LONG, long); + CHECK_SIZEOF(SIZEOF_VOID_P, void*); + CHECK_SIZEOF(SIZEOF_TIME_T, time_t); +#ifdef HAVE_LONG_LONG + CHECK_SIZEOF(SIZEOF_LONG_LONG, LONG_LONG); +#endif + +#undef CHECK_SIZEOF + + Py_INCREF(Py_None); + return Py_None; +} + +static PyMethodDef TestMethods[] = { + {"test_config", test_config, METH_VARARGS}, + {NULL, NULL} /* sentinel */ +}; + +DL_EXPORT(void) +init_testcapi(void) +{ + PyObject *m, *d; + + m = Py_InitModule("_testcapi", TestMethods); + + TestError = PyErr_NewException("_testcapi.error", NULL, NULL); + d = PyModule_GetDict(m); + PyDict_SetItemString(d, "error", TestError); +} |