summaryrefslogtreecommitdiff
path: root/numpy/core/src
diff options
context:
space:
mode:
authorHenning Dickten <hdickten@uni-bonn.de>2014-12-01 00:25:50 +0100
committerCharles Harris <charlesr.harris@gmail.com>2015-01-02 12:24:29 -0700
commit1e052f387fccc0625e423e23b92a590d211e4a10 (patch)
tree292626471e77f829b9bee3429fc36300eb2a49f9 /numpy/core/src
parent3b6217f3799f85686c1ae87bbdc5cb10ad4585ec (diff)
downloadnumpy-1e052f387fccc0625e423e23b92a590d211e4a10.tar.gz
TST: added test for PyArray_AsCArray #5313
Diffstat (limited to 'numpy/core/src')
-rw-r--r--numpy/core/src/multiarray/multiarray_tests.c.src78
1 files changed, 78 insertions, 0 deletions
diff --git a/numpy/core/src/multiarray/multiarray_tests.c.src b/numpy/core/src/multiarray/multiarray_tests.c.src
index bd0366bd5..8de29e7bf 100644
--- a/numpy/core/src/multiarray/multiarray_tests.c.src
+++ b/numpy/core/src/multiarray/multiarray_tests.c.src
@@ -719,6 +719,81 @@ array_indexing(PyObject *NPY_UNUSED(self), PyObject *args)
return NULL;
}
+/*
+ * Test C-api PyArray_AsCArray item getter
+ */
+static PyObject *
+test_as_c_array(PyObject *NPY_UNUSED(self), PyObject *args)
+{
+ PyArrayObject *array_obj;
+ npy_intp dims[3]; // max 3-dim
+ npy_intp i=0, j=0, k=0;
+ npy_intp num_dims = 0;
+ PyArray_Descr *descr = NULL;
+ double *array1 = NULL;
+ double **array2 = NULL;
+ double ***array3 = NULL;
+ double temp = 9999;
+
+ if (!PyArg_ParseTuple(args, "O!l|ll",
+ &PyArray_Type, &array_obj,
+ &i, &j, &k)) {
+ return NULL;
+ }
+
+ if (NULL == array_obj) {
+ return NULL;
+ }
+
+ num_dims = PyArray_NDIM(array_obj);
+ descr = PyArray_DESCR(array_obj);
+
+ switch (num_dims) {
+ case 1:
+ if (PyArray_AsCArray(
+ (PyObject **) &array_obj,
+ (void *) &array1,
+ dims,
+ 1,
+ descr) < 0) {
+ PyErr_SetString(PyExc_RuntimeError, "error converting 1D array");
+ return NULL;
+ }
+ temp = array1[i];
+ PyArray_Free((PyObject *) array_obj, (void *) array1);
+ break;
+ case 2:
+ if (PyArray_AsCArray(
+ (PyObject **) &array_obj,
+ (void **) &array2,
+ dims,
+ 2,
+ descr) < 0) {
+ PyErr_SetString(PyExc_RuntimeError, "error converting 2D array");
+ return NULL;
+ }
+ temp = array2[i][j];
+ PyArray_Free((PyObject *) array_obj, (void *) array2);
+ break;
+ case 3:
+ if (PyArray_AsCArray(
+ (PyObject **) &array_obj,
+ (void ***) &array3,
+ dims,
+ 3,
+ descr) < 0) {
+ PyErr_SetString(PyExc_RuntimeError, "error converting 3D array");
+ return NULL;
+ }
+ temp = array3[i][j][k];
+ PyArray_Free((PyObject *) array_obj, (void *) array3);
+ break;
+ default:
+ PyErr_SetString(PyExc_ValueError, "array.ndim not in [1, 3]");
+ return NULL;
+ }
+ return Py_BuildValue("f", temp);
+}
/*
* Test nditer of too large arrays using remove axis, etc.
@@ -850,6 +925,9 @@ static PyMethodDef Multiarray_TestsMethods[] = {
{"array_indexing",
array_indexing,
METH_VARARGS, NULL},
+ {"test_as_c_array",
+ test_as_c_array,
+ METH_VARARGS, NULL},
{"test_nditer_too_large",
test_nditer_too_large,
METH_VARARGS, NULL},