/*
 * Test the limited C API.
 *
 * The 'test_*' functions exported by this module are run as part of the
 * standard Python regression test, via Lib/test/test_capi.py.
 */

#include "_testlimitedcapi/parts.h"

static PyMethodDef TestMethods[] = {
    {NULL, NULL} /* sentinel */
};

static struct PyModuleDef _testlimitedcapimodule = {
    PyModuleDef_HEAD_INIT,
    .m_name = "_testlimitedcapi",
    .m_size = 0,
    .m_methods = TestMethods,
};

PyMODINIT_FUNC
PyInit__testlimitedcapi(void)
{
    PyObject *mod = PyModule_Create(&_testlimitedcapimodule);
    if (mod == NULL) {
        return NULL;
    }

    if (_PyTestLimitedCAPI_Init_Abstract(mod) < 0) {
        return NULL;
    }
    if (_PyTestLimitedCAPI_Init_ByteArray(mod) < 0) {
        return NULL;
    }
    if (_PyTestLimitedCAPI_Init_Bytes(mod) < 0) {
        return NULL;
    }
    if (_PyTestLimitedCAPI_Init_Complex(mod) < 0) {
        return NULL;
    }
    if (_PyTestLimitedCAPI_Init_Dict(mod) < 0) {
        return NULL;
    }
    if (_PyTestLimitedCAPI_Init_Float(mod) < 0) {
        return NULL;
    }
    if (_PyTestLimitedCAPI_Init_HeaptypeRelative(mod) < 0) {
        return NULL;
    }
    if (_PyTestLimitedCAPI_Init_List(mod) < 0) {
        return NULL;
    }
    if (_PyTestLimitedCAPI_Init_Long(mod) < 0) {
        return NULL;
    }
    if (_PyTestLimitedCAPI_Init_Object(mod) < 0) {
        return NULL;
    }
    if (_PyTestLimitedCAPI_Init_PyOS(mod) < 0) {
        return NULL;
    }
    if (_PyTestLimitedCAPI_Init_Set(mod) < 0) {
        return NULL;
    }
    if (_PyTestLimitedCAPI_Init_Sys(mod) < 0) {
        return NULL;
    }
    if (_PyTestLimitedCAPI_Init_Unicode(mod) < 0) {
        return NULL;
    }
    if (_PyTestLimitedCAPI_Init_VectorcallLimited(mod) < 0) {
        return NULL;
    }
    return mod;
}
