* Bug 16323 fixed: now conj(sparse(x)) is real when x is real 08/21308/3
St├ęphane MOTTELET [Wed, 12 Feb 2020 12:31:54 +0000 (13:31 +0100)]
https://bugzilla.scilab.org/show_bug.cgi?id=16323

Change-Id: I51bb8bfe9c448f7e033409a0513c8c30ddf8134f

scilab/CHANGES.md
scilab/modules/elementary_functions/sci_gateway/cpp/sci_conj.cpp
scilab/modules/elementary_functions/tests/nonreg_tests/bug_16323.tst [new file with mode: 0644]
scilab/modules/overloading/macros/%sp_conj.sci [deleted file]

index 87f305b..f9f1bf8 100644 (file)
@@ -403,3 +403,4 @@ Bug Fixes
 * [#16307](http://bugzilla.scilab.org/show_bug.cgi?id=16307): `dockable="off"` and `closerequestfcn` on figures crached Scilab.
 * [#16320](http://bugzilla.scilab.org/show_bug.cgi?id=16320): There were unsupported UTF-8 characters in some gettext id messages.
 * [#16321](http://bugzilla.scilab.org/show_bug.cgi?id=16321): There were typo errors in the documentation.
+* [#16323](http://bugzilla.scilab.org/show_bug.cgi?id=16323): `conj(sparse(x))` was complex when x is real. 
index 1e4bf92..65eef49 100644 (file)
@@ -18,6 +18,7 @@
 #include "double.hxx"
 #include "overload.hxx"
 #include "polynom.hxx"
+#include "sparse.hxx"
 
 extern "C"
 {
@@ -57,6 +58,17 @@ types::Function::ReturnValue sci_conj(types::typed_list &in, int _iRetCount, typ
         pPolyOut = in[0]->clone()->getAs<types::Polynom>();
         pDblOut = pPolyOut->getCoef();
     }
+    else if (in[0]->isSparse())
+    {
+        types::Sparse *pSparseOut = in[0]->clone()->getAs<types::Sparse>();
+        if (pSparseOut->isComplex() == true)
+        {
+            std::complex<double>* data = pSparseOut->getImg();
+            std::transform(data, data + pSparseOut->nonZeros(), data, [](const std::complex<double>& c) -> std::complex<double> { return std::conj(c); });
+        }
+        out.push_back(pSparseOut);
+        return types::Function::OK;
+    }
     else
     {
         std::wstring wstFuncName = L"%" + in[0]->getShortTypeStr() + L"_conj";
diff --git a/scilab/modules/elementary_functions/tests/nonreg_tests/bug_16323.tst b/scilab/modules/elementary_functions/tests/nonreg_tests/bug_16323.tst
new file mode 100644 (file)
index 0000000..b6cab98
--- /dev/null
@@ -0,0 +1,20 @@
+// =============================================================================
+// 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 16323 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/16323
+//
+// <-- Short Description -->
+// conj(sparse(x)) is complex even when x is real
+
+x = [1,2;3 4]
+assert_checktrue(isreal(conj(sparse(x))))
diff --git a/scilab/modules/overloading/macros/%sp_conj.sci b/scilab/modules/overloading/macros/%sp_conj.sci
deleted file mode 100644 (file)
index 5f1da6c..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
-// Copyright (C) 2013 - Scilab Enterprises
-//
-// Copyright (C) 2012 - 2016 - Scilab Enterprises
-//
-// This file is hereby licensed under the terms of the GNU GPL v2.0,
-// pursuant to article 5.3.4 of the CeCILL v.2.1.
-// This file was originally licensed under the terms of the CeCILL v2.1,
-// and continues to be available under such terms.
-// For more information, see the COPYING file which you should have received
-// along with this program.
-
-function res=%sp_conj(A)
-
-    res = real(A) - %i * imag(A);
-
-endfunction