Fixed mxCreateNumericArray and mxCreateNumericMatrix in mexlib module 81/19281/6
Siddhartha Gairola [Fri, 9 Jun 2017 12:24:21 +0000 (17:24 +0530)]
Change-Id: If05c3074d3da0a00e15f5f651da6724fad04f4b8

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

index 48676d7..4223229 100644 (file)
@@ -155,30 +155,39 @@ mxArray *mxCreateNumericArray(int ndim, const int *dims, mxClassID CLASS, mxComp
     {
         case mxDOUBLE_CLASS:
             ptr = new types::Double(ndim, (int *)dims, complexFlag == mxCOMPLEX);
+            ((types::Double *)ptr)->fillDefaultValues();
             break;
         case mxINT8_CLASS:
             ptr = new types::Int8(ndim, (int *)dims);
+            ((types::Int8 *)ptr)->fillDefaultValues();
             break;
         case mxUINT8_CLASS:
             ptr = new types::UInt8(ndim, (int *)dims);
+            ((types::UInt8 *)ptr)->fillDefaultValues();
             break;
         case mxINT16_CLASS:
             ptr = new types::Int16(ndim, (int *)dims);
+            ((types::Int16 *)ptr)->fillDefaultValues();
             break;
         case mxUINT16_CLASS:
             ptr = new types::UInt16(ndim, (int *)dims);
+            ((types::UInt16 *)ptr)->fillDefaultValues();
             break;
         case mxINT32_CLASS:
             ptr = new types::Int32(ndim, (int *)dims);
+            ((types::Int32 *)ptr)->fillDefaultValues();
             break;
         case mxUINT32_CLASS:
             ptr = new types::UInt32(ndim, (int *)dims);
+            ((types::UInt32 *)ptr)->fillDefaultValues();
             break;
         case mxINT64_CLASS:
             ptr = new types::Int64(ndim, (int *)dims);
+            ((types::Int64 *)ptr)->fillDefaultValues();
             break;
         case mxUINT64_CLASS:
             ptr = new types::UInt64(ndim, (int *)dims);
+            ((types::UInt64 *)ptr)->fillDefaultValues();
             break;
         default:
             ptr = NULL;
index 26efd77..8e9df94 100644 (file)
@@ -1,6 +1,7 @@
 // ============================================================================
 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
 // Copyright (C) 2009 - DIGITEO - Allan CORNET
+// Copyright (C) 2017 - Gsoc 2017 - Siddhartha Gairola
 //
 //  This file is distributed under the same license as the Scilab package.
 // ============================================================================
@@ -39,3 +40,12 @@ ret32 = createNumericArray(12);
 retU32 = createNumericArray(13);
 ret64 = createNumericArray(14);
 retU64 = createNumericArray(15);
+comp = zeros(4,3,2);                                                    
+assert_checkequal(ret8, int8(comp));                                    
+assert_checkequal(ret16, int16(comp));                                   
+assert_checkequal(ret32, int32(comp));                                   
+assert_checkequal(ret64, int64(comp));                                   
+assert_checkequal(retU8, uint8(comp));                                   
+assert_checkequal(retU16, uint16(comp));                                  
+assert_checkequal(retU32, uint32(comp));                                  
+assert_checkequal(retU64, uint64(comp)); 
index 9e8c604..05f24dd 100644 (file)
@@ -1,6 +1,7 @@
 // ============================================================================
 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
 // Copyright (C) 2009 - DIGITEO - Allan CORNET
+// Copyright (C) 2017 - Gsoc 2017 - Siddhartha Gairola
 //
 //  This file is distributed under the same license as the Scilab package.
 // ============================================================================
@@ -42,3 +43,13 @@ ret32 = createNumericArray(12);
 retU32 = createNumericArray(13);
 ret64 = createNumericArray(14);
 retU64 = createNumericArray(15);
+
+comp = zeros(4,3,2);
+assert_checkequal(ret8, int8(comp));
+assert_checkequal(ret16, int16(comp));
+assert_checkequal(ret32, int32(comp));
+assert_checkequal(ret64, int64(comp));
+assert_checkequal(retU8, uint8(comp));
+assert_checkequal(retU16, uint16(comp));
+assert_checkequal(retU32, uint32(comp));
+assert_checkequal(retU64, uint64(comp));
diff --git a/scilab/modules/mexlib/tests/unit_tests/mxCreateNumericMatrix.dia.ref b/scilab/modules/mexlib/tests/unit_tests/mxCreateNumericMatrix.dia.ref
new file mode 100644 (file)
index 0000000..8e518eb
--- /dev/null
@@ -0,0 +1,43 @@
+// ============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2017 - Siddhartha Gairola
+//
+//  This file is distributed under the same license as the Scilab package.
+// ============================================================================
+
+// <-- CLI SHELL MODE -->
+// ============================================================================
+// Unitary tests for mxCreateNumericMatrix mex function
+// ============================================================================
+cd(TMPDIR);
+ilib_verbose(0);
+mputl([ "#include ""mex.h""";
+"";
+"void mexFunction(int nlhs, mxArray *plhs[], int nrhs, mxArray *prhs[])";
+"{";
+"   double* pdblType = NULL;";
+"   mxArray* pOut1 = NULL;";
+"   mxArray* pOut2 = NULL;";
+"";
+"   if(nrhs != 1)";
+"   {";
+"       mexErrMsgTxt(""Wrong number or type of input argument"");";
+"   }";
+"";
+"   pdblType = mxGetPr(prhs[0]);";
+"   pOut1 = mxCreateNumericMatrix(2, 3, (mxClassID)pdblType[0], mxREAL);";
+"   pOut2 = mxCreateNumericMatrix(4, 5, (mxClassID)pdblType[0], mxREAL);";
+"   plhs[0] = pOut1;";
+"   plhs[1] = pOut2;";
+"}"],"mexCreateNumericMatrix.c");
+ilib_mex_build("libmextest",["createNumericMatrix","mexCreateNumericMatrix","cmex"], "mexCreateNumericMatrix.c",[]);
+exec("loader.sce");
+[a, b] = createNumericMatrix(8);
+[n1, m1] = size(a);
+[n2, m2] = size(b);
+assert_checkequal([n1, m1], [2, 3]);
+assert_checkequal([n2, m2], [4, 5]);
+comp1 = zeros(2,3);                                                         
+comp2 = zeros(4,5);                                                         
+assert_checkequal(a, int8(comp1));                                      
+assert_checkequal(b, int8(comp2));
diff --git a/scilab/modules/mexlib/tests/unit_tests/mxCreateNumericMatrix.tst b/scilab/modules/mexlib/tests/unit_tests/mxCreateNumericMatrix.tst
new file mode 100644 (file)
index 0000000..18d8191
--- /dev/null
@@ -0,0 +1,49 @@
+// ============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2017 - Siddhartha Gairola
+//
+//  This file is distributed under the same license as the Scilab package.
+// ============================================================================
+
+// <-- CLI SHELL MODE -->
+// ============================================================================
+// Unitary tests for mxCreateNumericMatrix mex function
+// ============================================================================
+
+cd(TMPDIR);
+ilib_verbose(0);
+mputl([ "#include ""mex.h""";
+"";
+"void mexFunction(int nlhs, mxArray *plhs[], int nrhs, mxArray *prhs[])";
+"{";
+"   double* pdblType = NULL;";
+"   mxArray* pOut1 = NULL;";
+"   mxArray* pOut2 = NULL;";
+"";
+"   if(nrhs != 1)";
+"   {";
+"       mexErrMsgTxt(""Wrong number or type of input argument"");";
+"   }";
+"";
+"   pdblType = mxGetPr(prhs[0]);";
+"   pOut1 = mxCreateNumericMatrix(2, 3, (mxClassID)pdblType[0], mxREAL);";
+"   pOut2 = mxCreateNumericMatrix(4, 5, (mxClassID)pdblType[0], mxREAL);";
+"   plhs[0] = pOut1;";
+"   plhs[1] = pOut2;";
+"}"],"mexCreateNumericMatrix.c");
+ilib_mex_build("libmextest",["createNumericMatrix","mexCreateNumericMatrix","cmex"], "mexCreateNumericMatrix.c",[]);
+exec("loader.sce");
+
+[a, b] = createNumericMatrix(8);
+
+[n1, m1] = size(a);
+[n2, m2] = size(b);
+
+assert_checkequal([n1, m1], [2, 3]);
+assert_checkequal([n2, m2], [4, 5]);
+
+comp1 = zeros(2,3);
+comp2 = zeros(4,5);
+
+assert_checkequal(a, int8(comp1));
+assert_checkequal(b, int8(comp2));