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
20 a=[1; .../* a comment */
22 assert_checkequal(a, colvect);
23 a=[1;.../* a comment */
25 assert_checkequal(a, colvect);
26 a=[1; .../* a comment */
28 assert_checkequal(a, colvect);
29 a=[1;.../* a comment */
31 assert_checkequal(a, colvect);
32 a=[1; .../* a comment */
34 assert_checkequal(a, colvect);
35 a=[1;.../* a comment */
37 assert_checkequal(a, colvect);
38 a=[1 .../* a comment */
40 assert_checkequal(a, linevect);
41 a=[1.../* a comment */
43 assert_checkequal(a, -1);
44 a=[1 .../* a comment */
46 assert_checkequal(a, linevect);
47 a=[1.../* a comment */
49 assert_checkequal(a, linevect);
50 a=[1 .../* a comment */
52 assert_checkequal(a, -1);
53 a=[1.../* a comment */
55 assert_checkequal(a, -1);
56 // Operators within matrices
58 a = [[2 3] .* ... /* a comment */
61 assert_checkequal(a, expected);
63 a = [[2 3] ./ ... /* a comment */
66 assert_checkequal(a, expected);
68 a = [[2 3] .\ ... /* a comment */
71 assert_checkequal(a, expected);
73 a = [[2 3] .^ ... /* a comment */
75 expected = [(2^(-3)), (3^(-3))];
76 assert_checkequal(a, expected);
78 a = [[2 3] - ... /* a comment */
80 expected = [(2-(-3)), (3-(-3))];
81 assert_checkequal(a, expected);
83 a = [[2 3] + ... /* a comment */
85 expected = [(2+(-3)), (3+(-3))];
86 assert_checkequal(a, expected);
88 a = [2 * ... /* a comment */
90 expected = [(2*(-3))];
91 assert_checkequal(a, expected);
93 a = [2 / ... /* a comment */
95 expected = [(2/(-3))];
96 assert_checkequal(a, expected);
98 a = [2 \ ... /* a comment */
100 expected = [(2\(-3))];
101 assert_checkequal(a, expected);
103 a = [2 ^ ... /* a comment */
105 expected = [(2^(-3))];
106 assert_checkequal(a, expected);
108 a = [[2 3] .*. ... /* a comment */
110 expected = [([2, 3].*.(-3))];
111 assert_checkequal(a, expected);
113 a = [[2 3] ./. ... /* a comment */
115 expected = [([2, 3]./.(-3))];
116 assert_checkequal(a, expected);
118 a = [[2 3] .\. ... /* a comment */
120 expected = [([2, 3].\.(-3))];
121 assert_checkequal(a, expected);
123 a = [[2 3] == ... /* a comment */
125 expected = [([2, 3]==(-3))];
126 assert_checkequal(a, expected);
128 a = [[2 3] ~= ... /* a comment */
130 expected = [([2, 3]~=(-3))];
131 assert_checkequal(a, expected);
133 a = [[2 3] < ... /* a comment */
135 expected = [([2, 3]<(-3))];
136 assert_checkequal(a, expected);
138 a = [[2 3] > ... /* a comment */
140 expected = [([2, 3]>(-3))];
141 assert_checkequal(a, expected);
143 a = [[2 3] <= ... /* a comment */
145 expected = [([2, 3]<=(-3))];
146 assert_checkequal(a, expected);
148 a = [[2 3] >= ... /* a comment */
150 expected = [([2, 3]>=(-3))];
151 assert_checkequal(a, expected);
152 // Comments on several lines
153 a=[1; .../* a comment
156 assert_checkequal(a, colvect);
160 assert_checkequal(a, colvect);
161 a=[1; .../* a comment
164 assert_checkequal(a, colvect);
168 assert_checkequal(a, colvect);
169 a=[1; .../* a comment
172 assert_checkequal(a, colvect);
176 assert_checkequal(a, colvect);
180 assert_checkequal(a, linevect);
184 assert_checkequal(a, -1);
188 assert_checkequal(a, linevect);
192 assert_checkequal(a, linevect);
196 assert_checkequal(a, -1);
200 assert_checkequal(a, -1);
201 // Operators within matrices
203 a = [[2 3] .* ... /* a comment
207 assert_checkequal(a, expected);
209 a = [[2 3] ./ ... /* a comment
212 expected = [-2/3 -1];
213 assert_checkequal(a, expected);
215 a = [[2 3] .\ ... /* a comment
218 expected = [-3/2 -1];
219 assert_checkequal(a, expected);
221 a = [[2 3] .^ ... /* a comment
224 expected = [(2^(-3)), (3^(-3))];
225 assert_checkequal(a, expected);
227 a = [[2 3] - ... /* a comment
230 expected = [(2-(-3)), (3-(-3))];
231 assert_checkequal(a, expected);
233 a = [[2 3] + ... /* a comment
236 expected = [(2+(-3)), (3+(-3))];
237 assert_checkequal(a, expected);
239 a = [2 * ... /* a comment
242 expected = [(2*(-3))];
243 assert_checkequal(a, expected);
245 a = [2 / ... /* a comment
248 expected = [(2/(-3))];
249 assert_checkequal(a, expected);
251 a = [2 \ ... /* a comment
254 expected = [(2\(-3))];
255 assert_checkequal(a, expected);
257 a = [2 ^ ... /* a comment
260 expected = [(2^(-3))];
261 assert_checkequal(a, expected);
263 a = [[2 3] .*. ... /* a comment
266 expected = [([2, 3].*.(-3))];
267 assert_checkequal(a, expected);
269 a = [[2 3] ./. ... /* a comment
272 expected = [([2, 3]./.(-3))];
273 assert_checkequal(a, expected);
275 a = [[2 3] .\. ... /* a comment
278 expected = [([2, 3].\.(-3))];
279 assert_checkequal(a, expected);
281 a = [[2 3] == ... /* a comment
284 expected = [([2, 3]==(-3))];
285 assert_checkequal(a, expected);
287 a = [[2 3] ~= ... /* a comment
290 expected = [([2, 3]~=(-3))];
291 assert_checkequal(a, expected);
293 a = [[2 3] < ... /* a comment
296 expected = [([2, 3]<(-3))];
297 assert_checkequal(a, expected);
299 a = [[2 3] > ... /* a comment
302 expected = [([2, 3]>(-3))];
303 assert_checkequal(a, expected);
305 a = [[2 3] <= ... /* a comment
308 expected = [([2, 3]<=(-3))];
309 assert_checkequal(a, expected);
311 a = [[2 3] >= ... /* a comment
314 expected = [([2, 3]>=(-3))];
315 assert_checkequal(a, expected);
316 // Special behaviour of ... with + and -
322 assert_checkequal(a, expected);
328 assert_checkequal(a, expected);
334 assert_checkequal(a, expected);
340 assert_checkequal(a, expected);
346 assert_checkequal(a, expected);
352 assert_checkequal(a, expected);
353 // Case with multiline comment
354 str_cmd = ["a = [1 -... /* the start of a";
355 "multiline comment */ 2 3]"]; // this currently generates an error
356 assert_checktrue(execstr(str_cmd, "errcatch") <> 0);