* Bug 16498 fixed: now remove all rows/cols of Sparsebool yields empty sparse 35/21535/2
mottelet [Mon, 13 Jul 2020 08:39:50 +0000 (10:39 +0200)]
http://bugzilla.scilab.org/show_bug.cgi?id=16498

Change-Id: Ie23b17da65fbef23d5d44e37bb0c235107872098

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

index 4902d29..09283f4 100644 (file)
@@ -570,3 +570,4 @@ Bug Fixes
 * [#16459](https://bugzilla.scilab.org/16459): The display of one column hypermatrix was wrong.
 * [#16463](https://bugzilla.scilab.org/16463): `matrix(sparse([]),[0 0])` yielded `[]` instead of `sparse([])`.
 * [#16483](https://bugzilla.scilab.org/16483): substraction of complex polynomial matrices was broken (Scilab 6 regression).
+* [#16498](https://bugzilla.scilab.org/16498): After `esb=sparse([%t %f]); esb(1,:)=[];` , `size(esb)` answered `[0 2]` instead of `[0 0]` .
index fb2a5a6..6882f77 100644 (file)
@@ -1859,6 +1859,13 @@ GenericType* Sparse::remove(typed_list* _pArgs)
     }
     delete[] pbKeep;
 
+    if (iNewDimSize == 0)
+    {
+        //free pArg content
+        cleanIndexesArguments(_pArgs, &pArg);
+        return new Sparse(0, 0);
+    }
+
     int* piNewDims = new int[iDims];
     for (int i = 0; i < iDims; i++)
     {
@@ -1886,14 +1893,6 @@ 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)
     {
         //two cases, depends of original matrix/vector
@@ -3827,6 +3826,13 @@ GenericType* SparseBool::remove(typed_list* _pArgs)
     }
     delete[] pbKeep;
 
+    if (iNewDimSize == 0)
+    {
+        //free pArg content
+        cleanIndexesArguments(_pArgs, &pArg);
+        return new SparseBool(0, 0);
+    }
+
     int* piNewDims = new int[iDims];
     for (int i = 0; i < iDims; i++)
     {
@@ -3856,27 +3862,17 @@ GenericType* SparseBool::remove(typed_list* _pArgs)
 
     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)
         {
-            //free pArg content
-            cleanIndexesArguments(_pArgs, &pArg);
-            delete[] piNewDims;
-            return new SparseBool(0, 0);
+            //special case for row vector
+            pOut = new SparseBool(1, iNewDimSize);
+            //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 SparseBool(1, iNewDimSize);
-                //in this case we have to care of 2nd dimension
-                //iNotEntire = 1;
-            }
-            else
-            {
-                pOut = new SparseBool(iNewDimSize, 1);
-            }
+            pOut = new SparseBool(iNewDimSize, 1);
         }
     }
     else
diff --git a/scilab/modules/ast/tests/nonreg_tests/bug_16498.tst b/scilab/modules/ast/tests/nonreg_tests/bug_16498.tst
new file mode 100644 (file)
index 0000000..406e00d
--- /dev/null
@@ -0,0 +1,26 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2020 - 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 16498 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/16498
+//
+// <-- Short Description -->
+// After esb=sparse([%t %f]); esb(1,:)=[]; , size(esb) answers [0 2] instead of [0 0]
+
+
+esb=sparse([%t %f]); 
+esb(1,:)=[];
+assert_checkequal(size(esb),[0,0])
+
+esb=sparse([%t;%f]); 
+esb(:,1)=[];
+assert_checkequal(size(esb),[0,0])
\ No newline at end of file