[sparse] sparse creation fixed with more than one value in same position 94/19794/2
Cedric Delamarre [Fri, 23 Feb 2018 09:56:10 +0000 (10:56 +0100)]
  * test_run sparse bug_7675

Change-Id: Idda2b2355b6ac8b02e09e4c370aea5b2986f59f7

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

index b0210db..bc49042 100644 (file)
@@ -370,6 +370,9 @@ Known issues
 * This is one of the first releases of a completely rewritten interpreter engine. If you discover strange behaviors or unexpected results do not hesitate to [report](https://bugzilla.scilab.org) them.
 * Toolboxes rebuild is in progress. Do not hesitate to submit patch or feature upgrade to the [development mailing list](dev@lists.scilab.org) for a particular toolbox.
 
+### Bugs fixed in 6.0.2:
+* [#7675](http://bugzilla.scilab.org/show_bug.cgi?id=7675): sparse() got a wrong result, when creation with many values in same position.
+
 
 ### Bugs fixed in 6.0.1:
 * [#2441](http://bugzilla.scilab.org/show_bug.cgi?id=2441): `%onprompt()` could be defined only at the top execution level.
index f0bedac..3c7d963 100644 (file)
@@ -569,7 +569,7 @@ void Sparse::create2(int rows, int cols, Double SPARSE_CONST& src, Double SPARSE
         }
 
         matrixCplx = new CplxSparse_t(rows, cols);
-        matrixCplx->setFromTriplets(tripletList.begin(), tripletList.end(), DupFunctor<std::complex<double>>());
+        matrixCplx->setFromTriplets(tripletList.begin(), tripletList.end());
         m_iRows = static_cast<int>(matrixCplx->rows());
         m_iCols = static_cast<int>(matrixCplx->cols());
     }
@@ -586,7 +586,7 @@ void Sparse::create2(int rows, int cols, Double SPARSE_CONST& src, Double SPARSE
         }
 
         matrixReal = new RealSparse_t(rows, cols);
-        matrixReal->setFromTriplets(tripletList.begin(), tripletList.end(), DupFunctor<double>());
+        matrixReal->setFromTriplets(tripletList.begin(), tripletList.end());
 
         m_iRows = static_cast<int>(matrixReal->rows());
         m_iCols = static_cast<int>(matrixReal->cols());
@@ -3237,7 +3237,7 @@ void SparseBool::create2(int rows, int cols, Bool SPARSE_CONST& src, Double SPAR
     }
 
     matrixBool = new BoolSparse_t(rows, cols);
-    matrixBool->setFromTriplets(tripletList.begin(), tripletList.end(), DupFunctor<bool>());
+    matrixBool->setFromTriplets(tripletList.begin(), tripletList.end());
 
     m_iRows = static_cast<int>(matrixBool->rows());
     m_iCols = static_cast<int>(matrixBool->cols());
diff --git a/scilab/modules/sparse/tests/nonreg_tests/bug_7675.tst b/scilab/modules/sparse/tests/nonreg_tests/bug_7675.tst
new file mode 100644 (file)
index 0000000..b64e72e
--- /dev/null
@@ -0,0 +1,19 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2018 - ASI Group - Cedric Delamarre
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+//
+// <-- CLI SHELL MODE -->
+// <-- NO CHECK REF -->
+//
+// <-- Non-regression test for bug 7675 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=7675
+//
+// <-- Short Description -->
+// sparse() got a wrong result, when creation with many values in same position
+
+assert_checkequal(sparse([1 1; 2 2; 1 1],[1 2 3]), sparse([1 1;2 2], [4 2]))