Added mxIsSparse Function and tests 94/19294/6
Siddhartha Gairola [Wed, 21 Jun 2017 19:58:05 +0000 (00:58 +0530)]
Change-Id: I3ea28673cf5834fe0fce534588fcd9854a210989

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

index d731a9f..4575793 100644 (file)
@@ -682,8 +682,18 @@ int mxIsEmpty(const mxArray *ptr)
 
 int mxIsSparse(const mxArray *ptr)
 {
-    //TODO
-    return 0;
+    types::InternalType *pIT = (types::InternalType *)ptr->ptr;
+    if (pIT == NULL || pIT->isGenericType() == false)
+    {
+        return 0;
+    }
+
+    types::GenericType *pGT = pIT->getAs<types::GenericType>();
+
+    if (pGT->isSparse() == true)
+        return 1;
+    else
+        return 0;
 }
 
 int mxIsFromGlobalWS(const mxArray *pm)
diff --git a/scilab/modules/mexlib/tests/unit_tests/mxIsSparse.dia.ref b/scilab/modules/mexlib/tests/unit_tests/mxIsSparse.dia.ref
new file mode 100644 (file)
index 0000000..ccb9cc0
--- /dev/null
@@ -0,0 +1,26 @@
+// ============================================================================
+// 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 mxIsSparse mex function
+// ============================================================================
+cd(TMPDIR);
+ilib_verbose(0);
+mputl(["#include ""mex.h""";
+"void mexFunction(int nlhs, mxArray *plhs[], int nrhs, mxArray *prhs[])";
+"{";
+"    bool isSparse = mxIsSparse(prhs[0]);";
+"    mxArray* pOut = mxCreateLogicalScalar(isSparse);";
+"    plhs[0] = pOut;";
+"}"],"mexisSparse.c");
+ilib_mex_build("libmextest",["isSparse","mexisSparse","cmex"], "mexisSparse.c",[]);
+exec("loader.sce");
+sp = sparse([1,2;4,5;3,10],[1,2,3]);
+n_sp = [1 2 3; 4 5 6];
+assert_checkfalse(isSparse(n_sp));
+assert_checktrue(isSparse(sp));
diff --git a/scilab/modules/mexlib/tests/unit_tests/mxIsSparse.tst b/scilab/modules/mexlib/tests/unit_tests/mxIsSparse.tst
new file mode 100644 (file)
index 0000000..5091be4
--- /dev/null
@@ -0,0 +1,30 @@
+// ============================================================================
+// 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 mxIsSparse mex function
+// ============================================================================
+
+cd(TMPDIR);
+ilib_verbose(0);
+mputl(["#include ""mex.h""";
+"void mexFunction(int nlhs, mxArray *plhs[], int nrhs, mxArray *prhs[])";
+"{";
+"    bool isSparse = mxIsSparse(prhs[0]);";
+"    mxArray* pOut = mxCreateLogicalScalar(isSparse);";
+"    plhs[0] = pOut;";
+"}"],"mexisSparse.c");
+
+ilib_mex_build("libmextest",["isSparse","mexisSparse","cmex"], "mexisSparse.c",[]);
+exec("loader.sce");
+
+sp = sparse([1,2;4,5;3,10],[1,2,3]);
+n_sp = [1 2 3; 4 5 6];
+
+assert_checkfalse(isSparse(n_sp));
+assert_checktrue(isSparse(sp));