1 // =============================================================================
2 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 // Copyright (C) 2016 - Scilab Enterprises - Pierre-Aime Agnel
5 // This file is distributed under the same license as the Scilab package.
6 // =============================================================================
7 // <-- CLI SHELL MODE -->
9 // <-- Non-regression test for bug 14361 -->
11 // <-- Bugzilla URL -->
12 // http://bugzilla.scilab.org/14361
14 // <-- Short Description -->
15 // Parser did not manage comments after line continuation ... in matrix environnement
22 a=[1; .../* a comment */
24 assert_checkequal(a, colvect);
25 a=[1;.../* a comment */
27 assert_checkequal(a, colvect);
28 a=[1; .../* a comment */
30 assert_checkequal(a, colvect);
31 a=[1;.../* a comment */
33 assert_checkequal(a, colvect);
34 a=[1; .../* a comment */
36 assert_checkequal(a, colvect);
37 a=[1;.../* a comment */
39 assert_checkequal(a, colvect);
41 a=[1 .../* a comment */
43 assert_checkequal(a, linevect);
44 a=[1.../* a comment */
46 assert_checkequal(a, -1);
47 a=[1 .../* a comment */
49 assert_checkequal(a, linevect);
50 a=[1.../* a comment */
52 assert_checkequal(a, linevect);
53 a=[1 .../* a comment */
55 assert_checkequal(a, -1);
56 a=[1.../* a comment */
58 assert_checkequal(a, -1);
60 // Operators within matrices
62 a = [[2 3] .* ... /* a comment */
65 assert_checkequal(a, expected);
69 a = [[2 3] ./ ... /* a comment */
72 assert_checkequal(a, expected);
75 a = [[2 3] .\ ... /* a comment */
78 assert_checkequal(a, expected);
81 a = [[2 3] .^ ... /* a comment */
83 expected = [(2^(-3)), (3^(-3))];
84 assert_checkequal(a, expected);
87 a = [[2 3] - ... /* a comment */
89 expected = [(2-(-3)), (3-(-3))];
90 assert_checkequal(a, expected);
93 a = [[2 3] + ... /* a comment */
95 expected = [(2+(-3)), (3+(-3))];
96 assert_checkequal(a, expected);
99 a = [2 * ... /* a comment */
101 expected = [(2*(-3))];
102 assert_checkequal(a, expected);
105 a = [2 / ... /* a comment */
107 expected = [(2/(-3))];
108 assert_checkequal(a, expected);
111 a = [2 \ ... /* a comment */
113 expected = [(2\(-3))];
114 assert_checkequal(a, expected);
117 a = [2 ^ ... /* a comment */
119 expected = [(2^(-3))];
120 assert_checkequal(a, expected);
123 a = [[2 3] .*. ... /* a comment */
125 expected = [([2, 3].*.(-3))];
126 assert_checkequal(a, expected);
129 a = [[2 3] ./. ... /* a comment */
131 expected = [([2, 3]./.(-3))];
132 assert_checkequal(a, expected);
135 a = [[2 3] .\. ... /* a comment */
137 expected = [([2, 3].\.(-3))];
138 assert_checkequal(a, expected);
141 a = [[2 3] == ... /* a comment */
143 expected = [([2, 3]==(-3))];
144 assert_checkequal(a, expected);
147 a = [[2 3] ~= ... /* a comment */
149 expected = [([2, 3]~=(-3))];
150 assert_checkequal(a, expected);
153 a = [[2 3] < ... /* a comment */
155 expected = [([2, 3]<(-3))];
156 assert_checkequal(a, expected);
159 a = [[2 3] > ... /* a comment */
161 expected = [([2, 3]>(-3))];
162 assert_checkequal(a, expected);
165 a = [[2 3] <= ... /* a comment */
167 expected = [([2, 3]<=(-3))];
168 assert_checkequal(a, expected);
171 a = [[2 3] >= ... /* a comment */
173 expected = [([2, 3]>=(-3))];
174 assert_checkequal(a, expected);
176 // Comments on several lines
177 a=[1; .../* a comment
180 assert_checkequal(a, colvect);
184 assert_checkequal(a, colvect);
185 a=[1; .../* a comment
188 assert_checkequal(a, colvect);
192 assert_checkequal(a, colvect);
193 a=[1; .../* a comment
196 assert_checkequal(a, colvect);
200 assert_checkequal(a, colvect);
205 assert_checkequal(a, linevect);
209 assert_checkequal(a, -1);
213 assert_checkequal(a, linevect);
217 assert_checkequal(a, linevect);
221 assert_checkequal(a, -1);
225 assert_checkequal(a, -1);
227 // Operators within matrices
229 a = [[2 3] .* ... /* a comment
233 assert_checkequal(a, expected);
236 a = [[2 3] ./ ... /* a comment
239 expected = [-2/3 -1];
240 assert_checkequal(a, expected);
243 a = [[2 3] .\ ... /* a comment
246 expected = [-3/2 -1];
247 assert_checkequal(a, expected);
250 a = [[2 3] .^ ... /* a comment
253 expected = [(2^(-3)), (3^(-3))];
254 assert_checkequal(a, expected);
257 a = [[2 3] - ... /* a comment
260 expected = [(2-(-3)), (3-(-3))];
261 assert_checkequal(a, expected);
264 a = [[2 3] + ... /* a comment
267 expected = [(2+(-3)), (3+(-3))];
268 assert_checkequal(a, expected);
271 a = [2 * ... /* a comment
274 expected = [(2*(-3))];
275 assert_checkequal(a, expected);
278 a = [2 / ... /* a comment
281 expected = [(2/(-3))];
282 assert_checkequal(a, expected);
285 a = [2 \ ... /* a comment
288 expected = [(2\(-3))];
289 assert_checkequal(a, expected);
292 a = [2 ^ ... /* a comment
295 expected = [(2^(-3))];
296 assert_checkequal(a, expected);
299 a = [[2 3] .*. ... /* a comment
302 expected = [([2, 3].*.(-3))];
303 assert_checkequal(a, expected);
306 a = [[2 3] ./. ... /* a comment
309 expected = [([2, 3]./.(-3))];
310 assert_checkequal(a, expected);
313 a = [[2 3] .\. ... /* a comment
316 expected = [([2, 3].\.(-3))];
317 assert_checkequal(a, expected);
320 a = [[2 3] == ... /* a comment
323 expected = [([2, 3]==(-3))];
324 assert_checkequal(a, expected);
327 a = [[2 3] ~= ... /* a comment
330 expected = [([2, 3]~=(-3))];
331 assert_checkequal(a, expected);
334 a = [[2 3] < ... /* a comment
337 expected = [([2, 3]<(-3))];
338 assert_checkequal(a, expected);
341 a = [[2 3] > ... /* a comment
344 expected = [([2, 3]>(-3))];
345 assert_checkequal(a, expected);
348 a = [[2 3] <= ... /* a comment
351 expected = [([2, 3]<=(-3))];
352 assert_checkequal(a, expected);
355 a = [[2 3] >= ... /* a comment
358 expected = [([2, 3]>=(-3))];
359 assert_checkequal(a, expected);
361 // Special behaviour of ... with + and -
365 assert_checkequal(a, expected);
370 assert_checkequal(a, expected);
375 assert_checkequal(a, expected);
380 assert_checkequal(a, expected);
385 assert_checkequal(a, expected);
390 assert_checkequal(a, expected);
392 // Case with multiline comment
393 str_cmd = ["a = [1 -... /* the start of a";
394 "multiline comment */ 2 3]"]; // this currently generates an error
395 assert_checktrue(execstr(str_cmd, "errcatch") <> 0);