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