* Bug #14476 fixed - Dotmultiplication between polynomials and imaginary numbers... 53/17953/2
Pierre-Aime Agnel [Tue, 22 Mar 2016 10:30:31 +0000 (11:30 +0100)]
Change-Id: I3e67153d98373e0ce0f5148f604e360b4662b910

scilab/CHANGES
scilab/modules/ast/src/cpp/operations/types_dotmultiplication.cpp
scilab/modules/ast/tests/nonreg_tests/bug_14476.dia.ref [new file with mode: 0644]
scilab/modules/ast/tests/nonreg_tests/bug_14476.tst [new file with mode: 0644]

index ccb10f9..ca1c234 100644 (file)
@@ -381,6 +381,9 @@ In 6.0.0:
 
 * Bug #14468 fixed - Scinotes was unable to export to HTML.
 
+* Bug #14476 fixed - Dotmultiplication between polynomials and imaginary numbers was always returning 0
+
+
 In 6.0.0 beta-1:
 
 * Bug #6057 fixed  - trailing space after minus sign has been removed from the display of values
index 0cfa66c..c4a7d5d 100644 (file)
@@ -1472,7 +1472,7 @@ InternalType* dotmul_M_M<Double, Polynom, Polynom>(Double* _pL, Polynom* _pR)
             {
                 for (int i = 0 ; i < iSize ; i++)
                 {
-                    dotmul(pSP[i]->get(), (size_t)pSP[i]->getSize(), dblR, dblI, pSP[i]->get(), pSP[i]->getImg());
+                    dotmul(pSPR[i]->get(), (size_t)pSPR[i]->getSize(), dblR, dblI, pSP[i]->get(), pSP[i]->getImg());
                 }
             }
         }
@@ -1482,7 +1482,7 @@ InternalType* dotmul_M_M<Double, Polynom, Polynom>(Double* _pL, Polynom* _pR)
             {
                 for (int i = 0 ; i < iSize ; i++)
                 {
-                    dotmul(pSP[i]->get(), pSP[i]->getImg(), (size_t)pSP[i]->getSize(), dblR, pSP[i]->get(), pSP[i]->getImg());
+                    dotmul(pSPR[i]->get(), pSPR[i]->getImg(), (size_t)pSPR[i]->getSize(), dblR, pSP[i]->get(), pSP[i]->getImg());
                 }
             }
             else
@@ -1490,7 +1490,7 @@ InternalType* dotmul_M_M<Double, Polynom, Polynom>(Double* _pL, Polynom* _pR)
                 //r .* P
                 for (int i = 0 ; i < iSize ; i++)
                 {
-                    dotmul(pSP[i]->get(), (size_t)pSP[i]->getSize(), dblR, pSP[i]->get());
+                    dotmul(pSPR[i]->get(), (size_t)pSPR[i]->getSize(), dblR, pSP[i]->get());
                 }
             }
         }
diff --git a/scilab/modules/ast/tests/nonreg_tests/bug_14476.dia.ref b/scilab/modules/ast/tests/nonreg_tests/bug_14476.dia.ref
new file mode 100644 (file)
index 0000000..c1db32e
--- /dev/null
@@ -0,0 +1,79 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2013 - Scilab Enterprises - Pierre-Aime AGNEL
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+// <-- CLI SHELL MODE -->
+//
+// <-- Non-regression test for bug 14476 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/14476
+//
+// <-- Short Description -->
+// Polynomial * complex always returned 0
+// Real polynomial
+ReP = (1 - %z)^3;
+// Imaginary polynomial
+ImP = 2*%i + %i * %z;
+// Real number
+ReD = 3;
+// Imaginary number
+ImD = 2*%i;
+RePM = [ReP; 2*ReP];
+ImPM = [ImP; 2*ImP];
+ReDM = [ReD; 5*ReD];
+ImDM = [ImD; ImD/2];
+// Real Poly .* Im Double
+res = ReP .* ImD;
+assert_checktrue(real(res) == 0);
+assert_checkequal(imag(res), ReP * imag(ImD));
+// Real Poly Matrix .* Im Double
+res = RePM .* ImD;
+assert_checktrue(real(res)(1) == 0);
+assert_checktrue(real(res)(2) == 0);
+assert_checkequal(imag(res)(1), RePM(1) * imag(ImD));
+assert_checkequal(imag(res)(2), RePM(2) * imag(ImD));
+// Real Poly .* Im Double Matrix
+res = ReP .* ImDM;
+assert_checktrue(real(res)(1) == 0);
+assert_checktrue(real(res)(2) ==  0);
+assert_checkequal(imag(res)(1), ReP * imag(ImDM(1)));
+assert_checkequal(imag(res)(2), ReP * imag(ImDM(2)));
+// Real Poly Matrix .* Im Double Matrix
+res = RePM .* ImDM;
+assert_checktrue(real(res)(1) == 0);
+assert_checktrue(real(res)(2) == 0);
+assert_checkequal(imag(res)(1), RePM(1) * imag(ImDM(1)));
+assert_checkequal(imag(res)(1), RePM(2) * imag(ImDM(2)));
+// Imaginary Poly * Imaginary number
+res = ImP .* ImD;
+assert_checkequal(real(res), -1 * imag(ImP) * imag(ImD));
+assert_checktrue(imag(res) == 0);
+// Im Poly Matrix .* Im Double
+res = ImPM .* ImD;
+assert_checkequal(real(res)(1), -1 * imag(ImPM)(1) * imag(ImD));
+assert_checkequal(real(res)(2), -1 * imag(ImPM)(2) * imag(ImD));
+assert_checktrue(imag(res)(1) == 0);
+assert_checktrue(imag(res)(2) == 0);
+// Im Poly .* Im Double Matrix
+res = ImP .* ImDM;
+assert_checkequal(real(res)(1), -1 * imag(ImP) * imag(ImDM)(1));
+assert_checkequal(real(res)(2), -1 * imag(ImP) * imag(ImDM)(2));
+assert_checktrue(imag(res)(1) == 0);
+assert_checktrue(imag(res)(2) == 0);
+// Im Poly Matrix .* Im Double Matrix
+res = ImPM .* ImDM;
+assert_checkequal(real(res)(1), -1 * imag(ImPM)(1) * imag(ImDM)(1));
+assert_checkequal(real(res)(2), -1 * imag(ImPM)(2) * imag(ImDM)(2));
+assert_checktrue(imag(res)(1) == 0);
+assert_checktrue(imag(res)(2) == 0);
+// Complex Poly Matrix .* Complex Double Matrix
+CoPM = RePM + ImPM;
+CoDM = ReDM + ImDM;
+res = CoPM .* CoDM;
+assert_checkequal(real(res)(1), real(CoPM)(1) * real(CoDM)(1) - imag(CoPM)(1) * imag(CoDM)(1));
+assert_checkequal(real(res)(2), real(CoPM)(2) * real(CoDM)(2) - imag(CoPM)(2) * imag(CoDM)(2));
+assert_checkequal(imag(res)(1), real(CoPM)(1) * imag(CoDM)(1) + imag(CoPM)(1) * real(CoDM)(1));
+assert_checkequal(imag(res)(2), real(CoPM)(2) * imag(CoDM)(2) + imag(CoPM)(2) * real(CoDM)(2));
diff --git a/scilab/modules/ast/tests/nonreg_tests/bug_14476.tst b/scilab/modules/ast/tests/nonreg_tests/bug_14476.tst
new file mode 100644 (file)
index 0000000..9b6862b
--- /dev/null
@@ -0,0 +1,93 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2013 - Scilab Enterprises - Pierre-Aime AGNEL
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+// <-- CLI SHELL MODE -->
+//
+// <-- Non-regression test for bug 14476 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/14476
+//
+// <-- Short Description -->
+// Polynomial * complex always returned 0
+
+// Real polynomial
+ReP = (1 - %z)^3;
+// Imaginary polynomial
+ImP = 2*%i + %i * %z;
+// Real number
+ReD = 3;
+// Imaginary number
+ImD = 2*%i;
+
+
+RePM = [ReP; 2*ReP];
+ImPM = [ImP; 2*ImP];
+ReDM = [ReD; 5*ReD];
+ImDM = [ImD; ImD/2];
+
+// Real Poly .* Im Double
+res = ReP .* ImD;
+assert_checktrue(real(res) == 0);
+assert_checkequal(imag(res), ReP * imag(ImD));
+
+// Real Poly Matrix .* Im Double
+res = RePM .* ImD;
+assert_checktrue(real(res)(1) == 0);
+assert_checktrue(real(res)(2) == 0);
+assert_checkequal(imag(res)(1), RePM(1) * imag(ImD));
+assert_checkequal(imag(res)(2), RePM(2) * imag(ImD));
+
+// Real Poly .* Im Double Matrix
+res = ReP .* ImDM;
+assert_checktrue(real(res)(1) == 0);
+assert_checktrue(real(res)(2) ==  0);
+assert_checkequal(imag(res)(1), ReP * imag(ImDM(1)));
+assert_checkequal(imag(res)(2), ReP * imag(ImDM(2)));
+
+// Real Poly Matrix .* Im Double Matrix
+res = RePM .* ImDM;
+assert_checktrue(real(res)(1) == 0);
+assert_checktrue(real(res)(2) == 0);
+assert_checkequal(imag(res)(1), RePM(1) * imag(ImDM(1)));
+assert_checkequal(imag(res)(1), RePM(2) * imag(ImDM(2)));
+
+// Imaginary Poly * Imaginary number
+res = ImP .* ImD;
+assert_checkequal(real(res), -1 * imag(ImP) * imag(ImD));
+assert_checktrue(imag(res) == 0);
+
+// Im Poly Matrix .* Im Double
+res = ImPM .* ImD;
+assert_checkequal(real(res)(1), -1 * imag(ImPM)(1) * imag(ImD));
+assert_checkequal(real(res)(2), -1 * imag(ImPM)(2) * imag(ImD));
+assert_checktrue(imag(res)(1) == 0);
+assert_checktrue(imag(res)(2) == 0);
+
+// Im Poly .* Im Double Matrix
+res = ImP .* ImDM;
+assert_checkequal(real(res)(1), -1 * imag(ImP) * imag(ImDM)(1));
+assert_checkequal(real(res)(2), -1 * imag(ImP) * imag(ImDM)(2));
+assert_checktrue(imag(res)(1) == 0);
+assert_checktrue(imag(res)(2) == 0);
+
+// Im Poly Matrix .* Im Double Matrix
+res = ImPM .* ImDM;
+assert_checkequal(real(res)(1), -1 * imag(ImPM)(1) * imag(ImDM)(1));
+assert_checkequal(real(res)(2), -1 * imag(ImPM)(2) * imag(ImDM)(2));
+assert_checktrue(imag(res)(1) == 0);
+assert_checktrue(imag(res)(2) == 0);
+
+// Complex Poly Matrix .* Complex Double Matrix
+CoPM = RePM + ImPM;
+CoDM = ReDM + ImDM;
+
+res = CoPM .* CoDM;
+assert_checkequal(real(res)(1), real(CoPM)(1) * real(CoDM)(1) - imag(CoPM)(1) * imag(CoDM)(1));
+assert_checkequal(real(res)(2), real(CoPM)(2) * real(CoDM)(2) - imag(CoPM)(2) * imag(CoDM)(2));
+assert_checkequal(imag(res)(1), real(CoPM)(1) * imag(CoDM)(1) + imag(CoPM)(1) * real(CoDM)(1));
+assert_checkequal(imag(res)(2), real(CoPM)(2) * imag(CoDM)(2) + imag(CoPM)(2) * real(CoDM)(2));
+