Adding mxGetJc and related tests 84/19384/7
Siddhartha Gairola [Thu, 17 Aug 2017 15:58:00 +0000 (20:58 +0530)]
Change-Id: I9a9507b01864f739758ed45d024b0282d376cf19

scilab/modules/mexlib/src/cpp/mexlib.cpp
scilab/modules/mexlib/tests/unit_tests/mxGetJc.dia.ref [new file with mode: 0644]
scilab/modules/mexlib/tests/unit_tests/mxGetJc.tst [new file with mode: 0644]

index 9ec8dcf..f2138e9 100644 (file)
@@ -1637,8 +1637,24 @@ void mxSetIr(mxArray *array_ptr, int *ir_data)
 
 int *mxGetJc(const mxArray *ptr)
 {
-    // TODO
-    return NULL;
+    if (mxIsSparse(ptr) == 0)
+    {
+        return NULL;
+    }
+
+    types::InternalType *pIT = (types::InternalType *)ptr->ptr;
+    if (pIT == NULL || pIT->isGenericType() == false)
+    {
+        return NULL;
+    }
+                    
+    types::GenericType *pGT = pIT->getAs<types::GenericType>();
+
+    int nzmax = ((types::Sparse *)pGT)->nonZeros();
+    int *colPos = new int[nzmax];
+    ((types::Sparse *)pGT)->getColPos(colPos);
+
+    return colPos;
 }
 
 void mxSetJc(mxArray *array_ptr, int *jc_data)
diff --git a/scilab/modules/mexlib/tests/unit_tests/mxGetJc.dia.ref b/scilab/modules/mexlib/tests/unit_tests/mxGetJc.dia.ref
new file mode 100644 (file)
index 0000000..e4b3dcd
--- /dev/null
@@ -0,0 +1,28 @@
+// ============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2017-2017 - Gsoc 2017 - Siddhartha Gairola
+//
+//  This file is distributed under the same license as the Scilab package.
+// ============================================================================
+
+// <-- CLI SHELL MODE -->
+// ============================================================================
+// Unitary tests for mxGetJc mex function
+// ============================================================================
+cd(TMPDIR);
+ilib_verbose(0);
+mputl(["#include ""mex.h""";
+"void mexFunction(int nlhs, mxArray *plhs[], int nrhs, mxArray *prhs[])";
+"{";
+"    int ndim = 3;";
+"    int *jc = mxGetJc(prhs[0]);";
+"    mxArray *ptr = mxCreateNumericMatrix(1, ndim, mxINT32_CLASS, mxREAL);";
+"    mxSetPr(ptr, jc);";
+"    plhs[0] = ptr;";
+"}"],"mexgetJc.c");
+ilib_mex_build("libmextest",["getJc","mexgetJc","cmex"], "mexgetJc.c",[]);
+exec("loader.sce");
+sp1 = sparse([1 2 3]);
+sp2 = sparse([1 1 1]);
+assert_checkequal(getJc(sp1), int32([1 2 3]));
+assert_checkequal(getJc(sp2), int32([1 2 3]));
diff --git a/scilab/modules/mexlib/tests/unit_tests/mxGetJc.tst b/scilab/modules/mexlib/tests/unit_tests/mxGetJc.tst
new file mode 100644 (file)
index 0000000..6e058ff
--- /dev/null
@@ -0,0 +1,31 @@
+// ============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2017-2017 - Gsoc 2017 - Siddhartha Gairola
+//
+//  This file is distributed under the same license as the Scilab package.
+// ============================================================================
+
+// <-- CLI SHELL MODE -->
+// ============================================================================
+// Unitary tests for mxGetJc mex function
+// ============================================================================
+
+cd(TMPDIR);
+ilib_verbose(0);
+mputl(["#include ""mex.h""";
+"void mexFunction(int nlhs, mxArray *plhs[], int nrhs, mxArray *prhs[])";
+"{";
+"    int ndim = 3;";
+"    int *jc = mxGetJc(prhs[0]);";
+"    mxArray *ptr = mxCreateNumericMatrix(1, ndim, mxINT32_CLASS, mxREAL);";
+"    mxSetPr(ptr, jc);";
+"    plhs[0] = ptr;";
+"}"],"mexgetJc.c");
+ilib_mex_build("libmextest",["getJc","mexgetJc","cmex"], "mexgetJc.c",[]);
+exec("loader.sce");
+
+
+sp1 = sparse([1 2 3]);
+sp2 = sparse([1 1 1]);
+assert_checkequal(getJc(sp1), int32([1 2 3]));
+assert_checkequal(getJc(sp2), int32([1 2 3]));