[string] fix tests
[scilab.git] / scilab / modules / string / tests / nonreg_tests / bug_14099.tst
1 // =============================================================================
2 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 // Copyright (C) 2016 - Samuel GOUGEON
4 //
5 //  This file is distributed under the same license as the Scilab package.
6 // =============================================================================
7 // <-- CLI SHELL MODE -->
8 // <-- NO CHECK REF -->
9 // <-- Non-regression test for bug 14099 -->
10 //
11 // <-- Bugzilla URL -->
12 // http://bugzilla.scilab.org/14099
13 //
14 // <-- Short Description -->
15 // string(polynomial) and string(rational) had badly formatted outputs
16 //  and were not vectorized
17 //
18 // * Coefficients equal to +1|-1 were not masked: 1x^n  =>  x^n
19 // * Coefficients with imaginary parts were output as "%i*##": =>"##i"
20 // * Pure imaginary coefficients had parentheses: (%i*3)z^n  => 3iz^n
21 // * format("e") was as well applied to exponents: 3.4D+04x^2.0D+00 => 3.4D+04x^2
22
23 format("v", 10);
24
25 // Single polynomials
26     // Constantes
27 assert_checkequal(string(0*%z), ["";"0"]);
28 assert_checkequal(string(0*%i*%z), ["";"0"]);
29 assert_checkequal(string(3+0*%z), ["";"3"]);
30 assert_checkequal(string(-3+0*%z), ["";"- 3"]);
31
32 assert_checkequal(string(3*%i+0*%z), ["";"3i"]);
33 assert_checkequal(string(-3*%i+0*%z), ["";"- 3i"]);
34
35 assert_checkequal(string(1-3*%i+0*%z), ["";"(1-3i)"]);
36 assert_checkequal(string(-1+3*%i+0*%z), ["";"- (1-3i)"]);
37 assert_checkequal(string(-1-3*%i+0*%z), ["";"- (1+3i)"]);
38     //
39 assert_checkequal(string(-3*%i*%z), ["";"- 3iz"]);
40 assert_checkequal(string((1-3*%i)*%z), ["";"(1-3i)z"]);
41 assert_checkequal(string((-1+3*%i)*%z), ["";"- (1-3i)z"]);
42 assert_checkequal(string((-1-3*%i)*%z), ["";"- (1+3i)z"]);
43
44 assert_checkequal(string(-3*%i*%z^13), ["     13";"- 3iz"]);
45 assert_checkequal(string((1-3*%i)*%z^13), ["       13";"(1-3i)z"]);
46 assert_checkequal(string((-1+3*%i)*%z^13), ["         13";"- (1-3i)z"]);
47 assert_checkequal(string((-1-3*%i)*%z^13), ["         13";"- (1+3i)z"]);
48
49 p = (1-%i) - %i*%z -3*%i*%z^8 + 4*%z^15 - %i*%z^18;
50 assert_checktrue(and(string(p)==["                8    15   18"; "(1-i) - iz - 3iz + 4z - iz"]));
51
52 p = - %i*%z -3*%i*%z^8 + 4*%z^15 - %i*%z^18;
53 assert_checktrue(and(string(p)==["          8    15   18"; "- iz - 3iz + 4z - iz"]));
54
55 // Matrix of polynomials
56 ps = "[0*z, 3+0*%i*z; -z, -%i*z;  -z^17, -%i*z^17;  "+..
57      "1-z+5*z^3+41*z^20, (1+(1-%i)*z)^3-1;  "+..
58      "-z+z^3+3*z^4, (%i-2)-3*z-3*%i*z^13+(1+7*%i)*z^20; ]";
59 z = poly(0,"x");
60 p = evstr(ps);
61 refS = [" "                   " "
62         "0"                   "3"
63         "   "                 "    "
64         "- x"                 "- ix"
65         "   17"               "    17"
66         "- x"                 "- ix"
67         "          3     20"  "             2         3"
68         "1 - x + 5x + 41x"    "(3-3i)x - 6ix - (2+2i)x"
69         "       3    4"       "                  13        20"
70         "- x + x + 3x"        "- (2-i) - 3x - 3ix + (1+7i)x"
71         ];
72 assert_checktrue(and(string(p)==refS));
73
74 x = poly(0,"x");
75 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]";
76 p = evstr(p);
77 format(6);
78 refS = ["                       2        3        4"
79         "64.69 + 38.97x - 36.58x + 90.04x - 93.11x"
80         "                       2        3        4"
81         "64.38 - 74.96x + 52.75x - 1.882x + 32.72x"
82        ];
83 assert_checktrue(and(string(p)==refS));
84
85 p = p/3+p*%i/4;
86 format(5);
87 refS = ["                                          2             3             4"
88         "(21.6+16.2i) + (13+9.74i)x - (12.2+9.14i)x + (30+22.5i)x - (31+23.3i)x"
89         "                                          2               3               4"
90         "(21.5+16.1i) - (25+18.7i)x + (17.6+13.2i)x - (0.63+0.47i)x + (10.9+8.18i)x"
91         ];
92 assert_checktrue(and(string(p)==refS));
93
94 // with %nan and %inf
95 p = poly([%nan 2 3 -%nan 8],"x","coeff");
96 p = p+%i*p/2;
97 //""""+string(p)+""""
98 refS = ["                               2             3         4"
99         "(Nan+Nani) + (2+i)x + (3+1.5i)x + (Nan+Nani)x + (8+4i)x"
100         ];
101 assert_checktrue(and(string(p)==refS));
102
103 // with format("e")
104 format("e",8);
105 ps = "[0*z, 3+0*%i*z; -z, -%i*z;"+..
106      "1+5*z^3-%pi*z^17,  -z^17; "+..
107      "(1+(1-%i)*z)^3-1+%e*%i*z^11, -%i*z^17]";
108 z = poly(0,"x");
109 p = evstr(ps);
110 if getos()=="Windows" then // The exponential notation may depend on the OS
111     refS = [" "                                                                        "       "
112             "0"                                                                        "3.0D+00"
113             "   "                                                                      "    "
114             "- x"                                                                      "- ix"
115             "                  3          17"                                          "   17"
116             "1.0D+00 + 5.0D+00x - 3.1D+00x"                                            "- x"
117             "                                 2                       3           11"  "    17"
118             "(3.0D+00 - 3.0D+00i)x - 6.0D+00ix - (2.0D+00 + 2.0D+00i)x + 2.7D+00ix"    "- ix"
119             ];
120     assert_checktrue(and(string(p)==refS));
121 end
122
123 // With a name of variable longer than 1 character:
124 x = poly(0,"ABC");
125 p = (2-%i+x).^[2 4 ; 1 3];
126 format("v",10);
127 //""""+string(p)+""""
128 refS = ["                        2"  "                                    2           3     4"
129         "(3-4i) + (4-2i)ABC + ABC"   "- (7+24i) + (8-44i)ABC + (18-24i)ABC + (8-4i)ABC + ABC"
130         "           "                "                                2     3"
131         "(2-i) + ABC"                "(2-11i) + (9-12i)ABC + (6-3i)ABC + ABC"
132        ];
133 assert_checktrue(and(string(p)==refS));
134