1 // =============================================================================
2 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 // Copyright (C) 2016 - Samuel GOUGEON
5 // This file is distributed under the same license as the Scilab package.
6 // =============================================================================
7 // <-- CLI SHELL MODE -->
8 // <-- Non-regression test for bug 14099 -->
10 // <-- Bugzilla URL -->
11 // http://bugzilla.scilab.org/14099
13 // <-- Short Description -->
14 // string(polynomial) and string(rational) had badly formatted outputs
15 // and were not vectorized
17 // * Coefficients equal to +1|-1 were not masked: 1x^n => x^n
18 // * Coefficients with imaginary parts were output as "%i*##": =>"##i"
19 // * Pure imaginary coefficients had parentheses: (%i*3)z^n => 3iz^n
20 // * format("e") was as well applied to exponents: 3.4D+04x^2.0D+00 => 3.4D+04x^2
24 assert_checkequal(string(0*%z), ["";"0"]);
25 assert_checkequal(string(0*%i*%z), ["";"0"]);
26 assert_checkequal(string(3+0*%z), ["";"3"]);
27 assert_checkequal(string(-3+0*%z), ["";"- 3"]);
28 assert_checkequal(string(3*%i+0*%z), ["";"3i"]);
29 assert_checkequal(string(-3*%i+0*%z), ["";"- 3i"]);
30 assert_checkequal(string(1-3*%i+0*%z), ["";"(1-3i)"]);
31 assert_checkequal(string(-1+3*%i+0*%z), ["";"- (1-3i)"]);
32 assert_checkequal(string(-1-3*%i+0*%z), ["";"- (1+3i)"]);
34 assert_checkequal(string(-3*%i*%z), ["";"- 3iz"]);
35 assert_checkequal(string((1-3*%i)*%z), ["";"(1-3i)z"]);
36 assert_checkequal(string((-1+3*%i)*%z), ["";"- (1-3i)z"]);
37 assert_checkequal(string((-1-3*%i)*%z), ["";"- (1+3i)z"]);
38 assert_checkequal(string(-3*%i*%z^13), [" 13";"- 3iz"]);
39 assert_checkequal(string((1-3*%i)*%z^13), [" 13";"(1-3i)z"]);
40 assert_checkequal(string((-1+3*%i)*%z^13), [" 13";"- (1-3i)z"]);
41 assert_checkequal(string((-1-3*%i)*%z^13), [" 13";"- (1+3i)z"]);
42 p = (1-%i) - %i*%z -3*%i*%z^8 + 4*%z^15 - %i*%z^18;
43 assert_checktrue(and(string(p)==[" 8 15 18"; "(1-i) - iz - 3iz + 4z - iz"]));
44 p = - %i*%z -3*%i*%z^8 + 4*%z^15 - %i*%z^18;
45 assert_checktrue(and(string(p)==[" 8 15 18"; "- iz - 3iz + 4z - iz"]));
46 // Matrix of polynomials
47 ps = "[0*z, 3+0*%i*z; -z, -%i*z; -z^17, -%i*z^17; "+..
48 "1-z+5*z^3+41*z^20, (1+(1-%i)*z)^3-1; "+..
49 "-z+z^3+3*z^4, (%i-2)-3*z-3*%i*z^13+(1+7*%i)*z^20; ]";
59 "1 - x + 5x + 41x" "(3-3i)x - 6ix - (2+2i)x"
61 "- x + x + 3x" "- (2-i) - 3x - 3ix + (1+7i)x"
63 assert_checktrue(and(string(p)==refS));
65 p = "[64.692+38.966*x-36.580*x^2+90.044*x^3-93.111*x^4;64.381-74.963*x+52.75*x^2-1.8822*x^3+32.721*x^4]";
69 "64.69 + 38.97x - 36.58x + 90.04x - 93.11x"
71 "64.38 - 74.96x + 52.75x - 1.882x + 32.72x"
73 assert_checktrue(and(string(p)==refS));
77 "(21.6+16.2i) + (13.0+9.74i)x - (12.2+9.14i)x + (30.0+22.5i)x - (31.0+23.3i)x"
79 "(21.5+16.1i) - (25.0+18.7i)x + (17.6+13.2i)x - (0.63+0.47i)x + (10.9+8.18i)x"
81 assert_checktrue(and(string(p)==refS));
83 p = poly([%nan 2 3 -%nan 8],"x","coeff");
87 "(Nan+Nani) + (2+i)x + (3+1.5i)x + (Nan+Nani)x + (8+4i)x"
89 assert_checktrue(and(string(p)==refS));
92 ps = "[0*z, 3+0*%i*z; -z, -%i*z;"+..
93 "1+5*z^3-%pi*z^17, -z^17; "+..
94 "(1+(1-%i)*z)^3-1+%e*%i*z^11, -%i*z^17]";
97 if getos()=="Windows" then // The exponential notation may depend on the OS
103 "1.0D+00 + 5.0D+00x - 3.1D+00x" "- x"
105 "(3.0D+00 - 3.0D+00i)x - 6.0D+00ix - (2.0D+00 + 2.0D+00i)x + 2.7D+00ix" "- ix"
107 assert_checktrue(and(string(p)==refS));
109 // With a name of variable longer than 1 character:
111 p = (2-%i+x).^[2 4 ; 1 3];
113 //""""+string(p)+""""
114 refS = [" 2" " 2 3 4"
115 "(3-4i) + (4-2i)ABC + ABC" "- (7+24i) + (8-44i)ABC + (18-24i)ABC + (8-4i)ABC + ABC"
117 "(2-i) + ABC" "(2-11i) + (9-12i)ABC + (6-3i)ABC + ABC"
119 assert_checktrue(and(string(p)==refS));