* Bug 15964 fixed: now the sparse empty matrix is always real 66/20866/5
St├ęphane Mottelet [Wed, 20 Feb 2019 09:38:58 +0000 (10:38 +0100)]
http://bugzilla.scilab.org/show_bug.cgi?id=15957

Change-Id: I6d9456d87d688044970dec0d55f25b156053631b

scilab/CHANGES.md
scilab/modules/ast/src/cpp/types/sparse.cpp
scilab/modules/ast/tests/nonreg_tests/bug_15964.tst [new file with mode: 0644]

index 7e97c7e..e92b7c7 100644 (file)
@@ -152,6 +152,7 @@ Bug Fixes
 * [#15577](http://bugzilla.scilab.org/show_bug.cgi?id=15577): `edit` did not accept a line number as text, as with `edit linspace 21`.
 * [#15812](http://bugzilla.scilab.org/show_bug.cgi?id=15812): On assigning variables the source variable may become become corrupted
 * [#15840](http://bugzilla.scilab.org/show_bug.cgi?id=15840): `grand(1,"prm",m)` yielded an unsqueezed size([size(m) 1]) hypermatrix
+* [#15964](http://bugzilla.scilab.org/show_bug.cgi?id=15954): A complex empty sparse matrix could be obtained after insertion.
 * [#15983](http://bugzilla.scilab.org/show_bug.cgi?id=15983): `group()` regressed in 5.5.2 due to a too intrusive fix.
 * [#15995](http://bugzilla.scilab.org/show_bug.cgi?id=15995): patch was missing in surface plot (regression)
 * [#16005](http://bugzilla.scilab.org/show_bug.cgi?id=16005): The `intdec` example was biased and not robust when changing sampling frequencies.
@@ -164,3 +165,4 @@ Bug Fixes
 * [#16075](http://bugzilla.scilab.org/show_bug.cgi?id=16075): `prettyprint()` was broken for cells.
 * [#16085](http://bugzilla.scilab.org/show_bug.cgi?id=16085): insertion in an empty struct was broken.
 * [#16087](http://bugzilla.scilab.org/show_bug.cgi?id=16087): Insertion of struct() in a non-empty struct crashed Scilab.
+
index 7c551d1..3a43c1b 100644 (file)
@@ -1860,29 +1860,27 @@ GenericType* Sparse::remove(typed_list* _pArgs)
         }
     }
 
+    if (iNewDimSize == 0)
+    {
+        delete[] piNewDims;
+        //free pArg content
+        cleanIndexesArguments(_pArgs, &pArg);
+        return new Sparse(0, 0);
+    }
+
     if (iDims == 1)
     {
-        if (iNewDimSize == 0)
+        //two cases, depends of original matrix/vector
+        if ((*_pArgs)[0]->isColon() == false && m_iDims == 2 && m_piDims[0] == 1 && m_piDims[1] != 1)
         {
-            delete[] piNewDims;
-            //free pArg content
-            cleanIndexesArguments(_pArgs, &pArg);
-            return new Sparse(0, 0);
+            //special case for row vector
+            pOut = new Sparse(1, iNewDimSize, isComplex());
+            //in this case we have to care of 2nd dimension
+            //iNotEntire = 1;
         }
         else
         {
-            //two cases, depends of original matrix/vector
-            if ((*_pArgs)[0]->isColon() == false && m_iDims == 2 && m_piDims[0] == 1 && m_piDims[1] != 1)
-            {
-                //special case for row vector
-                pOut = new Sparse(1, iNewDimSize, isComplex());
-                //in this case we have to care of 2nd dimension
-                //iNotEntire = 1;
-            }
-            else
-            {
-                pOut = new Sparse(iNewDimSize, 1, isComplex());
-            }
+            pOut = new Sparse(iNewDimSize, 1, isComplex());
         }
     }
     else
diff --git a/scilab/modules/ast/tests/nonreg_tests/bug_15964.tst b/scilab/modules/ast/tests/nonreg_tests/bug_15964.tst
new file mode 100644 (file)
index 0000000..0409350
--- /dev/null
@@ -0,0 +1,26 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2019 - St├ęphane MOTTELET
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+//
+// <-- CLI SHELL MODE -->
+// <-- NO CHECK REF -->
+//
+// <-- Non-regression test for bug 15964 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/15964
+//
+// <-- Short Description -->
+// The complex empty sparse matrix must resume to the real one.
+
+s = sprand(10,10,0.3)*%i;
+s(:)=[];
+assert_checktrue(issparse(s))
+assert_checktrue(isreal(s))
+s = sprand(1,10,0.3)*%i;
+s(1,:)=[];
+assert_checktrue(issparse(s))
+assert_checktrue(isreal(s))