update matrix insert and insertNew with : 90/16090/2
Antoine ELIAS [Wed, 4 Mar 2015 11:06:34 +0000 (12:06 +0100)]
Change-Id: I5abfd24f48a4b87f720b01197923b47792e585d2

scilab/modules/ast/src/cpp/ast/run_AssignExp.hpp
scilab/modules/ast/src/cpp/ast/visitor_common.cpp
scilab/modules/ast/src/cpp/types/arrayof.cpp
scilab/modules/ast/src/cpp/types/types.cpp
scilab/modules/ast/src/cpp/types/types_tools.cpp
scilab/modules/ast/tests/unit_tests/colon_insert.dia.ref [new file with mode: 0644]
scilab/modules/ast/tests/unit_tests/colon_insert.tst [new file with mode: 0644]

index 9a0ab3a..ca9049b 100644 (file)
@@ -294,7 +294,7 @@ void RunVisitorT<T>::visitprivate(const AssignExp  &e)
             exec.setExpectedSize(iLhsCount);
             e.getRightExp().accept(exec);
 
-            if (exec.getResultSize() != iLhsCount)
+            if (exec.getResultSize() < iLhsCount)
             {
                 std::wostringstream os;
                 os << _W("Incompatible assignation: trying to assign ") << exec.getResultSize();
index 9bab8db..adf96f7 100644 (file)
@@ -1493,7 +1493,7 @@ types::InternalType* evaluateFields(const ast::Exp* _pExp, std::list<ExpHistory*
                 if (pIT == NULL)
                 {
                     std::wostringstream os;
-                    os << _W("Submatrix incorrectly defined.");
+                    os << _W("Submatrix incorrectly defined.\n");
                     throw ast::ScilabError(os.str(), 999, _pExp->getLocation());
                 }
 
index f2004ff..50460ec 100644 (file)
@@ -151,6 +151,29 @@ InternalType* ArrayOf<T>::insert(typed_list* _pArgs, InternalType* _pSource)
         return this;
     }
 
+    //only scalar can be used to ".=" operation
+    if (iSeqCount != pSource->getSize() && pSource->isScalar() == false)
+    {
+        return NULL;
+    }
+
+    //remove last dimension at size 1
+    //remove last dimension if are == 1
+    for (int i = (iDims - 1); i >= 2; i--)
+    {
+        if (piMaxDim[i] == 1)
+        {
+            iDims--;
+            pArg.back()->killMe();
+            pArg.pop_back();
+        }
+        else
+        {
+            break;
+        }
+    }
+
+
     if (iDims >= m_iDims)
     {
         //all case are good, we can do almost everything
@@ -185,35 +208,15 @@ InternalType* ArrayOf<T>::insert(typed_list* _pArgs, InternalType* _pSource)
             bool bPassed = false;
             int *piSourceDims = pSource->getDimsArray();
 
-            for (int i = (iNewDims - 1); i >= m_iDims; i--)
+            for (int i = m_iDims; i < iNewDims; ++i)
             {
-                if ((*_pArgs)[i]->isColon())
-                {
-                    bIsColon = true;
-                    if (pSource->isVector() && ( bPassed == false ))
-                    {
-                        piNewDims[i] = std::max(piSourceDims[0], piSourceDims[1]);
-                    }
-                    else if ((iSource < 0) || (bPassed))
-                    {
-                        piNewDims[i] = 1;
-                    }
-                    else
-                    {
-                        piNewDims[i] = piSourceDims[iSource];
-                        iSource--;
-                    }
-                }
-                else
-                {
-                    piNewDims[i] = piMaxDim[i];
-                }
+                piNewDims[i] = piMaxDim[i];
             }
         }
     }
     else // _iDims < m_iDims
     {
-        if (isVector() || isScalar() || getSize() == 0) //getSize() == 0, on ly for [] and {}
+        if (isVector() || isScalar() || getSize() == 0) //getSize() == 0, only for [] and {}
         {
             if (getSize() < piMaxDim[0])
             {
@@ -248,7 +251,7 @@ InternalType* ArrayOf<T>::insert(typed_list* _pArgs, InternalType* _pSource)
                 int iSize = pArg[i]->getAs<ArrayOf>()->getSize();
                 for (int j = 0 ; j < iSize ; j++)
                 {
-                    if (pIdx[j] >= m_piDims[i])
+                    if (pIdx[j] > m_piDims[i])
                     {
                         delete[] piCountDim;
                         delete[] piMaxDim;
@@ -305,10 +308,11 @@ InternalType* ArrayOf<T>::insert(typed_list* _pArgs, InternalType* _pSource)
         setComplex(true);
     }
 
-    int* piIndex    = new int[_pArgs->size()];
-    int* piCoord    = new int[_pArgs->size()];
+    int argSize = static_cast<int>(pArg.size());
+    int* piIndex = new int[argSize];
+    int* piCoord = new int[argSize];
     int* piViewDims = new int[iDims];
-    memset(piIndex, 0x00, sizeof(int) * _pArgs->size());
+    memset(piIndex, 0x00, sizeof(int) * argSize);
 
     //convert  current dimension to view dimension
     for (int i = 0 ; i < iDims ; i++)
@@ -322,10 +326,10 @@ InternalType* ArrayOf<T>::insert(typed_list* _pArgs, InternalType* _pSource)
 
     for (int i = 0 ; i < iSeqCount ; i++)
     {
-        computeTuples(piCountDim, (int)_pArgs->size(), (int)_pArgs->size() - 1, piIndex);
+        computeTuples(piCountDim, argSize, argSize - 1, piIndex);
 
         //std::cout << "[";
-        for (int j = 0 ; j < (int)_pArgs->size() ; j++)
+        for (int j = 0; j < argSize; j++)
         {
             piCoord[j] = getIntValueFromDouble(pArg[j], piIndex[j]) - 1;
             //InternalType* pVar = pArg[j];
@@ -458,16 +462,16 @@ InternalType* ArrayOf<T>::insertNew(typed_list* _pArgs, InternalType* _pSource)
     if (bUndefine)
     {
         //manage : and $ in creation by insertion
-        int iSource = (pSource->getDims() - 1);
-        int *piSourceDims   = pSource->getDimsArray();
+        int *piSourceDims = pSource->getDimsArray();
+        int iSourceDims = pSource->getDims();
         int iCompteurNull = 0;
-        bool bPassed = false;
-
+        int iLastNull = 0;
         for (int i = 0; i < iDims; i++)
         {
             if (pArg[i] == NULL)
             {
                 iCompteurNull++;
+                iLastNull = i;
             }
             else
             {
@@ -478,40 +482,50 @@ InternalType* ArrayOf<T>::insertNew(typed_list* _pArgs, InternalType* _pSource)
             }
         }
 
-        for (int i = (iDims - 1); i >= 0; i--)
+        //if all index are : -> a = x
+        if (iCompteurNull == pArg.size())
         {
-            if (pArg[i] == NULL)
+            return _pSource;
+        }
+
+        //vector case
+        if (pSource->isVector() && iCompteurNull == 1)
+        {
+            piMaxDim[iLastNull] = pSource->getSize();
+            pArg[iLastNull] = createDoubleVector(piMaxDim[iLastNull]);
+        }
+        else
+        {
+            //matrix and hypermatrix case
+            if (iCompteurNull < pSource->getDims())
             {
-                //undefine value
-                if (pSource->isScalar())
-                {
-                    piMaxDim[i]     = 1;
-                    //piCountDim[i]   = 1;
-                }
-                else if (pSource->isVector() && (iCompteurNull != pSource->getSize()) && (bPassed == false))
-                {
-                    piMaxDim[i] = std::max(piSourceDims[0], piSourceDims[1]);
-                    bPassed = true;
-                }
-                else if ((iCompteurNull > pSource->getRows()) && (bPassed == false))
-                {
-                    piMaxDim[i] = pSource->getSize();
-                    bPassed = true;
-                }
-                else if ((iSource < 0) || (bPassed))
-                {
-                    piMaxDim[i] = 1;
-                    iSource = -1;
-                }
-                else
+                delete[] piMaxDim;
+                delete[] piCountDim;
+                //free pArg content
+                cleanIndexesArguments(_pArgs, &pArg);
+                //contain bad index, like <= 0, ...
+                return NULL;
+            }
+
+            //replace ":" by know source dimensions
+            int iSource = 0;
+            for (int i = 0; i < iDims; ++i)
+            {
+                if (pArg[i] == NULL)
                 {
-                    piMaxDim[i]     = piSourceDims[iSource];
-                    //piCountDim[i]   = piSourceDims[iSource];
+                    if (iSource < iSourceDims)
+                    {
+                        piMaxDim[i] = piSourceDims[iSource];
+                        pArg[i] = createDoubleVector(piMaxDim[i]);
+                        ++iSource;
+                    }
+                    else
+                    {
+                        //fill dimensions after pSource->getDimes() with 1
+                        piMaxDim[i] = 1;
+                        pArg[i] = createDoubleVector(piMaxDim[i]);
+                    }
                 }
-
-                iSource--;
-                //replace pArg value by the new one
-                pArg[i] = createDoubleVector(piMaxDim[i]);
             }
         }
     }
index d987dcb..6a8908f 100644 (file)
@@ -62,7 +62,7 @@ bool GenericType::isIdentity(void)
 {
     if (m_piDims)
     {
-        for (int i = 0 ; i < getDims() ; i++)
+        for (int i = 0; i < getDims(); i++)
         {
             if (m_piDims[i] != -1)
             {
@@ -77,7 +77,7 @@ bool GenericType::isIdentity(void)
 bool GenericType::hasAllIndexesOfRow(int _iRow, int* _piCoord, int _iCoordCount)
 {
     bool bAll = true;
-    for (int i = 0 ; i < getCols() ; i++)
+    for (int i = 0; i < getCols(); i++)
     {
         //+1 to keep 1 based index
         int iIdx = _iRow + i * getCols() + 1;
@@ -95,7 +95,7 @@ bool GenericType::hasAllIndexesOfRow(int _iRow, int* _piCoord, int _iCoordCount)
 bool GenericType::hasAllIndexesOfCol(int _iCol, int* _piCoord, int _iCoordCount)
 {
     bool bAll = true;
-    for (int i = 0 ; i < getRows() ; i++)
+    for (int i = 0; i < getRows(); i++)
     {
         //+1 to keep 1 based index
         int iIdx = i + _iCol * getRows() + 1;
@@ -112,15 +112,15 @@ bool GenericType::hasAllIndexesOfCol(int _iCol, int* _piCoord, int _iCoordCount)
 
 int GenericType::getVarMaxDim(int _iCurrentDim, int _iMaxDim)
 {
-    int iDim    = 1;
+    int iDim = 1;
     if (m_iDims != 0)
     {
-        if (_iMaxDim != m_iDims)
+        if (_iMaxDim < m_iDims)
         {
             //view as "vector", not all dimensions are used
             if (_iCurrentDim == (_iMaxDim - 1))
             {
-                for (int i = _iCurrentDim ; i < m_iDims ; i++)
+                for (int i = _iCurrentDim; i < m_iDims; i++)
                 {
                     iDim *= m_piDims[i];
                 }
@@ -130,6 +130,10 @@ int GenericType::getVarMaxDim(int _iCurrentDim, int _iMaxDim)
                 iDim = m_piDims[_iCurrentDim];
             }
         }
+        else if (_iCurrentDim >= m_iDims)
+        {
+            iDim = 1;
+        }
         else
         {
             //normal view, all dimensions are used
index cd032c1..5477a51 100644 (file)
@@ -313,7 +313,10 @@ void cleanIndexesArguments(typed_list* _pArgsOrig, typed_list* _pArgsNew)
         {
             if ((*_pArgsNew)[iArg] != (*_pArgsOrig)[iArg])
             {
-                (*_pArgsNew)[iArg]->killMe();
+                if ((*_pArgsNew)[iArg])
+                {
+                    (*_pArgsNew)[iArg]->killMe();
+                }
             }
         }
 
diff --git a/scilab/modules/ast/tests/unit_tests/colon_insert.dia.ref b/scilab/modules/ast/tests/unit_tests/colon_insert.dia.ref
new file mode 100644 (file)
index 0000000..d7cfdc9
--- /dev/null
@@ -0,0 +1,145 @@
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2015 - Scilab Enterprises - Antoine ELIAS
+//
+// This file must be used under the terms of the CeCILL.
+// This source file is licensed as described in the file COPYING, which
+// you should have received as part of this distribution.  The terms
+// are also available at
+// http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+//
+//
+// <-- JVM NOT MANDATORY -->
+scalar = 5;
+vect = 1:5;
+vect2 = 6:10;
+mat = [1,2,3,4;5,6,7,8];
+hm = zeros(3,4,2); hm(:) = 1:24;
+// scalar
+clear a; a(:) = scalar;
+assert_checkequal(a, scalar);
+clear a; a(:,:) = scalar;
+assert_checkequal(a, scalar);
+clear a; a(:,:,:) = scalar;
+assert_checkequal(a, scalar);
+clear a; a(:,:,2) = scalar;
+assert_checkequal(a, matrix([0;scalar], 1, 1, 2));
+//scalar insert
+a=scalar; a(:) = scalar;
+assert_checkequal(a, scalar);
+a=scalar; a(:,:) = scalar;
+assert_checkequal(a, scalar);
+a=scalar; a(:,:,2) = scalar;
+assert_checkequal(a, matrix([scalar; scalar], 1, 1, 2));
+//vector
+a=vect; a(:) = scalar;
+assert_checkequal(a, [scalar scalar scalar scalar scalar]);
+a=vect; a(:,:) = scalar;
+assert_checkequal(a, [scalar scalar scalar scalar scalar]);
+a=vect; a(:,:,:) = scalar;
+assert_checkequal(a, [scalar scalar scalar scalar scalar]);
+a=vect; a(:,:,2) = scalar;
+assert_checkequal(a, matrix([vect, scalar,scalar,scalar,scalar,scalar], 1, 5, 2));
+//matrix
+a=mat; a(:) = scalar;
+assert_checkequal(a, matrix([scalar,scalar,scalar,scalar,scalar,scalar,scalar,scalar], 2, 4));
+a=mat; a(:,:) = scalar;
+assert_checkequal(a, matrix([scalar,scalar,scalar,scalar,scalar,scalar,scalar,scalar], 2, 4));
+a=mat; a(:,:,:) = scalar;
+assert_checkequal(a, matrix([scalar,scalar,scalar,scalar,scalar,scalar,scalar,scalar], 2, 4));
+a=mat; a(:,:,2) = scalar;
+assert_checkequal(a, matrix([mat(:)' scalar scalar scalar scalar scalar scalar scalar scalar], 2, 4, 2));
+//hypermatrix
+a=hm; a(:) = scalar;
+assert_checkequal(a, matrix([scalar scalar scalar scalar scalar scalar scalar scalar scalar scalar scalar scalar scalar scalar scalar scalar scalar scalar scalar scalar scalar scalar scalar scalar], 3, 4, 2));
+a=hm; a(:,:) = scalar;
+assert_checkequal(a, matrix([scalar scalar scalar scalar scalar scalar scalar scalar scalar scalar scalar scalar scalar scalar scalar scalar scalar scalar scalar scalar scalar scalar scalar scalar], 3, 4, 2));
+a=hm; a(:,:,:) = scalar;
+assert_checkequal(a, matrix([scalar scalar scalar scalar scalar scalar scalar scalar scalar scalar scalar scalar scalar scalar scalar scalar scalar scalar scalar scalar scalar scalar scalar scalar], 3, 4, 2));
+a=hm; a(:,:,2) = scalar;
+assert_checkequal(a, matrix([(hm(:,:,1)(:))' scalar scalar scalar scalar scalar scalar scalar scalar scalar scalar scalar scalar], 3, 4, 2));
+//vector new insert
+clear a; a(:) = vect;
+assert_checkequal(a, vect);
+clear a; a(:,:) = vect;
+assert_checkequal(a, vect);
+clear a; a(:,:,:) = vect;
+assert_checkequal(a, vect);
+clear a; a(:,:,2) = vect;
+assert_checkequal(a, matrix([0 0 0 0 0 vect], 1, 5, 2));
+clear a; a(:,:,:,2) = vect;
+assert_checkequal(a, matrix([0 0 0 0 0 vect], 1, 5, 1, 2));
+clear a; a(:) = vect';
+assert_checkequal(a, vect');
+clear a; a(:,:) = vect';
+assert_checkequal(a, vect');
+clear a; a(:,:,:) = vect';
+assert_checkequal(a, vect');
+clear a; a(:,:,2) = vect';
+assert_checkequal(a, matrix([0 0 0 0 0 vect], 5, 1, 2));
+clear a; a(:,:,:,2) = vect';
+assert_checkequal(a, matrix([0 0 0 0 0 vect], 5, 1, 1, 2));
+clear a; a(:,1,:) = vect;
+assert_checkequal(a, matrix(vect, 1, 1, 5));
+clear a; a(:,1,:) = vect';
+assert_checkequal(a, vect');
+a=vect; a(:) = vect2;
+assert_checkequal(a, vect2);
+a=vect; a(:,:) = vect2;
+assert_checkequal(a, vect2);
+a=vect; a(:,:,:) = vect2;
+assert_checkequal(a, vect2);
+a=vect; a(:,:,2) = vect2;
+assert_checkequal(a, matrix([vect vect2], 1, 5, 2));
+a=vect; a(:,:,:,2) = vect2;
+assert_checkequal(a, matrix([vect vect2], 1, 5, 1, 2));
+a=mat; a(:,:,2) = 9:16;
+assert_checkequal(a, matrix([mat(:)', 9:16], 2, 4, 2));
+a=mat; a(:,:,:,2) = 9:16;
+assert_checkequal(a, matrix([mat(:)', 9:16], 2, 4, 1, 2));
+a=hm; a(:) = hm(:);
+assert_checkequal(a, hm);
+a=hm; a(:,:) = hm(:);
+assert_checkequal(a, hm);
+a=hm; a(:,:,2) = hm(:,:,1);
+assert_checkequal(a, matrix([hm(:,:,1)(:);hm(:,:,1)(:)], 3, 4, 2));
+a=hm; a(:,:,:,2) = hm(:);
+assert_checkequal(a, matrix([hm(:);hm(:)], 3,4,2,2));
+//matrix
+clear a; a(:) = mat;
+assert_checkequal(a, mat);
+clear a; a(:,:) = mat;
+assert_checkequal(a, mat);
+clear a; a(:,:,:) = mat;
+assert_checkequal(a, mat);
+clear a; a(:,:,2) = mat;
+assert_checkequal(a, matrix([zeros(mat(:));mat(:)], 2, 4, 2));
+clear a; a(:,:,:,2) = mat;
+assert_checkequal(a, matrix([zeros(mat(:));mat(:)], 2, 4, 1, 2));
+clear a; a(:,1,:) = mat;
+assert_checkequal(a, matrix(mat, 2, 1, 4));
+a=mat; a(:) = mat(:);
+assert_checkequal(a, mat);
+a=mat; a(:,:) = mat(:);
+assert_checkequal(a, mat);
+a=mat; a(:,:,2) = mat(:);
+assert_checkequal(a, matrix([mat(:);mat(:)], 2, 4, 2));
+a=mat; a(:,:,:,2) = mat(:)
+a  = 
+(:,:,1,1)
+    1.    2.    3.    4.
+    5.    6.    7.    8.
+(:,:,1,2)
+    1.    2.    3.    4.
+    5.    6.    7.    8.
+assert_checkequal(a, matrix([mat(:);mat(:)], 2, 4, 1, 2));
+//hypermatrix
+clear a; a(:) = hm;
+assert_checkequal(a, hm);
+clear a; a(:,:) = hm;
+assert_checkequal(a, hm);
+clear a; a(:,:,:) = hm;
+assert_checkequal(a, hm);
+clear a; a(:,:,:, 2) = hm;
+assert_checkequal(a, matrix([zeros(hm)(:);hm(:)], 3, 4, 2, 2));
+clear a; a(:,1,:,:) = hm;
+assert_checkequal(a, matrix(hm, 3, 1, 4, 2));
diff --git a/scilab/modules/ast/tests/unit_tests/colon_insert.tst b/scilab/modules/ast/tests/unit_tests/colon_insert.tst
new file mode 100644 (file)
index 0000000..f7e79d6
--- /dev/null
@@ -0,0 +1,198 @@
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2015 - Scilab Enterprises - Antoine ELIAS
+//
+// This file must be used under the terms of the CeCILL.
+// This source file is licensed as described in the file COPYING, which
+// you should have received as part of this distribution.  The terms
+// are also available at
+// http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+//
+//
+
+// <-- JVM NOT MANDATORY -->
+
+scalar = 5;
+vect = 1:5;
+vect2 = 6:10;
+mat = [1,2,3,4;5,6,7,8];
+hm = zeros(3,4,2); hm(:) = 1:24;
+
+// scalar
+clear a; a(:) = scalar;
+assert_checkequal(a, scalar);
+
+clear a; a(:,:) = scalar;
+assert_checkequal(a, scalar);
+
+clear a; a(:,:,:) = scalar;
+assert_checkequal(a, scalar);
+
+clear a; a(:,:,2) = scalar;
+assert_checkequal(a, matrix([0;scalar], 1, 1, 2));
+
+//scalar insert
+a=scalar; a(:) = scalar;
+assert_checkequal(a, scalar);
+
+a=scalar; a(:,:) = scalar;
+assert_checkequal(a, scalar);
+
+a=scalar; a(:,:,2) = scalar;
+assert_checkequal(a, matrix([scalar; scalar], 1, 1, 2));
+
+//vector
+a=vect; a(:) = scalar;
+assert_checkequal(a, [scalar scalar scalar scalar scalar]);
+
+a=vect; a(:,:) = scalar;
+assert_checkequal(a, [scalar scalar scalar scalar scalar]);
+
+a=vect; a(:,:,:) = scalar;
+assert_checkequal(a, [scalar scalar scalar scalar scalar]);
+
+a=vect; a(:,:,2) = scalar;
+assert_checkequal(a, matrix([vect, scalar,scalar,scalar,scalar,scalar], 1, 5, 2));
+
+//matrix
+a=mat; a(:) = scalar;
+assert_checkequal(a, matrix([scalar,scalar,scalar,scalar,scalar,scalar,scalar,scalar], 2, 4));
+
+a=mat; a(:,:) = scalar;
+assert_checkequal(a, matrix([scalar,scalar,scalar,scalar,scalar,scalar,scalar,scalar], 2, 4));
+
+a=mat; a(:,:,:) = scalar;
+assert_checkequal(a, matrix([scalar,scalar,scalar,scalar,scalar,scalar,scalar,scalar], 2, 4));
+
+a=mat; a(:,:,2) = scalar;
+assert_checkequal(a, matrix([mat(:)' scalar scalar scalar scalar scalar scalar scalar scalar], 2, 4, 2));
+
+//hypermatrix
+a=hm; a(:) = scalar;
+assert_checkequal(a, matrix([scalar scalar scalar scalar scalar scalar scalar scalar scalar scalar scalar scalar scalar scalar scalar scalar scalar scalar scalar scalar scalar scalar scalar scalar], 3, 4, 2));
+
+a=hm; a(:,:) = scalar;
+assert_checkequal(a, matrix([scalar scalar scalar scalar scalar scalar scalar scalar scalar scalar scalar scalar scalar scalar scalar scalar scalar scalar scalar scalar scalar scalar scalar scalar], 3, 4, 2));
+
+a=hm; a(:,:,:) = scalar;
+assert_checkequal(a, matrix([scalar scalar scalar scalar scalar scalar scalar scalar scalar scalar scalar scalar scalar scalar scalar scalar scalar scalar scalar scalar scalar scalar scalar scalar], 3, 4, 2));
+
+a=hm; a(:,:,2) = scalar;
+assert_checkequal(a, matrix([(hm(:,:,1)(:))' scalar scalar scalar scalar scalar scalar scalar scalar scalar scalar scalar scalar], 3, 4, 2));
+
+//vector new insert
+clear a; a(:) = vect;
+assert_checkequal(a, vect);
+
+clear a; a(:,:) = vect;
+assert_checkequal(a, vect);
+
+clear a; a(:,:,:) = vect;
+assert_checkequal(a, vect);
+
+clear a; a(:,:,2) = vect;
+assert_checkequal(a, matrix([0 0 0 0 0 vect], 1, 5, 2));
+
+clear a; a(:,:,:,2) = vect;
+assert_checkequal(a, matrix([0 0 0 0 0 vect], 1, 5, 1, 2));
+
+clear a; a(:) = vect';
+assert_checkequal(a, vect');
+
+clear a; a(:,:) = vect';
+assert_checkequal(a, vect');
+
+clear a; a(:,:,:) = vect';
+assert_checkequal(a, vect');
+
+clear a; a(:,:,2) = vect';
+assert_checkequal(a, matrix([0 0 0 0 0 vect], 5, 1, 2));
+
+clear a; a(:,:,:,2) = vect';
+assert_checkequal(a, matrix([0 0 0 0 0 vect], 5, 1, 1, 2));
+
+clear a; a(:,1,:) = vect;
+assert_checkequal(a, matrix(vect, 1, 1, 5));
+
+clear a; a(:,1,:) = vect';
+assert_checkequal(a, vect');
+
+a=vect; a(:) = vect2;
+assert_checkequal(a, vect2);
+
+a=vect; a(:,:) = vect2;
+assert_checkequal(a, vect2);
+
+a=vect; a(:,:,:) = vect2;
+assert_checkequal(a, vect2);
+
+a=vect; a(:,:,2) = vect2;
+assert_checkequal(a, matrix([vect vect2], 1, 5, 2));
+
+a=vect; a(:,:,:,2) = vect2;
+assert_checkequal(a, matrix([vect vect2], 1, 5, 1, 2));
+
+a=mat; a(:,:,2) = 9:16;
+assert_checkequal(a, matrix([mat(:)', 9:16], 2, 4, 2));
+
+a=mat; a(:,:,:,2) = 9:16;
+assert_checkequal(a, matrix([mat(:)', 9:16], 2, 4, 1, 2));
+
+a=hm; a(:) = hm(:);
+assert_checkequal(a, hm);
+
+a=hm; a(:,:) = hm(:);
+assert_checkequal(a, hm);
+
+a=hm; a(:,:,2) = hm(:,:,1);
+assert_checkequal(a, matrix([hm(:,:,1)(:);hm(:,:,1)(:)], 3, 4, 2));
+
+a=hm; a(:,:,:,2) = hm(:);
+assert_checkequal(a, matrix([hm(:);hm(:)], 3,4,2,2));
+
+
+//matrix
+clear a; a(:) = mat;
+assert_checkequal(a, mat);
+
+clear a; a(:,:) = mat;
+assert_checkequal(a, mat);
+
+clear a; a(:,:,:) = mat;
+assert_checkequal(a, mat);
+
+clear a; a(:,:,2) = mat;
+assert_checkequal(a, matrix([zeros(mat(:));mat(:)], 2, 4, 2));
+
+clear a; a(:,:,:,2) = mat;
+assert_checkequal(a, matrix([zeros(mat(:));mat(:)], 2, 4, 1, 2));
+
+clear a; a(:,1,:) = mat;
+assert_checkequal(a, matrix(mat, 2, 1, 4));
+
+a=mat; a(:) = mat(:);
+assert_checkequal(a, mat);
+
+a=mat; a(:,:) = mat(:);
+assert_checkequal(a, mat);
+
+a=mat; a(:,:,2) = mat(:);
+assert_checkequal(a, matrix([mat(:);mat(:)], 2, 4, 2));
+
+a=mat; a(:,:,:,2) = mat(:)
+assert_checkequal(a, matrix([mat(:);mat(:)], 2, 4, 1, 2));
+
+//hypermatrix
+clear a; a(:) = hm;
+assert_checkequal(a, hm);
+
+clear a; a(:,:) = hm;
+assert_checkequal(a, hm);
+
+clear a; a(:,:,:) = hm;
+assert_checkequal(a, hm);
+
+clear a; a(:,:,:, 2) = hm;
+assert_checkequal(a, matrix([zeros(hm)(:);hm(:)], 3, 4, 2, 2));
+
+clear a; a(:,1,:,:) = hm;
+assert_checkequal(a, matrix(hm, 3, 1, 4, 2));