Working in progress mexlib tests. All tests passing or skipped. 26/4526/10
Iuri de Silvio [Tue, 19 Jul 2011 20:36:45 +0000 (17:36 -0300)]
Change-Id: I6d5015fa24035e9effb3d56734ef623dbef8a7a2

36 files changed:
scilab/modules/mexlib/includes/mex.h
scilab/modules/mexlib/src/cpp/mexlib.cpp
scilab/modules/mexlib/tests/unit_tests/mexAtExit.dia.ref [new file with mode: 0644]
scilab/modules/mexlib/tests/unit_tests/mexAtExit.tst [new file with mode: 0644]
scilab/modules/mexlib/tests/unit_tests/mexCall.dia.ref [new file with mode: 0644]
scilab/modules/mexlib/tests/unit_tests/mexCall.tst [new file with mode: 0644]
scilab/modules/mexlib/tests/unit_tests/mexErrMsgTxt.tst [new file with mode: 0644]
scilab/modules/mexlib/tests/unit_tests/mexFunctionName.dia.ref [new file with mode: 0644]
scilab/modules/mexlib/tests/unit_tests/mexFunctionName.tst [new file with mode: 0644]
scilab/modules/mexlib/tests/unit_tests/mexPutFull.dia.ref [new file with mode: 0644]
scilab/modules/mexlib/tests/unit_tests/mexPutFull.tst [new file with mode: 0644]
scilab/modules/mexlib/tests/unit_tests/mexPutVariable.dia.ref
scilab/modules/mexlib/tests/unit_tests/mexPutVariable.tst
scilab/modules/mexlib/tests/unit_tests/mexWarnMsgTxt.dia.ref [new file with mode: 0644]
scilab/modules/mexlib/tests/unit_tests/mexWarnMsgTxt.tst [new file with mode: 0644]
scilab/modules/mexlib/tests/unit_tests/mxArrayToString.dia.ref
scilab/modules/mexlib/tests/unit_tests/mxArrayToString.tst
scilab/modules/mexlib/tests/unit_tests/mxAssertS.tst [new file with mode: 0644]
scilab/modules/mexlib/tests/unit_tests/mxCreateCharArray.dia.ref [new file with mode: 0644]
scilab/modules/mexlib/tests/unit_tests/mxCreateCharArray.tst [new file with mode: 0644]
scilab/modules/mexlib/tests/unit_tests/mxCreateCharMatrixFromStrings.dia.ref [new file with mode: 0644]
scilab/modules/mexlib/tests/unit_tests/mxCreateCharMatrixFromStrings.tst [new file with mode: 0644]
scilab/modules/mexlib/tests/unit_tests/mxDestroyArray.dia.ref [new file with mode: 0644]
scilab/modules/mexlib/tests/unit_tests/mxDestroyArray.tst [new file with mode: 0644]
scilab/modules/mexlib/tests/unit_tests/mxFreeMatrix.dia.ref [new file with mode: 0644]
scilab/modules/mexlib/tests/unit_tests/mxFreeMatrix.tst [new file with mode: 0644]
scilab/modules/mexlib/tests/unit_tests/mxGetElementSize.dia.ref [new file with mode: 0644]
scilab/modules/mexlib/tests/unit_tests/mxGetElementSize.tst [new file with mode: 0644]
scilab/modules/mexlib/tests/unit_tests/mxGetSetImagData.dia.ref [new file with mode: 0644]
scilab/modules/mexlib/tests/unit_tests/mxGetSetImagData.tst [new file with mode: 0644]
scilab/modules/mexlib/tests/unit_tests/mxGetString.dia.ref
scilab/modules/mexlib/tests/unit_tests/mxGetString.tst
scilab/modules/mexlib/tests/unit_tests/mxMalloc.dia.ref [new file with mode: 0644]
scilab/modules/mexlib/tests/unit_tests/mxMalloc.tst [new file with mode: 0644]
scilab/modules/mexlib/tests/unit_tests/mxSetClearLogical.dia.ref [new file with mode: 0644]
scilab/modules/mexlib/tests/unit_tests/mxSetClearLogical.tst [new file with mode: 0644]

index add806f..b92eb69 100644 (file)
@@ -42,6 +42,7 @@ extern "C"
     typedef char mxChar;
     typedef int mwSize;
     typedef int mwIndex;
+    typedef int mwSignedIndex;
     typedef mxArray *mwPointer;
 #endif
 
@@ -131,7 +132,7 @@ extern "C"
     int C2F(mexcallscilab)(int *nlhs, mxArray **plhs, int *nrhs, mxArray **prhs, char *name, int namelen);
     int C2F(mxcopyptrtoreal8)(mxArray *ptr, double *y, int *n);
     int C2F(mxcopyreal8toptr)(double *y, mxArray *ptr, int *n);
-    int mexAtExit(mxArray *ptr);
+    int mexAtExit(void (*func)(void));
     int mexCallSCILAB(int nlhs, mxArray **plhs, int nrhs, mxArray **prhs, const char *name);
     int mexCallMATLAB(int nlhs, mxArray **plhs, int nrhs, mxArray **prhs, const char *name);
     int mxGetElementSize(const mxArray *ptr);
@@ -285,11 +286,30 @@ extern "C"
 #endif
 //define mxAssert in order to benefit user compilation flag ( debug or not )
 #define mxAssert(/* int */expr, /*char* */error_message) if (!expr){mexPrintf("Assertion Error: %s\n", error_message); assert(expr);}
-//void mxAssert(int expr, char *error_message);
-void mxAssertS(int expr, char *error_message);
+#define mxAssertS(/* int */expr, /*char* */error_msesage) assert(expr);
+
 mxChar *mxGetChars(mxArray *array_ptr);
 const char *mxGetClassName(const mxArray *ptr);
 int mexPutVariable(const char *workspace, const char *varname, const mxArray *pm);
-void mxSetImagData(mxArray * array_ptr, void *data_ptr);
+void mxSetImagData(mxArray *array_ptr, void *data_ptr);
 int mxAddField(mxArray *pm, const char *fieldname);
 mxArray *mxCreateLogicalArray(mwSize ndim, const mwSize *dims);
+
+// new functions to be implemented
+mxArray *mxCreateSparseLogicalMatrix(mwSize m, mwSize n, mwSize nzmax);
+mxArray *mxGetProperty(const mxArray *pa, mwIndex index, const char *propname);
+void mxSetProperty(mxArray *pa, mwIndex index, const char *propname, const mxArray *value);
+bool mxIsFromGlobalWS(const mxArray *pm);
+void mxRemoveField(mxArray *pm, int fieldnumber);
+int mxSetClassName(mxArray *array_ptr, const char *classname);
+void mexWarnMsgIdAndTxt(const char *warningid, const char *warningmsg, ...);
+void mexErrMsgIdAndTxt(const char *errorid, const char *errormsg, ...);
+mxArray *mexCallMATLABWithTrap(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[], const char *functionName);
+mxArray *mexEvalStringWithTrap(const char *command);
+void mexSetTrapFlag(int trapflag);
+const mxArray *mexGet(double handle, const char *property);
+int mexSet(double handle, const char *property, mxArray *value);
+bool mexIsLocked(void);
+void mexLock(void);
+void mexUnlock(void);
+void mexMakeArrayPersistent(mxArray *pm);
index 3a2e6ca..3347c8d 100644 (file)
@@ -88,6 +88,7 @@ extern "C"
 #endif
 
 static char *the_current_mex_name;
+static void (*exitFcn)(void);
 
 mxClassID mxGetClassID(const mxArray *ptr)
 {
@@ -519,7 +520,6 @@ void mxSetLogical(mxArray *ptr)
     }
     int *data = (int *) mxGetData(ptr);
     mxArray *newPtr = (mxArray *) new types::Bool(mxGetNumberOfDimensions(ptr), mxGetDimensions(ptr));
-    // TODO: destroy ptr?
     mxSetData(newPtr, data);
     *ptr = *newPtr;
 }
@@ -533,7 +533,6 @@ void mxClearLogical(mxArray *ptr)
     }
     int *data = (int *) mxGetData(ptr);
     mxArray *newPtr = (mxArray *) new types::Int32(mxGetNumberOfDimensions(ptr), mxGetDimensions(ptr));
-    // TODO: destroy ptr?
     mxSetData(newPtr, data);
     *ptr = *newPtr;
 }
@@ -756,21 +755,6 @@ void mexErrMsgTxt(const char *error_msg)
     throw new ast::ScilabException(error_msg);
 }
 
-//view mexlib.h
-//void mxAssert(int expr, char *error_message)
-//{
-//    if (!expr)
-//    {
-//        mexPrintf("Assertion Error: %s\n", error_message);
-//        assert(expr);
-//    }
-//}
-
-void mxAssertS(int expr, char *error_message)
-{
-    assert(expr);
-}
-
 mxArray *mxCreateDoubleMatrix(int m, int n, mxComplexity complexFlag)
 {
     types::Double *ptr = new types::Double(m, n, complexFlag == mxCOMPLEX);
@@ -1068,38 +1052,38 @@ int mxGetNumberOfFields(const mxArray *ptr)
 
 void *mxRealloc(void *ptr, size_t nsize)
 {
-    // FIXME
-    return NULL;
+    // TODO: manage this memory
+    return REALLOC(ptr, nsize);
 }
 
 void *mxCalloc(size_t n, size_t size)
 {
-    // FIXME
-    return NULL;
+    // TODO: manage this memory
+    return CALLOC(n, size);
 }
 
-/*  void *mxMalloc(unsigned int nsize)  */
 void *mxMalloc(size_t nsize)
 {
-    // FIXME
-    return NULL;
+    // TODO: manage this memory
+    return MALLOC(nsize);
 }
 
-void *mxCalloc_m(unsigned int n, unsigned int size)
+void mexMakeMemoryPersistent(void *ptr)
 {
     // FIXME
-    return NULL;
 }
 
-void *mxMalloc_m(unsigned int n)
+
+void *mxCalloc_m(unsigned int n, unsigned int size)
 {
     // FIXME
     return NULL;
 }
 
-void mexMakeMemoryPersistent(void *ptr)
+void *mxMalloc_m(unsigned int n)
 {
     // FIXME
+    return NULL;
 }
 
 /* free : explicit free of a mxCalloc_m allocated space
@@ -1137,23 +1121,52 @@ int mxGetString(const mxArray *ptr, char *str, int strl)
         return 1;
     }
     types::String *pa = (types::String *) ptr;
-    wchar_t *to_copy = *pa->get();
-    char *dest = wide_string_to_UTF8(to_copy);
-    memcpy(str, dest, strl-1);
-    str[strl-1] = '\0';
-    FREE(dest);
-    return (strl <= wcslen(to_copy) + 1) ? 1 : 0;
+    int items = mxGetM(ptr);
+    int index = 0;
+    int free_space = strl - 1;
+    for (int k = 0; k < items; k++)
+    {
+        wchar_t *to_copy = pa->get(k);
+        char *dest = wide_string_to_UTF8(to_copy);
+        int length = strlen(dest);
+        memcpy(str+index, dest, free_space);
+        index += Min(length, free_space);
+        free_space -= length;
+        FREE(dest);
+        if (free_space <= 0)
+        {
+            break;
+        }
+    }
+    str[index] = '\0';
+    return free_space >= 0 ? 0 : 1;
 }
 
-char *mxArrayToString(const mxArray *array_ptr)
+char *mxArrayToString(const mxArray *ptr)
 {
-    if (!mxIsChar(array_ptr))
+    if (!mxIsChar(ptr))
     {
         return (char *) 0;
     }
-    types::String *pa = (types::String *) array_ptr;
-    wchar_t *to_copy = *pa->get();
-    return wide_string_to_UTF8(to_copy);
+    types::String *pa = (types::String *) ptr;
+    int items = mxGetM(ptr);
+    int index = 0;
+    int length = 1; // one extra char to \0
+    wchar_t **wstrings = pa->get();
+    for (int k = 0; k < items; k++)
+    {
+        length += wcslen(wstrings[k]);
+    }
+    char *str = (char *) malloc(sizeof(char *) * length);
+    for (int k = 0; k < items; k++)
+    {
+        char *dest = wide_string_to_UTF8(wstrings[k]);
+        int dest_length = strlen(dest);
+        memcpy(str+index, dest, dest_length);
+        index += dest_length;
+    }
+    str[index] = '\0';
+    return str;
 }
 
 void mxFreeMatrix(mxArray *ptr)
@@ -1163,7 +1176,6 @@ void mxFreeMatrix(mxArray *ptr)
 
 bool mexIsGlobal(const mxArray *ptr)
 {
-    // TODO: really need iterate all symbols?
     symbol::Context *context = symbol::Context::getInstance();
     int size = symbol::Symbol::map_size();
     wchar_t **keys = symbol::Symbol::get_all();
@@ -1182,7 +1194,7 @@ bool mexIsGlobal(const mxArray *ptr)
 
 mxArray *mxDuplicateArray(const mxArray *ptr)
 {
-    types::InternalType * pIT = (types::InternalType *) ptr;
+    types::InternalType *pIT = (types::InternalType *) ptr;
     if (pIT == NULL)
     {
         return 0;
@@ -1195,53 +1207,57 @@ void mxDestroyArray(mxArray *ptr)
 {
     if (mxIsDouble(ptr))
     {
-        delete((types::Double *) ptr);
+        delete (types::Double *) ptr;
     }
-    if (mxIsChar(ptr))
+    else if (mxIsChar(ptr))
     {
-        delete((types::String *) ptr);
+        delete (types::String *) ptr;
     }
-    if (mxIsSparse(ptr))
+    else if (mxIsLogical(ptr))
+    {
+        delete (types::Bool *) ptr;
+    }
+    else if (mxIsSparse(ptr))
     {
         // TODO: sparse
     }
-    if (mxIsInt8(ptr))
+    else if (mxIsInt8(ptr))
     {
-        delete((types::Int8 *) ptr);
+        delete (types::Int8 *) ptr;
     }
-    if (mxIsInt16(ptr))
+    else if (mxIsInt16(ptr))
     {
-        delete((types::Int16 *) ptr);
+        delete (types::Int16 *) ptr;
     }
-    if (mxIsInt32(ptr))
+    else if (mxIsInt32(ptr))
     {
-        delete((types::Int32 *) ptr);
+        delete(types::Int32 *) ptr;
     }
-    if (mxIsInt64(ptr))
+    else if (mxIsInt64(ptr))
     {
         delete((types::Int64 *) ptr);
     }
-    if (mxIsUint8(ptr))
+    else if (mxIsUint8(ptr))
     {
         delete((types::UInt8 *) ptr);
     }
-    if (mxIsUint16(ptr))
+    else if (mxIsUint16(ptr))
     {
         delete((types::UInt16 *) ptr);
     }
-    if (mxIsUint32(ptr))
+    else if (mxIsUint32(ptr))
     {
         delete((types::UInt32 *) ptr);
     }
-    if (mxIsUint64(ptr))
+    else if (mxIsUint64(ptr))
     {
         delete((types::UInt64 *) ptr);
     }
-    if (mxIsCell(ptr))
+    else if (mxIsCell(ptr))
     {
         delete((types::Cell *) ptr);
     }
-    if (mxIsStruct(ptr))
+    else if (mxIsStruct(ptr))
     {
         delete((types::Struct *) ptr);
     }
@@ -1249,12 +1265,13 @@ void mxDestroyArray(mxArray *ptr)
 
 void mxFree(void *ptr)
 {
-    // FIXME
+    // TODO: manage this memory
+    FREE(ptr);
 }
 
-int mexAtExit(mxArray *ptr)
+int mexAtExit(void (*func)(void))
 {
-    // FIXME
+    exitFcn = func;
     return 0;
 }
 
@@ -1266,7 +1283,7 @@ mxArray *mxCreateSparse(int m, int n, int nzmax, mxComplexity cmplx)
 
 mxArray *mxCreateString(const char *string)
 {
-    types::String * ptr = new types::String(string);
+    types::String *ptr = new types::String(string);
     return (mxArray *) ptr;
 }
 
@@ -1332,8 +1349,22 @@ void mexWarnMsgTxt(const char *error_msg)
 
 int mexCallSCILAB(int nlhs, mxArray **plhs, int nrhs, mxArray **prhs, const char *name)
 {
-    // FIXME
-    return 0;
+    symbol::Context *context = symbol::Context::getInstance();
+    symbol::Symbol *symbol = new symbol::Symbol(to_wide_string(name));
+    types::InternalType *value = context->get(*symbol);
+    types::Function *func = (types::Function *) value;
+
+    types::typed_list in;
+    types::typed_list out;
+    for(int i = 0; i < nrhs; i++)
+    {
+        in.push_back((types::InternalType*)prhs[i]);
+    }
+    func->call(in, nlhs, out, NULL);
+    for(int i = 0; i < nlhs; i++)
+    {
+        plhs[i] = (mxArray *) (out[i]);
+    }
 }
 
 int mexCallMATLAB(int nlhs, mxArray **plhs, int nrhs, mxArray **prhs, const char *name)
@@ -1371,55 +1402,55 @@ int mxGetElementSize(const mxArray *ptr)
     {
         return sizeof(wchar_t *);
     }
-    if (mxIsDouble(ptr))
+    else if (mxIsLogical(ptr))
     {
-        return sizeof(double);
+        return sizeof(int);
     }
-    if (mxIsChar(ptr))
+    else if (mxIsDouble(ptr))
     {
-        return sizeof(char);
+        return sizeof(double);
     }
-    if (mxIsSparse(ptr))
+    else if (mxIsSparse(ptr))
     {
         // TODO: sparse
     }
-    if (mxIsInt8(ptr))
+    else if (mxIsInt8(ptr))
     {
         return sizeof(char);
     }
-    if (mxIsInt16(ptr))
+    else if (mxIsInt16(ptr))
     {
         return sizeof(short);
     }
-    if (mxIsInt32(ptr))
+    else if (mxIsInt32(ptr))
     {
         return sizeof(int);
     }
-    if (mxIsInt64(ptr))
+    else if (mxIsInt64(ptr))
     {
         return sizeof(long long);
     }
-    if (mxIsUint8(ptr))
+    else if (mxIsUint8(ptr))
     {
         return sizeof(unsigned char);
     }
-    if (mxIsUint16(ptr))
+    else if (mxIsUint16(ptr))
     {
         return sizeof(unsigned short);
     }
-    if (mxIsUint32(ptr))
+    else if (mxIsUint32(ptr))
     {
         return sizeof(unsigned int);
     }
-    if (mxIsUint64(ptr))
+    else if (mxIsUint64(ptr))
     {
         return sizeof(unsigned long long);
     }
-    if (mxIsCell(ptr))
+    else if (mxIsCell(ptr))
     {
         return sizeof(types::InternalType *);
     }
-    if (mxIsStruct(ptr))
+    else if (mxIsStruct(ptr))
     {
         return sizeof(types::SingleStruct *);
     }
@@ -1428,12 +1459,8 @@ int mxGetElementSize(const mxArray *ptr)
 
 mxArray *mxCreateCharMatrixFromStrings(int m, const char **str)
 {
-    int n = 0;
-    for (int k = 0; k < m; k++)
-    {
-        n = Max(n, ((int) strlen(str[k])));
-    }
-    wchar_t **strings = new wchar_t*[m];
+    int n = 1;
+    wchar_t *strings[m];
     for (int k = 0; k < m; k++)
     {
         strings[k] = to_wide_string(str[k]);
@@ -1694,11 +1721,11 @@ int mexPutVariable(const char *workspace, const char *varname, const mxArray *pm
     wchar_t *dest = to_wide_string(varname);
     if (strcmp(workspace, "base") == 0)
     {
-        context->put(*(new symbol::Symbol(dest)), *(types::InternalType *) pm);
+        context->put_in_previous_scope(*(new symbol::Symbol(dest)), *(types::InternalType *) pm);
     }
     else if (strcmp(workspace, "caller") == 0)
     {
-        context->put_in_previous_scope(*(new symbol::Symbol(dest)), *(types::InternalType *) pm);
+        context->put(*(new symbol::Symbol(dest)), *(types::InternalType *) pm);
     }
     else if (strcmp(workspace, "global") == 0)
     {
@@ -1724,7 +1751,6 @@ int mexPutFull(char *name, int m, int n, double *pr, double *pi)
 void mxSetName(mxArray *array_ptr, const char *name)
 {
     /* obsolete */
-    // FIXME
     mexErrMsgTxt(_("Routine mxSetName not implemented !\n"));
     exit(1);
 }
@@ -1844,7 +1870,6 @@ void mxSetPi(mxArray *ptr, double *pi)
 const char *mxGetName(const mxArray *array_ptr)
 {
     /* obsolete */
-    // FIXME
     mexPrintf(_("Routine mxGetName not implemented.\n"));
     exit(1);
     return 0;
@@ -2008,7 +2033,7 @@ mxLogical *mxGetLogicals(const mxArray *ptr)
 
 void mexInfo(char *str)
 {
-    // FIXME : Use YaSpWrite
+    mexPrintf("mexInfo: %s", str);
 }
 
 int mexCheck(char *str, int nbvars)
diff --git a/scilab/modules/mexlib/tests/unit_tests/mexAtExit.dia.ref b/scilab/modules/mexlib/tests/unit_tests/mexAtExit.dia.ref
new file mode 100644 (file)
index 0000000..1f953ed
--- /dev/null
@@ -0,0 +1,39 @@
+
+// ============================================================================
+
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+
+// Copyright (C) 2011-2011 - Gsoc 2011 - Iuri SILVIO
+
+//
+
+//  This file is distributed under the same license as the Scilab package.
+
+// ============================================================================
+
+// <-- JVM NOT MANDATORY -->
+
+// <-- ENGLISH IMPOSED -->
+
+// ============================================================================
+
+// Unitary tests for mexAtExit mex function
+
+// ============================================================================
+
+cd(TMPDIR);
+ilib_verbose(0);
+mputl(['#include ""mex.h""';
+       'void callAtExit()';
+       '{';
+       '    mexPrintf(""The mexAtExit function works!"");';
+       '}';
+       'void mexFunction(int nlhs, mxArray *plhs[], int nrhs, mxArray *prhs[])';
+       '{';
+       '    mexAtExit(&callAtExit);';
+       '}'],'mexatExit.c');
+ilib_mex_build('libmextest',['atExit','mexatExit','cmex'], 'mexatExit.c',[],'Makelib','','','');
+exec('loader.sce');
+
+atExit()
+The mexAtExit function works!
diff --git a/scilab/modules/mexlib/tests/unit_tests/mexAtExit.tst b/scilab/modules/mexlib/tests/unit_tests/mexAtExit.tst
new file mode 100644 (file)
index 0000000..2d2b2a6
--- /dev/null
@@ -0,0 +1,29 @@
+// ============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2011-2011 - Gsoc 2011 - Iuri SILVIO
+//
+//  This file is distributed under the same license as the Scilab package.
+// ============================================================================
+
+// <-- JVM NOT MANDATORY -->
+// <-- ENGLISH IMPOSED -->
+// <-- NOT FIXED -->
+// ============================================================================
+// Unitary tests for mexAtExit mex function
+// ============================================================================
+
+cd(TMPDIR);
+ilib_verbose(0);
+mputl(['#include ""mex.h""';
+       'void callAtExit()';
+       '{';
+       '    mexPrintf(""The mexAtExit function works!"");';
+       '}';
+       'void mexFunction(int nlhs, mxArray *plhs[], int nrhs, mxArray *prhs[])';
+       '{';
+       '    mexAtExit(&callAtExit);';
+       '}'],'mexatExit.c');
+ilib_mex_build('libmextest',['atExit','mexatExit','cmex'], 'mexatExit.c',[],'Makelib','','','');
+exec('loader.sce');
+
+atExit()
diff --git a/scilab/modules/mexlib/tests/unit_tests/mexCall.dia.ref b/scilab/modules/mexlib/tests/unit_tests/mexCall.dia.ref
new file mode 100644 (file)
index 0000000..1d76ec8
--- /dev/null
@@ -0,0 +1,37 @@
+
+// ============================================================================
+
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+
+// Copyright (C) 2011-2011 - Gsoc 2011 - Iuri SILVIO
+
+//
+
+//  This file is distributed under the same license as the Scilab package.
+
+// ============================================================================
+
+// <-- JVM NOT MANDATORY -->
+
+// <-- ENGLISH IMPOSED -->
+
+// ============================================================================
+
+// Unitary tests for mexCallMATLAB mex function
+
+// ============================================================================
+
+cd(TMPDIR);
+ilib_verbose(0);
+mputl([ '#include ""mex.h""';
+        'void mexFunction(int nlhs, mxArray *plhs[], int nrhs, mxArray *prhs[])';
+        '{';
+        '    mexCallMATLAB(nlhs, plhs, nrhs, prhs, ""sum"");';
+        '}'],'mexcallMATLAB.c');
+ilib_mex_build('libmextest', ['callMATLAB', 'mexcallMATLAB', 'cmex'], 'mexcallMATLAB.c', [], 'Makelib', '', '', '');
+
+exec('loader.sce');
+
+res = callMATLAB([1 2 3 4]);
+
+if res <> 10 then pause end
diff --git a/scilab/modules/mexlib/tests/unit_tests/mexCall.tst b/scilab/modules/mexlib/tests/unit_tests/mexCall.tst
new file mode 100644 (file)
index 0000000..962a47a
--- /dev/null
@@ -0,0 +1,25 @@
+// ============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2011-2011 - Gsoc 2011 - Iuri SILVIO
+//
+//  This file is distributed under the same license as the Scilab package.
+// ============================================================================
+
+// <-- JVM NOT MANDATORY -->
+// <-- ENGLISH IMPOSED -->
+// ============================================================================
+// Unitary tests for mexCallMATLAB mex function
+// ============================================================================
+
+cd(TMPDIR);
+ilib_verbose(0);
+mputl([ '#include ""mex.h""';
+        'void mexFunction(int nlhs, mxArray *plhs[], int nrhs, mxArray *prhs[])';
+        '{';
+        '    mexCallMATLAB(nlhs, plhs, nrhs, prhs, ""sum"");';
+        '}'],'mexcallMATLAB.c');
+ilib_mex_build('libmextest', ['callMATLAB', 'mexcallMATLAB', 'cmex'], 'mexcallMATLAB.c', [], 'Makelib', '', '', '');
+exec('loader.sce');
+
+res = callMATLAB([1 2 3 4]);
+if res <> 10 then pause end
diff --git a/scilab/modules/mexlib/tests/unit_tests/mexErrMsgTxt.tst b/scilab/modules/mexlib/tests/unit_tests/mexErrMsgTxt.tst
new file mode 100644 (file)
index 0000000..a2df41a
--- /dev/null
@@ -0,0 +1,27 @@
+// ============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2011-2011 - Gsoc 2011 - Iuri SILVIO
+//
+//  This file is distributed under the same license as the Scilab package.
+// ============================================================================
+
+// <-- JVM NOT MANDATORY -->
+// <-- ENGLISH IMPOSED -->
+// <-- INTERACTIVE TEST -->
+// ============================================================================
+// Unitary tests for mexErrMsgTxt mex function
+// ============================================================================
+
+cd(TMPDIR);
+
+ilib_verbose(0);
+
+mputl(['#include ""mex.h""';
+       'void mexFunction(int nlhs, mxArray *plhs[], int nrhs, mxArray *prhs[])';
+       '{';
+       '    mexErrMsgTxt(""An useless error message!"");';
+       '}'],'mexerrMsgTxt.c');
+ilib_mex_build('libmextest',['errMsgTxt','mexerrMsgTxt','cmex'], 'mexerrMsgTxt.c',[],'Makelib','','','');
+exec('loader.sce');
+
+errMsgTxt()
diff --git a/scilab/modules/mexlib/tests/unit_tests/mexFunctionName.dia.ref b/scilab/modules/mexlib/tests/unit_tests/mexFunctionName.dia.ref
new file mode 100644 (file)
index 0000000..f8a5052
--- /dev/null
@@ -0,0 +1,39 @@
+
+// ============================================================================
+
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+
+// Copyright (C) 2011-2011 - Gsoc 2011 - Iuri SILVIO
+
+//
+
+//  This file is distributed under the same license as the Scilab package.
+
+// ============================================================================
+
+// <-- JVM NOT MANDATORY -->
+
+// <-- ENGLISH IMPOSED -->
+
+// ============================================================================
+
+// Unitary tests for mexFunctionName mex function
+
+// ============================================================================
+
+cd(TMPDIR);
+
+ilib_verbose(0);
+
+mputl(['#include ""mex.h""';
+       'void mexFunction(int nlhs, mxArray *plhs[], int nrhs, mxArray *prhs[])';
+       '{';
+       '    mexPrintf(""%s"", mexFunctionName());';
+       '}'],'mexfunctionName.c');
+
+ilib_mex_build('libmex',['func','mexfunctionName','cmex'], 'mexfunctionName.c',[],'Makelib','','','');
+
+exec('loader.sce');
+
+func();
+func
\ No newline at end of file
diff --git a/scilab/modules/mexlib/tests/unit_tests/mexFunctionName.tst b/scilab/modules/mexlib/tests/unit_tests/mexFunctionName.tst
new file mode 100644 (file)
index 0000000..42a8623
--- /dev/null
@@ -0,0 +1,26 @@
+// ============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2011-2011 - Gsoc 2011 - Iuri SILVIO
+//
+//  This file is distributed under the same license as the Scilab package.
+// ============================================================================
+
+// <-- JVM NOT MANDATORY -->
+// <-- ENGLISH IMPOSED -->
+// <-- NOT FIXED -->
+// ============================================================================
+// Unitary tests for mexFunctionName mex function
+// ============================================================================
+
+cd(TMPDIR);
+ilib_verbose(0);
+mputl(['#include ""mex.h""';
+       'void mexFunction(int nlhs, mxArray *plhs[], int nrhs, mxArray *prhs[])';
+       '{';
+       '    mexPrintf(""%s"", mexFunctionName());';
+       '}'],'mexfunctionName.c');
+
+ilib_mex_build('libmex',['func','mexfunctionName','cmex'], 'mexfunctionName.c',[],'Makelib','','','');
+exec('loader.sce');
+
+func();
diff --git a/scilab/modules/mexlib/tests/unit_tests/mexPutFull.dia.ref b/scilab/modules/mexlib/tests/unit_tests/mexPutFull.dia.ref
new file mode 100644 (file)
index 0000000..9474227
--- /dev/null
@@ -0,0 +1,54 @@
+
+// ============================================================================
+
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+
+// Copyright (C) 2011-2011 - Gsoc 2011 - Iuri SILVIO
+
+//
+
+//  This file is distributed under the same license as the Scilab package.
+
+// ============================================================================
+
+// <-- JVM NOT MANDATORY -->
+
+// <-- ENGLISH IMPOSED -->
+
+// ============================================================================
+
+// Unitary tests for mexPutFull mex function
+
+// ============================================================================
+
+cd(TMPDIR);
+
+ilib_verbose(0);
+
+mputl([ '#include ""mex.h""';
+        'void mexFunction(int nlhs, mxArray *plhs[], int nrhs, mxArray *prhs[])';
+        '{';
+        '    double pr[2] = {2, 5};';
+        '    double pi[2] = {3, 0};';
+        '    mexPutFull(""var1"", 2, 1, pr, NULL);';
+        '    plhs[0] = mexGetVariable(""caller"", ""var1"");';
+        '    mexPutFull(""var2"", 1, 2, pr, pi);';
+        '    plhs[1] = mexGetVariable(""caller"", ""var2"");';
+        '}'],'mexputFull.c');
+ilib_mex_build('libmextest', ['putFull', 'mexputFull', 'cmex'], 'mexputFull.c', [], 'Makelib', '', '', '');
+
+exec('loader.sce');
+
+[out1, out2] = putFull();
+
+if exists("var1") <> 1 then pause end
+
+if exists("var2") <> 1 then pause end
+
+if out1(1) <> 2 then pause end
+
+if out1(2) <> 5 then pause end
+
+if out2(1) <> complex(2, 3) then pause end
+
+if out2(2) <> 5 then pause end
diff --git a/scilab/modules/mexlib/tests/unit_tests/mexPutFull.tst b/scilab/modules/mexlib/tests/unit_tests/mexPutFull.tst
new file mode 100644 (file)
index 0000000..2717343
--- /dev/null
@@ -0,0 +1,35 @@
+// ============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2011-2011 - Gsoc 2011 - Iuri SILVIO
+//
+//  This file is distributed under the same license as the Scilab package.
+// ============================================================================
+
+// <-- JVM NOT MANDATORY -->
+// <-- ENGLISH IMPOSED -->
+// ============================================================================
+// Unitary tests for mexPutFull mex function
+// ============================================================================
+
+cd(TMPDIR);
+ilib_verbose(0);
+mputl([ '#include ""mex.h""';
+        'void mexFunction(int nlhs, mxArray *plhs[], int nrhs, mxArray *prhs[])';
+        '{';
+        '    double pr[2] = {2, 5};';
+        '    double pi[2] = {3, 0};';
+        '    mexPutFull(""var1"", 2, 1, pr, NULL);';
+        '    plhs[0] = mexGetVariable(""caller"", ""var1"");';
+        '    mexPutFull(""var2"", 1, 2, pr, pi);';
+        '    plhs[1] = mexGetVariable(""caller"", ""var2"");';
+        '}'],'mexputFull.c');
+ilib_mex_build('libmextest', ['putFull', 'mexputFull', 'cmex'], 'mexputFull.c', [], 'Makelib', '', '', '');
+exec('loader.sce');
+
+[out1, out2] = putFull();
+if exists("var1") <> 1 then pause end
+if exists("var2") <> 1 then pause end
+if out1(1) <> 2 then pause end
+if out1(2) <> 5 then pause end
+if out2(1) <> complex(2, 3) then pause end
+if out2(2) <> 5 then pause end
\ No newline at end of file
index d6176df..2f8db86 100644 (file)
@@ -49,11 +49,16 @@ othervar = 1;
 
 putVariable("base", "othervar", 3);
 
-if othervar <> 3 then pause end
+if othervar <> 1 then pause end
 
 if isglobal('othervar') <> %f then pause end
 
-putVariable("caller", "defined_in_C", 0);
+putVariable("caller", "othervar", 3);
+
+if othervar <> 3 then pause end
+
+if isglobal('othervar') <> %f then pause end
 
-if exists('defined_in_C') <> 1 then pause end
+putVariable("caller", "caller_defined_in_C", 0);
 
+if exists('caller_defined_in_C') <> 1 then pause end
index a996cc1..0e5ef38 100644 (file)
@@ -30,9 +30,12 @@ if isglobal('globalvar') <> %t then pause end
 
 othervar = 1;
 putVariable("base", "othervar", 3);
-if othervar <> 3 then pause end
+if othervar <> 1 then pause end
 if isglobal('othervar') <> %f then pause end
 
-putVariable("caller", "defined_in_C", 0);
-if exists('defined_in_C') <> 1 then pause end
+putVariable("caller", "othervar", 3);
+if othervar <> 3 then pause end
+if isglobal('othervar') <> %f then pause end
 
+putVariable("caller", "caller_defined_in_C", 0);
+if exists('caller_defined_in_C') <> 1 then pause end
diff --git a/scilab/modules/mexlib/tests/unit_tests/mexWarnMsgTxt.dia.ref b/scilab/modules/mexlib/tests/unit_tests/mexWarnMsgTxt.dia.ref
new file mode 100644 (file)
index 0000000..9b80ada
--- /dev/null
@@ -0,0 +1,40 @@
+
+// ============================================================================
+
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+
+// Copyright (C) 2011-2011 - Gsoc 2011 - Iuri SILVIO
+
+//
+
+//  This file is distributed under the same license as the Scilab package.
+
+// ============================================================================
+
+// <-- JVM NOT MANDATORY -->
+
+// <-- ENGLISH IMPOSED -->
+
+// <-- INTERACTIVE TEST -->
+
+// ============================================================================
+
+// Unitary tests for mexWarnMsgTxt mex function
+
+// ============================================================================
+
+cd(TMPDIR);
+
+ilib_verbose(0);
+
+mputl(['#include ""mex.h""';
+       'void mexFunction(int nlhs, mxArray *plhs[], int nrhs, mxArray *prhs[])';
+       '{';
+       '    mexWarnMsgTxt(""If you can read this message, mexWarnMsgTxt works!"");';
+       '}'],'mexwarnMsgTxt.c');
+ilib_mex_build('libmextest',['warnMsgTxt','mexwarnMsgTxt','cmex'], 'mexwarnMsgTxt.c',[],'Makelib','','','');
+
+exec('loader.sce');
+
+warnMsgTxt()
+Warning: If you can read this message, mexWarnMsgTxt works!
diff --git a/scilab/modules/mexlib/tests/unit_tests/mexWarnMsgTxt.tst b/scilab/modules/mexlib/tests/unit_tests/mexWarnMsgTxt.tst
new file mode 100644 (file)
index 0000000..e129e64
--- /dev/null
@@ -0,0 +1,27 @@
+// ============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2011-2011 - Gsoc 2011 - Iuri SILVIO
+//
+//  This file is distributed under the same license as the Scilab package.
+// ============================================================================
+
+// <-- JVM NOT MANDATORY -->
+// <-- ENGLISH IMPOSED -->
+// <-- INTERACTIVE TEST -->
+// ============================================================================
+// Unitary tests for mexWarnMsgTxt mex function
+// ============================================================================
+
+cd(TMPDIR);
+
+ilib_verbose(0);
+
+mputl(['#include ""mex.h""';
+       'void mexFunction(int nlhs, mxArray *plhs[], int nrhs, mxArray *prhs[])';
+       '{';
+       '    mexWarnMsgTxt(""If you read this message, mexWarnMsgTxt works!"");';
+       '}'],'mexwarnMsgTxt.c');
+ilib_mex_build('libmextest',['warnMsgTxt','mexwarnMsgTxt','cmex'], 'mexwarnMsgTxt.c',[],'Makelib','','','');
+exec('loader.sce');
+
+warnMsgTxt()
index f8c8725..3231455 100644 (file)
@@ -23,3 +23,4 @@ ilib_mex_build('libmextest', ['arrayToString', 'mexArrayToString', 'cmex'], 'mex
 exec('loader.sce');
 
 arrayToString("hello world");
+arrayToString(["two"; "lines"]);
diff --git a/scilab/modules/mexlib/tests/unit_tests/mxAssertS.tst b/scilab/modules/mexlib/tests/unit_tests/mxAssertS.tst
new file mode 100644 (file)
index 0000000..f3230df
--- /dev/null
@@ -0,0 +1,27 @@
+// ============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2011-2011 - Gsoc 2011 - Iuri SILVIO
+//
+//  This file is distributed under the same license as the Scilab package.
+// ============================================================================
+
+// <-- JVM NOT MANDATORY -->
+// <-- ENGLISH IMPOSED -->
+// <-- INTERACTIVE TEST -->
+// ============================================================================
+// Unitary tests for mxAssertS mex function
+// ============================================================================
+
+cd(TMPDIR);
+ilib_verbose(0);
+mputl(['#include ""mex.h""';
+       'void mexFunction(int nlhs, mxArray *plhs[], int nrhs, mxArray *prhs[])';
+       '{';
+       '    mxAssertS(mxGetScalar(prhs[0]), mxGetChars(prhs[1]));';
+       '}'],'mexAssertS.c');
+ilib_mex_build('libmextest',['assertS','mexAssertS','cmex'], 'mexAssertS.c',[],'Makelib','','','');
+exec('loader.sce');
+
+assertS(1, 'This is true');
+assertS(0, 'This is false and throws an exception.');
+assertS(1, 'This assert is never executed');
diff --git a/scilab/modules/mexlib/tests/unit_tests/mxCreateCharArray.dia.ref b/scilab/modules/mexlib/tests/unit_tests/mxCreateCharArray.dia.ref
new file mode 100644 (file)
index 0000000..6c1b47d
--- /dev/null
@@ -0,0 +1,50 @@
+
+// ============================================================================
+
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+
+// Copyright (C) 2011-2011 - Gsoc 2011 - Iuri SILVIO
+
+//
+
+//  This file is distributed under the same license as the Scilab package.
+
+// ============================================================================
+
+// <-- JVM NOT MANDATORY -->
+
+// <-- ENGLISH IMPOSED -->
+
+// ============================================================================
+
+// Unitary tests for mxCreateCharArray mex function
+
+// ============================================================================
+
+cd(TMPDIR);
+
+ilib_verbose(0);
+
+mputl(['#include ""mex.h""';
+       '#include <wchar.h>';
+       'void mexFunction(int nlhs, mxArray *plhs[], int nrhs, mxArray *prhs[])';
+       '{';
+       '    int dims[2] = {1, 1};';
+       '    mxArray *pOut1 = mxCreateCharArray(2, dims);';
+       '    plhs[0] = pOut1;';
+       '    wchar_t *data[1];';
+       '    data[0] = L""hello world"";';
+       '    mxArray *pOut2 = mxCreateCharArray(2, dims);';
+       '    mxSetData(pOut2, data);';
+       '    plhs[1] = pOut2;';
+       '}'],'mexcreateCharArray.c');
+
+ilib_mex_build('libmextest',['createCharArray','mexcreateCharArray','cmex'], 'mexcreateCharArray.c',[],'Makelib','','','');
+
+exec('loader.sce');
+
+[out1, out2] = createCharArray();
+
+if size(out1, "*") <> 1 then pause end
+
+if out2(1) <> "hello world" then pause end
diff --git a/scilab/modules/mexlib/tests/unit_tests/mxCreateCharArray.tst b/scilab/modules/mexlib/tests/unit_tests/mxCreateCharArray.tst
new file mode 100644 (file)
index 0000000..46f2482
--- /dev/null
@@ -0,0 +1,34 @@
+// ============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2011-2011 - Gsoc 2011 - Iuri SILVIO
+//
+//  This file is distributed under the same license as the Scilab package.
+// ============================================================================
+
+// <-- JVM NOT MANDATORY -->
+// <-- ENGLISH IMPOSED -->
+// ============================================================================
+// Unitary tests for mxCreateCharArray mex function
+// ============================================================================
+
+cd(TMPDIR);
+ilib_verbose(0);
+mputl(['#include ""mex.h""';
+       '#include <wchar.h>';
+       'void mexFunction(int nlhs, mxArray *plhs[], int nrhs, mxArray *prhs[])';
+       '{';
+       '    int dims[2] = {1, 1};';
+       '    mxArray *pOut1 = mxCreateCharArray(2, dims);';
+       '    plhs[0] = pOut1;';
+       '    wchar_t *data[1];';
+       '    data[0] = L""hello world"";';
+       '    mxArray *pOut2 = mxCreateCharArray(2, dims);';
+       '    mxSetData(pOut2, data);';
+       '    plhs[1] = pOut2;';
+       '}'],'mexcreateCharArray.c');
+ilib_mex_build('libmextest',['createCharArray','mexcreateCharArray','cmex'], 'mexcreateCharArray.c',[],'Makelib','','','');
+exec('loader.sce');
+
+[out1, out2] = createCharArray();
+if size(out1, "*") <> 1 then pause end
+if out2(1) <> "hello world" then pause end
diff --git a/scilab/modules/mexlib/tests/unit_tests/mxCreateCharMatrixFromStrings.dia.ref b/scilab/modules/mexlib/tests/unit_tests/mxCreateCharMatrixFromStrings.dia.ref
new file mode 100644 (file)
index 0000000..2515b59
--- /dev/null
@@ -0,0 +1,44 @@
+
+// ============================================================================
+
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+
+// Copyright (C) 2011-2011 - Gsoc 2011 - Iuri SILVIO
+
+//
+
+//  This file is distributed under the same license as the Scilab package.
+
+// ============================================================================
+
+// <-- JVM NOT MANDATORY -->
+
+// <-- ENGLISH IMPOSED -->
+
+// ============================================================================
+
+// Unitary tests for mxCreateCharMatrixFromStrings mex function
+
+// ============================================================================
+
+cd(TMPDIR);
+
+ilib_verbose(0);
+
+mputl([ '#include ""mex.h""';
+        'void mexFunction(int nlhs, mxArray *plhs[], int nrhs, mxArray *prhs[])';
+        '{';
+        '    char *strings[2];';
+        '    strings[0] = ""value"";';
+        '    strings[1] = ""another value"";';
+        '    mxArray *pOut = mxCreateCharMatrixFromStrings(2, strings);';
+        '    char *res = mxArrayToString(pOut);';
+        '    plhs[0] = pOut;';
+        '}'],'mexcreateCharMatrixFromStrings.c');
+ilib_mex_build('libmextest', ['createCharMatrixFromStrings', 'mexcreateCharMatrixFromStrings', 'cmex'], 'mexcreateCharMatrixFromStrings.c', [], 'Makelib', '', '', '');
+
+exec('loader.sce');
+
+res = createCharMatrixFromStrings();
+if res(1) <> "value" then pause end
+if res(2) <> "another value" then pause end
diff --git a/scilab/modules/mexlib/tests/unit_tests/mxCreateCharMatrixFromStrings.tst b/scilab/modules/mexlib/tests/unit_tests/mxCreateCharMatrixFromStrings.tst
new file mode 100644 (file)
index 0000000..cc7d9c0
--- /dev/null
@@ -0,0 +1,31 @@
+// ============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2011-2011 - Gsoc 2011 - Iuri SILVIO
+//
+//  This file is distributed under the same license as the Scilab package.
+// ============================================================================
+
+// <-- JVM NOT MANDATORY -->
+// <-- ENGLISH IMPOSED -->
+// ============================================================================
+// Unitary tests for mxCreateCharMatrixFromStrings mex function
+// ============================================================================
+
+cd(TMPDIR);
+ilib_verbose(0);
+mputl([ '#include ""mex.h""';
+        'void mexFunction(int nlhs, mxArray *plhs[], int nrhs, mxArray *prhs[])';
+        '{';
+        '    char *strings[2];';
+        '    strings[0] = ""value"";';
+        '    strings[1] = ""another value"";';
+        '    mxArray *pOut = mxCreateCharMatrixFromStrings(2, strings);';
+        '    char *res = mxArrayToString(pOut);';
+        '    plhs[0] = pOut;';
+        '}'],'mexcreateCharMatrixFromStrings.c');
+ilib_mex_build('libmextest', ['createCharMatrixFromStrings', 'mexcreateCharMatrixFromStrings', 'cmex'], 'mexcreateCharMatrixFromStrings.c', [], 'Makelib', '', '', '');
+exec('loader.sce');
+
+res = createCharMatrixFromStrings();
+if res(1) <> "value" then pause end
+if res(2) <> "another value" then pause end
\ No newline at end of file
diff --git a/scilab/modules/mexlib/tests/unit_tests/mxDestroyArray.dia.ref b/scilab/modules/mexlib/tests/unit_tests/mxDestroyArray.dia.ref
new file mode 100644 (file)
index 0000000..fc056a7
--- /dev/null
@@ -0,0 +1,68 @@
+
+// ============================================================================
+
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+
+// Copyright (C) 2011-2011 - Gsoc 2011 - Iuri SILVIO
+
+//
+
+//  This file is distributed under the same license as the Scilab package.
+
+// ============================================================================
+
+// <-- JVM NOT MANDATORY -->
+
+// <-- ENGLISH IMPOSED -->
+
+// ============================================================================
+
+// Unitary tests for mxDestroyArray mex function
+
+// ============================================================================
+
+cd(TMPDIR);
+
+ilib_verbose(0);
+
+mputl(['#include ""mex.h""';
+       'void mexFunction(int nlhs, mxArray *plhs[], int nrhs, mxArray *prhs[])';
+       '{';
+       '    mxArray *d = prhs[0];'
+       '    mxDestroyArray(d);';
+       '    if (*d == NULL)';
+       '    {';
+       '        mexPrintf(""It works."");';
+       '    }';
+       '}'],'mexdestroyArray.c');
+
+ilib_mex_build('libmextest',['destroyArray','mexdestroyArray','cmex'], 'mexdestroyArray.c',[],'Makelib','','','');
+
+exec('loader.sce');
+
+destroyArray(cell());
+It works.
+destroyArray('s');
+It works.
+destroyArray(double(1));
+It works.
+destroyArray(int8(1));
+It works.
+destroyArray(int16(1));
+It works.
+destroyArray(int32(1));
+It works.
+destroyArray(int64(1));
+It works.
+destroyArray(%t);
+It works.
+destroyArray(struct());
+It works.
+destroyArray(uint8(1));
+It works.
+destroyArray(uint16(1));
+It works.
+destroyArray(uint32(1));
+It works.
+destroyArray(uint64(1));
+It works.
diff --git a/scilab/modules/mexlib/tests/unit_tests/mxDestroyArray.tst b/scilab/modules/mexlib/tests/unit_tests/mxDestroyArray.tst
new file mode 100644 (file)
index 0000000..cdda68a
--- /dev/null
@@ -0,0 +1,42 @@
+// ============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2011-2011 - Gsoc 2011 - Iuri SILVIO
+//
+//  This file is distributed under the same license as the Scilab package.
+// ============================================================================
+
+// <-- JVM NOT MANDATORY -->
+// <-- ENGLISH IMPOSED -->
+// ============================================================================
+// Unitary tests for mxDestroyArray mex function
+// ============================================================================
+
+cd(TMPDIR);
+ilib_verbose(0);
+mputl(['#include ""mex.h""';
+       'void mexFunction(int nlhs, mxArray *plhs[], int nrhs, mxArray *prhs[])';
+       '{';
+       '    mxArray *d = prhs[0];'
+       '    mxDestroyArray(d);';
+       '    if (*d == NULL)';
+       '    {';
+       '        mexPrintf(""It works."");';
+       '    }';
+       '}'],'mexdestroyArray.c');
+
+ilib_mex_build('libmextest',['destroyArray','mexdestroyArray','cmex'], 'mexdestroyArray.c',[],'Makelib','','','');
+exec('loader.sce');
+
+destroyArray(cell());
+destroyArray('s');
+destroyArray(double(1));
+destroyArray(int8(1));
+destroyArray(int16(1));
+destroyArray(int32(1));
+destroyArray(int64(1));
+destroyArray(%t);
+destroyArray(struct());
+destroyArray(uint8(1));
+destroyArray(uint16(1));
+destroyArray(uint32(1));
+destroyArray(uint64(1));
diff --git a/scilab/modules/mexlib/tests/unit_tests/mxFreeMatrix.dia.ref b/scilab/modules/mexlib/tests/unit_tests/mxFreeMatrix.dia.ref
new file mode 100644 (file)
index 0000000..a90f171
--- /dev/null
@@ -0,0 +1,68 @@
+
+// ============================================================================
+
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+
+// Copyright (C) 2011-2011 - Gsoc 2011 - Iuri SILVIO
+
+//
+
+//  This file is distributed under the same license as the Scilab package.
+
+// ============================================================================
+
+// <-- JVM NOT MANDATORY -->
+
+// <-- ENGLISH IMPOSED -->
+
+// ============================================================================
+
+// Unitary tests for mxFreeMatrix mex function
+
+// ============================================================================
+
+cd(TMPDIR);
+
+ilib_verbose(0);
+
+mputl(['#include ""mex.h""';
+       'void mexFunction(int nlhs, mxArray *plhs[], int nrhs, mxArray *prhs[])';
+       '{';
+       '    mxArray *d = prhs[0];'
+       '    mxFreeMatrix(d);';
+       '    if (*d == NULL)';
+       '    {';
+       '        mexPrintf(""It works."");';
+       '    }';
+       '}'],'mexfreeMatrix.c');
+
+ilib_mex_build('libmextest',['freeMatrix','mexfreeMatrix','cmex'], 'mexfreeMatrix.c',[],'Makelib','','','');
+
+exec('loader.sce');
+
+freeMatrix(cell());
+It works.
+freeMatrix('s');
+It works.
+freeMatrix(double(1));
+It works.
+freeMatrix(int8(1));
+It works.
+freeMatrix(int16(1));
+It works.
+freeMatrix(int32(1));
+It works.
+freeMatrix(int64(1));
+It works.
+freeMatrix(%t);
+It works.
+freeMatrix(struct());
+It works.
+freeMatrix(uint8(1));
+It works.
+freeMatrix(uint16(1));
+It works.
+freeMatrix(uint32(1));
+It works.
+freeMatrix(uint64(1));
+It works.
diff --git a/scilab/modules/mexlib/tests/unit_tests/mxFreeMatrix.tst b/scilab/modules/mexlib/tests/unit_tests/mxFreeMatrix.tst
new file mode 100644 (file)
index 0000000..3500788
--- /dev/null
@@ -0,0 +1,42 @@
+// ============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2011-2011 - Gsoc 2011 - Iuri SILVIO
+//
+//  This file is distributed under the same license as the Scilab package.
+// ============================================================================
+
+// <-- JVM NOT MANDATORY -->
+// <-- ENGLISH IMPOSED -->
+// ============================================================================
+// Unitary tests for mxFreeMatrix mex function
+// ============================================================================
+
+cd(TMPDIR);
+ilib_verbose(0);
+mputl(['#include ""mex.h""';
+       'void mexFunction(int nlhs, mxArray *plhs[], int nrhs, mxArray *prhs[])';
+       '{';
+       '    mxArray *d = prhs[0];'
+       '    mxFreeMatrix(d);';
+       '    if (*d == NULL)';
+       '    {';
+       '        mexPrintf(""It works."");';
+       '    }';
+       '}'],'mexfreeMatrix.c');
+
+ilib_mex_build('libmextest',['freeMatrix','mexfreeMatrix','cmex'], 'mexfreeMatrix.c',[],'Makelib','','','');
+exec('loader.sce');
+
+freeMatrix(cell());
+freeMatrix('s');
+freeMatrix(double(1));
+freeMatrix(int8(1));
+freeMatrix(int16(1));
+freeMatrix(int32(1));
+freeMatrix(int64(1));
+freeMatrix(%t);
+freeMatrix(struct());
+freeMatrix(uint8(1));
+freeMatrix(uint16(1));
+freeMatrix(uint32(1));
+freeMatrix(uint64(1));
diff --git a/scilab/modules/mexlib/tests/unit_tests/mxGetElementSize.dia.ref b/scilab/modules/mexlib/tests/unit_tests/mxGetElementSize.dia.ref
new file mode 100644 (file)
index 0000000..f304c40
--- /dev/null
@@ -0,0 +1,63 @@
+
+// ============================================================================
+
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+
+// Copyright (C) 2011-2011 - Gsoc 2011 - Iuri SILVIO
+
+//
+
+//  This file is distributed under the same license as the Scilab package.
+
+// ============================================================================
+
+// <-- JVM NOT MANDATORY -->
+
+// <-- ENGLISH IMPOSED -->
+
+// ============================================================================
+
+// Unitary tests for mxGetElementSize mex function
+
+// ============================================================================
+
+cd(TMPDIR);
+
+ilib_verbose(0);
+
+mputl(['#include ""mex.h""';
+       '#include ""wchar.h""';
+       'void check(mxArray *ptr, int size)';
+       '{';
+       '    if (mxGetElementSize(ptr) == size)';
+       '    {'
+       '        mexPrintf(""T"");';
+       '    }'
+       '    else'
+       '    {'
+       '        mexPrintf(""F"");';
+       '    }'
+       '}';
+       'void mexFunction(int nlhs, mxArray *plhs[], int nrhs, mxArray *prhs[])';
+       '{';
+       '    check(mxCreateCellMatrix(2, 2), sizeof(mxArray *));';
+       '    check(mxCreateStructMatrix(2, 2, 0, NULL), sizeof(mxArray *));';
+       '    check(mxCreateString(""foo""), sizeof(wchar_t *));';
+       '    check(mxCreateDoubleScalar(1), sizeof(double));';
+       '    check(mxCreateNumericMatrix(2, 2, mxINT8_CLASS, mxREAL), sizeof(char));';
+       '    check(mxCreateNumericMatrix(2, 2, mxINT16_CLASS, mxREAL), sizeof(short));';
+       '    check(mxCreateNumericMatrix(2, 2, mxINT32_CLASS, mxREAL), sizeof(int));';
+       '    check(mxCreateNumericMatrix(2, 2, mxINT64_CLASS, mxREAL), sizeof(long long));';
+       '    check(mxCreateNumericMatrix(2, 2, mxUINT8_CLASS, mxREAL), sizeof(unsigned char));';
+       '    check(mxCreateNumericMatrix(2, 2, mxUINT16_CLASS, mxREAL), sizeof(unsigned short));';
+       '    check(mxCreateNumericMatrix(2, 2, mxUINT32_CLASS, mxREAL), sizeof(unsigned int));';
+       '    check(mxCreateNumericMatrix(2, 2, mxUINT64_CLASS, mxREAL), sizeof(unsigned long long));';
+       '    check(mxCreateLogicalScalar(0), sizeof(int));';
+       '}'],'mexgetElementSize.c');
+
+ilib_mex_build('libmextest',['getElementSize','mexgetElementSize','cmex'], 'mexgetElementSize.c',[],'Makelib','','','');
+
+exec('loader.sce');
+
+getElementSize();
+TTTTTTTTTTTTT
diff --git a/scilab/modules/mexlib/tests/unit_tests/mxGetElementSize.tst b/scilab/modules/mexlib/tests/unit_tests/mxGetElementSize.tst
new file mode 100644 (file)
index 0000000..ab26200
--- /dev/null
@@ -0,0 +1,50 @@
+// ============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2011-2011 - Gsoc 2011 - Iuri SILVIO
+//
+//  This file is distributed under the same license as the Scilab package.
+// ============================================================================
+
+// <-- JVM NOT MANDATORY -->
+// <-- ENGLISH IMPOSED -->
+// ============================================================================
+// Unitary tests for mxGetElementSize mex function
+// ============================================================================
+
+cd(TMPDIR);
+ilib_verbose(0);
+mputl(['#include ""mex.h""';
+       '#include ""wchar.h""';
+       'void check(mxArray *ptr, int size)';
+       '{';
+       '    if (mxGetElementSize(ptr) == size)';
+       '    {'
+       '        mexPrintf(""T"");';
+       '    }'
+       '    else'
+       '    {'
+       '        mexPrintf(""F"");';
+       '    }'
+       '}';
+       'void mexFunction(int nlhs, mxArray *plhs[], int nrhs, mxArray *prhs[])';
+       '{';
+       '    check(mxCreateCellMatrix(2, 2), sizeof(mxArray *));';
+       '    check(mxCreateStructMatrix(2, 2, 0, NULL), sizeof(mxArray *));';
+       '    check(mxCreateString(""foo""), sizeof(wchar_t *));';
+       '    check(mxCreateDoubleScalar(1), sizeof(double));';
+       '    check(mxCreateNumericMatrix(2, 2, mxINT8_CLASS, mxREAL), sizeof(char));';
+       '    check(mxCreateNumericMatrix(2, 2, mxINT16_CLASS, mxREAL), sizeof(short));';
+       '    check(mxCreateNumericMatrix(2, 2, mxINT32_CLASS, mxREAL), sizeof(int));';
+       '    check(mxCreateNumericMatrix(2, 2, mxINT64_CLASS, mxREAL), sizeof(long long));';
+       '    check(mxCreateNumericMatrix(2, 2, mxUINT8_CLASS, mxREAL), sizeof(unsigned char));';
+       '    check(mxCreateNumericMatrix(2, 2, mxUINT16_CLASS, mxREAL), sizeof(unsigned short));';
+       '    check(mxCreateNumericMatrix(2, 2, mxUINT32_CLASS, mxREAL), sizeof(unsigned int));';
+       '    check(mxCreateNumericMatrix(2, 2, mxUINT64_CLASS, mxREAL), sizeof(unsigned long long));';
+       '    check(mxCreateLogicalScalar(0), sizeof(int));';
+       '}'],'mexgetElementSize.c');
+
+
+ilib_mex_build('libmextest',['getElementSize','mexgetElementSize','cmex'], 'mexgetElementSize.c',[],'Makelib','','','');
+exec('loader.sce');
+
+getElementSize();
diff --git a/scilab/modules/mexlib/tests/unit_tests/mxGetSetImagData.dia.ref b/scilab/modules/mexlib/tests/unit_tests/mxGetSetImagData.dia.ref
new file mode 100644 (file)
index 0000000..f1a0232
--- /dev/null
@@ -0,0 +1,41 @@
+
+// ============================================================================
+
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+
+// Copyright (C) 2011-2011 - Gsoc 2011 - Iuri SILVIO
+
+//
+
+//  This file is distributed under the same license as the Scilab package.
+
+// ============================================================================
+
+// <-- JVM NOT MANDATORY -->
+
+// <-- ENGLISH IMPOSED -->
+
+// ============================================================================
+
+// Unitary tests for mxGetImagData and mxSetImagData mex functions
+
+// ============================================================================
+
+cd(TMPDIR);
+
+ilib_verbose(0);
+
+mputl(['#include ""mex.h""';
+       'void mexFunction(int nlhs, mxArray *plhs[], int nrhs, mxArray *prhs[])';
+       '{';
+       '    void *data = mxGetImagData(prhs[0]);';
+       '    mxSetImagData(prhs[0], data);';
+       '    plhs[0] = prhs[0];';
+       '}'],'mexGetSetImagData.c');
+ilib_mex_build('libmextest',['getSetImagData','mexGetSetImagData','cmex'], 'mexGetSetImagData.c',[],'Makelib','','','');
+
+exec('loader.sce');
+
+r = getSetImagData(complex(1, 2));
+
+if r(1) <> complex(1, 2) then pause end
diff --git a/scilab/modules/mexlib/tests/unit_tests/mxGetSetImagData.tst b/scilab/modules/mexlib/tests/unit_tests/mxGetSetImagData.tst
new file mode 100644 (file)
index 0000000..e8ab407
--- /dev/null
@@ -0,0 +1,27 @@
+// ============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2011-2011 - Gsoc 2011 - Iuri SILVIO
+//
+//  This file is distributed under the same license as the Scilab package.
+// ============================================================================
+
+// <-- JVM NOT MANDATORY -->
+// <-- ENGLISH IMPOSED -->
+// ============================================================================
+// Unitary tests for mxGetImagData and mxSetImagData mex functions
+// ============================================================================
+
+cd(TMPDIR);
+ilib_verbose(0);
+mputl(['#include ""mex.h""';
+       'void mexFunction(int nlhs, mxArray *plhs[], int nrhs, mxArray *prhs[])';
+       '{';
+       '    void *data = mxGetImagData(prhs[0]);';
+       '    mxSetImagData(prhs[0], data);';
+       '    plhs[0] = prhs[0];';
+       '}'],'mexGetSetImagData.c');
+ilib_mex_build('libmextest',['getSetImagData','mexGetSetImagData','cmex'], 'mexGetSetImagData.c',[],'Makelib','','','');
+exec('loader.sce');
+
+r = getSetImagData(complex(1, 2));
+if r(1) <> complex(1, 2) then pause end
index 134ca78..072fb99 100644 (file)
@@ -49,3 +49,8 @@ if out3 <> 1 then pause end
 
 if out4 <> "A string bigger tha" then pause end
 
+[out5, out6] = getString(["multiline"; "string"]);
+
+if out5 <> 0 then pause end
+
+if out6 <> "multilinestring" then pause end
index db9ed5c..c799127 100644 (file)
@@ -30,3 +30,7 @@ if out2 <> "String to copy." then pause end
 [out3, out4] = getString("A string bigger than 20 chars.");
 if out3 <> 1 then pause end
 if out4 <> "A string bigger tha" then pause end
+
+[out5, out6] = getString(["multiline"; "string"]);
+if out5 <> 0 then pause end
+if out6 <> "multilinestring" then pause end
diff --git a/scilab/modules/mexlib/tests/unit_tests/mxMalloc.dia.ref b/scilab/modules/mexlib/tests/unit_tests/mxMalloc.dia.ref
new file mode 100644 (file)
index 0000000..8abd0a6
--- /dev/null
@@ -0,0 +1,45 @@
+
+// ============================================================================
+
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+
+// Copyright (C) 2011-2011 - Gsoc 2011 - Iuri SILVIO
+
+//
+
+//  This file is distributed under the same license as the Scilab package.
+
+// ============================================================================
+
+// <-- JVM NOT MANDATORY -->
+
+// <-- ENGLISH IMPOSED -->
+
+// ============================================================================
+
+// Unitary tests for mxMalloc mex function
+
+// ============================================================================
+
+cd(TMPDIR);
+
+ilib_verbose(0);
+
+mputl(['#include ""mex.h""';
+       'void mexFunction(int nlhs, mxArray *plhs[], int nrhs, mxArray *prhs[])';
+       '{';
+       '    double *data = mxMalloc(2 * sizeof(double *));';
+       '    data[0] = 1.0;';
+       '    data[1] = 3.2;';
+       '    plhs[0] = mxCreateDoubleMatrix(2, 1, mxREAL);'
+       '    mxSetPr(plhs[0], data);';
+       '}'],'mexmalloc.c');
+ilib_mex_build('libmextest',['malloc','mexmalloc','cmex'], 'mexmalloc.c',[],'Makelib','','','');
+
+exec('loader.sce');
+
+r = malloc();
+
+if r(1) <> 1 then pause end
+
+if r(2) <> 3.2 then pause end
diff --git a/scilab/modules/mexlib/tests/unit_tests/mxMalloc.tst b/scilab/modules/mexlib/tests/unit_tests/mxMalloc.tst
new file mode 100644 (file)
index 0000000..c42309e
--- /dev/null
@@ -0,0 +1,30 @@
+// ============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2011-2011 - Gsoc 2011 - Iuri SILVIO
+//
+//  This file is distributed under the same license as the Scilab package.
+// ============================================================================
+
+// <-- JVM NOT MANDATORY -->
+// <-- ENGLISH IMPOSED -->
+// ============================================================================
+// Unitary tests for mxMalloc mex function
+// ============================================================================
+
+cd(TMPDIR);
+ilib_verbose(0);
+mputl(['#include ""mex.h""';
+       'void mexFunction(int nlhs, mxArray *plhs[], int nrhs, mxArray *prhs[])';
+       '{';
+       '    double *data = mxMalloc(2 * sizeof(double *));';
+       '    data[0] = 1.0;';
+       '    data[1] = 3.2;';
+       '    plhs[0] = mxCreateDoubleMatrix(2, 1, mxREAL);'
+       '    mxSetPr(plhs[0], data);';
+       '}'],'mexmalloc.c');
+ilib_mex_build('libmextest',['malloc','mexmalloc','cmex'], 'mexmalloc.c',[],'Makelib','','','');
+exec('loader.sce');
+
+r = malloc();
+if r(1) <> 1 then pause end
+if r(2) <> 3.2 then pause end
diff --git a/scilab/modules/mexlib/tests/unit_tests/mxSetClearLogical.dia.ref b/scilab/modules/mexlib/tests/unit_tests/mxSetClearLogical.dia.ref
new file mode 100644 (file)
index 0000000..bab127f
--- /dev/null
@@ -0,0 +1,51 @@
+
+// ============================================================================
+
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+
+// Copyright (C) 2011-2011 - Gsoc 2011 - Iuri SILVIO
+
+//
+
+//  This file is distributed under the same license as the Scilab package.
+
+// ============================================================================
+
+// <-- JVM NOT MANDATORY -->
+
+// <-- ENGLISH IMPOSED -->
+
+// ============================================================================
+
+// Unitary tests for mxSetLogical and mxClearLogical mex functions
+
+// ============================================================================
+
+cd(TMPDIR);
+
+ilib_verbose(0);
+
+mputl(['#include ""mex.h""';
+       'void mexFunction(int nlhs, mxArray *plhs[], int nrhs, mxArray *prhs[])';
+       '{';
+       '    mxArray *pOut1 = prhs[0];'
+       '    mxArray *pOut2 = prhs[1];'
+       '    mxArray *pOut3 = prhs[2];'
+       '    mxSetLogical(pOut1);';
+       '    mxSetLogical(pOut2);';
+       '    mxClearLogical(pOut3);';
+       '    plhs[0] = pOut1;';
+       '    plhs[1] = pOut2;';
+       '    plhs[2] = pOut3;';
+       '}'],'mexsetClearLogical.c');
+ilib_mex_build('libmextest',['setClearLogical','mexsetClearLogical','cmex'], 'mexsetClearLogical.c',[],'Makelib','','','');
+
+exec('loader.sce');
+
+[out1, out2, out3] = setClearLogical([1 0], int32([1 0]), [%t %f]);
+
+if out1 <> [%t %f] then pause end
+
+if out2 <> [%t %f] then pause end
+
+if out3 <> [1 0] then pause end
diff --git a/scilab/modules/mexlib/tests/unit_tests/mxSetClearLogical.tst b/scilab/modules/mexlib/tests/unit_tests/mxSetClearLogical.tst
new file mode 100644 (file)
index 0000000..bb71eef
--- /dev/null
@@ -0,0 +1,36 @@
+// ============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2011-2011 - Gsoc 2011 - Iuri SILVIO
+//
+//  This file is distributed under the same license as the Scilab package.
+// ============================================================================
+
+// <-- JVM NOT MANDATORY -->
+// <-- ENGLISH IMPOSED -->
+// <-- NOT FIXED -->
+// ============================================================================
+// Unitary tests for mxSetLogical and mxClearLogical mex functions
+// ============================================================================
+
+cd(TMPDIR);
+ilib_verbose(0);
+mputl(['#include ""mex.h""';
+       'void mexFunction(int nlhs, mxArray *plhs[], int nrhs, mxArray *prhs[])';
+       '{';
+       '    mxArray *pOut1 = prhs[0];'
+       '    mxArray *pOut2 = prhs[1];'
+       '    mxArray *pOut3 = prhs[2];'
+       '    mxSetLogical(pOut1);';
+       '    mxSetLogical(pOut2);';
+       '    mxClearLogical(pOut3);';
+       '    plhs[0] = pOut1;';
+       '    plhs[1] = pOut2;';
+       '    plhs[2] = pOut3;';
+       '}'],'mexsetClearLogical.c');
+ilib_mex_build('libmextest',['setClearLogical','mexsetClearLogical','cmex'], 'mexsetClearLogical.c',[],'Makelib','','','');
+exec('loader.sce');
+
+[out1, out2, out3] = setClearLogical([1 0], int32([1 0]), [%t %f]);
+if out1 <> [%t %f] then pause end
+if out2 <> [%t %f] then pause end
+if out3 <> [1 0] then pause end