Adding mxIsScalar function and tests 92/19292/4
Siddhartha Gairola [Wed, 21 Jun 2017 12:04:16 +0000 (17:04 +0530)]
Change-Id: I479e473b932fe9c64b41a21596869ccd3d143f0f

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

index af0fb75..d905d88 100644 (file)
@@ -493,8 +493,13 @@ int mxIsUint8(const mxArray *ptr)
 
 int mxIsScalar(const mxArray *array_ptr)
 {
-    //TODO
-    return 0;
+    
+    types::InternalType *pIT = (types::InternalType *)array_ptr->ptr;
+    types::GenericType *pGT = pIT->getAs<types::GenericType>();
+    if( pGT->isScalar() == true)
+        return 1;
+    else
+        return 0;
 }
 
 int mxIsChar(const mxArray *ptr)
diff --git a/scilab/modules/mexlib/tests/unit_tests/mxIsScalar.dia.ref b/scilab/modules/mexlib/tests/unit_tests/mxIsScalar.dia.ref
new file mode 100644 (file)
index 0000000..82e5bac
--- /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 mxIsScalar mex function
+// ============================================================================
+
+cd(TMPDIR);
+ilib_verbose(0);
+ieee(2);
+mputl(["#include ""mex.h""";
+"void mexFunction(int nlhs, mxArray *plhs[], int nrhs, mxArray *prhs[])";
+"{";
+"    bool isScalar = mxIsScalar(prhs[0]);";
+"    mxArray* pOut = mxCreateLogicalScalar(isScalar);";
+"    plhs[0] = pOut;";
+"}"],"mexisScalar.c");
+ilib_mex_build("libmextest",["isScalar","mexisScalar","cmex"], "mexisScalar.c",[]);
+exec("loader.sce");
+
+assert_checktrue(isScalar([1]));
+assert_checktrue(isScalar(1/0));
+assert_checktrue(isScalar(9));
diff --git a/scilab/modules/mexlib/tests/unit_tests/mxIsScalar.tst b/scilab/modules/mexlib/tests/unit_tests/mxIsScalar.tst
new file mode 100644 (file)
index 0000000..82e5bac
--- /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 mxIsScalar mex function
+// ============================================================================
+
+cd(TMPDIR);
+ilib_verbose(0);
+ieee(2);
+mputl(["#include ""mex.h""";
+"void mexFunction(int nlhs, mxArray *plhs[], int nrhs, mxArray *prhs[])";
+"{";
+"    bool isScalar = mxIsScalar(prhs[0]);";
+"    mxArray* pOut = mxCreateLogicalScalar(isScalar);";
+"    plhs[0] = pOut;";
+"}"],"mexisScalar.c");
+ilib_mex_build("libmextest",["isScalar","mexisScalar","cmex"], "mexisScalar.c",[]);
+exec("loader.sce");
+
+assert_checktrue(isScalar([1]));
+assert_checktrue(isScalar(1/0));
+assert_checktrue(isScalar(9));