bug_13507 : result of complex power corrected. 28/14828/3
Cedric Delamarre [Tue, 8 Jul 2014 10:07:23 +0000 (12:07 +0200)]
test_run overloading bug_13507

Change-Id: Ie635db004b1e0dda706531b2f3f166f491cd4c0c

scilab/CHANGES_5.5.X
scilab/modules/overloading/macros/%s_pow.sci
scilab/modules/overloading/tests/nonreg_tests/bug_13507.dia.ref [new file with mode: 0644]
scilab/modules/overloading/tests/nonreg_tests/bug_13507.tst [new file with mode: 0644]

index a8f6fe7..e2cfaf6 100644 (file)
@@ -148,8 +148,9 @@ Scilab Bug Fixes
 
 * Bug #13503 fixed - xarrows made Scilab crash in some cases.
 
-* Bug #13509 fixed - It was not possible to have an empty prefix with xmlNs.
+* Bug #13507 fixed - Imaginary part in result of a complex power was missing (Real^Complex).
 
+* Bug #13509 fixed - It was not possible to have an empty prefix with xmlNs.
 
 
 Xcos Bug Fixes
index 0e2fd3f..6dbc000 100644 (file)
@@ -63,7 +63,7 @@ function x=%s_pow(a,p)
             end
             x=u*diag(diag(s).^p)*inv(u);
         end
-        if int(p)==p&r then x=real(x),end
+        if real(p)==p&r then x=real(x),end
     else
         error(43)
     end
diff --git a/scilab/modules/overloading/tests/nonreg_tests/bug_13507.dia.ref b/scilab/modules/overloading/tests/nonreg_tests/bug_13507.dia.ref
new file mode 100644 (file)
index 0000000..eb3f9e2
--- /dev/null
@@ -0,0 +1,24 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2014 - Scilab Enterprises - Cedric Delamarre
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+// <-- Non-regression test for bug 13507 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=13507
+//
+// <-- Short Description -->
+// Imaginary part in result of a power complex was missing.
+R = [1,2;3,4];
+c = 1 + 2*%i;
+computed = R ^ c;
+expected = expm(c*logm(R));
+assert_checkfalse(isreal(computed));
+assert_checkalmostequal(computed, expected);
+c = 2 + 0*%i;
+computed = R ^ c;
+expected = R ^ 2;
+assert_checktrue(isreal(computed));
+assert_checkalmostequal(computed, expected);
diff --git a/scilab/modules/overloading/tests/nonreg_tests/bug_13507.tst b/scilab/modules/overloading/tests/nonreg_tests/bug_13507.tst
new file mode 100644 (file)
index 0000000..676050f
--- /dev/null
@@ -0,0 +1,28 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2014 - Scilab Enterprises - Cedric Delamarre
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+
+// <-- Non-regression test for bug 13507 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=13507
+//
+// <-- Short Description -->
+// Imaginary part in result of a complex power was missing.
+
+R = [1,2;3,4];
+c = 1 + 2*%i;
+
+computed = R ^ c;
+expected = expm(c*logm(R));
+assert_checkfalse(isreal(computed));
+assert_checkalmostequal(computed, expected);
+
+c = 2 + 0*%i;
+computed = R ^ c;
+expected = R ^ 2;
+assert_checktrue(isreal(computed));
+assert_checkalmostequal(computed, expected);