Mercurial > cpython-lru_cache-weakref
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 |
| 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 } |
