* Bug #14374 fixed - Parser did not manage comments properly in shellmode
[scilab.git] / scilab / modules / ast / tests / unit_tests / parser.tst
1 // ============================================================================
2 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 // Copyright (C) 2016 - DIGITEO - Cedric Delamarre
4 //
5 //  This file is distributed under the same license as the Scilab package.
6 // ============================================================================
7
8 // <-- CLI SHELL MODE -->
9
10
11 // line break
12 colvect(1,1) = 1;
13 colvect(2,1) = -2;
14 linevect = colvect';
15
16
17 a=[1; ...
18 -2];
19 assert_checkequal(a,  colvect);
20 a=[1;...
21 -2];
22 assert_checkequal(a,  colvect);
23 a=[1; ...
24  -2];
25 assert_checkequal(a,  colvect);
26 a=[1;...
27  -2];
28 assert_checkequal(a,  colvect);
29 a=[1; ...
30 - 2];
31 assert_checkequal(a,  colvect);
32 a=[1;...
33 - 2];
34 assert_checkequal(a,  colvect);
35
36 a=[1 ...
37 -2];
38 assert_checkequal(a,  linevect);
39 a=[1...
40 -2];
41 assert_checkequal(a,  -1);
42 a=[1 ...
43  -2];
44 assert_checkequal(a,  linevect);
45 a=[1...
46  -2];
47 assert_checkequal(a,  linevect);
48 a=[1 ...
49 - 2];
50 assert_checkequal(a,  -1);
51 a=[1...
52 - 2];
53 assert_checkequal(a,  -1);
54
55 a=[1; ...//comment
56 -2];
57 assert_checkequal(a,  colvect);
58 a=[1;...//comment
59 -2];
60 assert_checkequal(a,  colvect);
61 a=[1; ...//comment
62  -2];
63 assert_checkequal(a,  colvect);
64 a=[1;...//comment
65  -2];
66 assert_checkequal(a,  colvect);
67 a=[1; ...//comment
68 - 2];
69 assert_checkequal(a,  colvect);
70 a=[1;...//comment
71 - 2];
72 assert_checkequal(a,  colvect);
73
74 a=[1 ...//comment
75 -2];
76 assert_checkequal(a,  linevect);
77 a=[1...//comment
78 -2];
79 assert_checkequal(a,  -1);
80 a=[1 ...//comment
81  -2];
82 assert_checkequal(a,  linevect);
83 a=[1...//comment
84  -2];
85 assert_checkequal(a,  linevect);
86 a=[1 ...//comment
87 - 2];
88 assert_checkequal(a,  -1);
89 a=[1...//comment
90 - 2];
91 assert_checkequal(a,  -1);
92
93 a=[1 ...
94 -2 ];
95 assert_checkequal(a,  linevect);
96 a=[1...
97 -2 ];
98 assert_checkequal(a,  -1);
99 a=[1 ...
100  -2 ];
101 assert_checkequal(a,  linevect);
102 a=[1...
103  -2 ];
104 assert_checkequal(a,  linevect);
105 a=[1 ...
106 - 2 ];
107 assert_checkequal(a,  -1);
108 a=[1...
109 - 2 ];
110 assert_checkequal(a,  -1);
111
112 // Operators within matrices
113 // DOTTIMES
114 a = [[2 3] .* -3];
115 expected = [-6 -9];
116 assert_checkequal(a, expected);
117
118 a = [[2 3] .* ...
119 -3];
120 assert_checkequal(a, expected);
121
122 a = [[2 3] .* ... // a comment
123 -3];
124 assert_checkequal(a, expected);
125
126 //DOTRDIVIDE
127 a = [[2 3] ./ -3];
128 expected = [-2/3 -1];
129 assert_checkequal(a, expected);
130
131 a = [[2 3] ./ ...
132 -3];
133 assert_checkequal(a, expected);
134
135 a = [[2 3] ./ ... // a comment
136 -3];
137 assert_checkequal(a, expected);
138
139 //DOTLDIVIDE
140 a = [[2 3] .\ -3];
141 expected = [-3/2 -1];
142 assert_checkequal(a, expected);
143
144 a = [[2 3] .\ ...
145 -3];
146 assert_checkequal(a, expected);
147
148 a = [[2 3] .\ ... // a comment
149 -3];
150 assert_checkequal(a, expected);
151
152 //DOTPOWER
153 a = [[2 3] .^ -3];
154 expected = [(2^(-3)), (3^(-3))];
155 assert_checkequal(a, expected);
156
157 a = [[2 3] .^ ...
158 -3];
159 assert_checkequal(a, expected);
160
161 a = [[2 3] .^ ... // a comment
162 -3];
163 assert_checkequal(a, expected);
164
165 //MINUS
166 a = [[2 3] - -3];
167 expected = [(2-(-3)), (3-(-3))];
168 assert_checkequal(a, expected);
169
170 a = [[2 3] - ...
171 -3];
172 assert_checkequal(a, expected);
173
174 a = [[2 3] - ... // a comment
175 -3];
176 assert_checkequal(a, expected);
177
178 //PLUS
179 a = [[2 3] + -3];
180 expected = [(2+(-3)), (3+(-3))];
181 assert_checkequal(a, expected);
182
183 a = [[2 3] + ...
184 -3];
185 assert_checkequal(a, expected);
186
187 a = [[2 3] + ... // a comment
188 -3];
189 assert_checkequal(a, expected);
190
191 //TIMES
192 a = [2 * -3];
193 expected = [(2*(-3))];
194 assert_checkequal(a, expected);
195
196 a = [2 * ...
197  -3];
198 assert_checkequal(a, expected);
199
200 a = [2  * ... // a comment
201  -3];
202 assert_checkequal(a, expected);
203
204 //RDIVIDE
205 a = [2 / -3];
206 expected = [(2/(-3))];
207 assert_checkequal(a, expected);
208
209 a = [2 / ...
210  -3];
211 assert_checkequal(a, expected);
212
213 a = [2  / ... // a comment
214  -3];
215 assert_checkequal(a, expected);
216
217 //LDIVIDE
218 a = [2 \ -3];
219 expected = [(2\(-3))];
220 assert_checkequal(a, expected);
221
222 a = [2 \ ...
223  -3];
224 assert_checkequal(a, expected);
225
226 a = [2  \ ... // a comment
227  -3];
228 assert_checkequal(a, expected);
229
230 //POWER
231 a = [2 ^ -3];
232 expected = [(2^(-3))];
233 assert_checkequal(a, expected);
234
235 a = [2 ^ ...
236  -3];
237 assert_checkequal(a, expected);
238
239 a = [2  ^ ... // a comment
240  -3];
241 assert_checkequal(a, expected);
242
243 //KRONTIMES
244 a = [[2 3] .*. -3];
245 expected = [([2, 3].*.(-3))];
246 assert_checkequal(a, expected);
247
248 a = [[2 3] .*. ...
249  -3];
250 assert_checkequal(a, expected);
251
252 a = [[2 3] .*. ... // a comment
253  -3];
254 assert_checkequal(a, expected);
255
256 //KRONRDIVIDE
257 a = [[2 3] ./. -3];
258 expected = [([2, 3]./.(-3))];
259 assert_checkequal(a, expected);
260
261 a = [[2 3] ./. ...
262  -3];
263 assert_checkequal(a, expected);
264
265 a = [[2 3] ./. ... // a comment
266  -3];
267 assert_checkequal(a, expected);
268
269 //KRONLDIVIDE
270 a = [[2 3] .\. -3];
271 expected = [([2, 3].\.(-3))];
272 assert_checkequal(a, expected);
273
274 a = [[2 3] .\. ...
275  -3];
276 assert_checkequal(a, expected);
277
278 a = [[2 3] .\. ... // a comment
279  -3];
280 assert_checkequal(a, expected);
281
282 //EQ
283 a = [[2 3] == -3];
284 expected = [([2, 3]==(-3))];
285 assert_checkequal(a, expected);
286
287 a = [[2 3] == ...
288  -3];
289 assert_checkequal(a, expected);
290
291 a = [[2 3] == ... // a comment
292  -3];
293 assert_checkequal(a, expected);
294
295 //NE
296 a = [[2 3] ~= -3];
297 expected = [([2, 3]~=(-3))];
298 assert_checkequal(a, expected);
299
300 a = [[2 3] ~= ...
301  -3];
302 assert_checkequal(a, expected);
303
304 a = [[2 3]  ~= ... // a comment
305  -3];
306 assert_checkequal(a, expected);
307
308 //LT
309 a = [[2 3] < -3];
310 expected = [([2, 3]<(-3))];
311 assert_checkequal(a, expected);
312
313 a = [[2 3] < ...
314  -3];
315 assert_checkequal(a, expected);
316
317 a = [[2 3]  < ... // a comment
318  -3];
319 assert_checkequal(a, expected);
320
321 //GT
322 a = [[2 3] > -3];
323 expected = [([2, 3]>(-3))];
324 assert_checkequal(a, expected);
325
326 a = [[2 3] > ...
327  -3];
328 assert_checkequal(a, expected);
329
330 a = [[2 3]  > ... // a comment
331  -3];
332 assert_checkequal(a, expected);
333
334 //LE
335 a = [[2 3] <= -3];
336 expected = [([2, 3]<=(-3))];
337 assert_checkequal(a, expected);
338
339 a = [[2 3] <= ...
340  -3];
341 assert_checkequal(a, expected);
342
343 a = [[2 3]  <= ... // a comment
344  -3];
345 assert_checkequal(a, expected);
346
347 //GE
348 a = [[2 3] >= -3];
349 expected = [([2, 3]>=(-3))];
350 assert_checkequal(a, expected);
351
352 a = [[2 3] >= ...
353  -3];
354 assert_checkequal(a, expected);
355
356 a = [[2 3]  >= ... // a comment
357  -3];
358 assert_checkequal(a, expected);
359
360 // bug_14361
361
362 a=[1; .../* a comment */
363 -2];
364 assert_checkequal(a,  colvect);
365 a=[1;.../* a comment */
366 -2];
367 assert_checkequal(a,  colvect);
368 a=[1; .../* a comment */
369  -2];
370 assert_checkequal(a,  colvect);
371 a=[1;.../* a comment */
372  -2];
373 assert_checkequal(a,  colvect);
374 a=[1; .../* a comment */
375 - 2];
376 assert_checkequal(a,  colvect);
377 a=[1;.../* a comment */
378 - 2];
379 assert_checkequal(a,  colvect);
380
381 a=[1 .../* a comment */
382 -2];
383 assert_checkequal(a,  linevect);
384 a=[1.../* a comment */
385 -2];
386 assert_checkequal(a,  -1);
387 a=[1 .../* a comment */
388  -2];
389 assert_checkequal(a,  linevect);
390 a=[1.../* a comment */
391  -2];
392 assert_checkequal(a,  linevect);
393 a=[1 .../* a comment */
394 - 2];
395 assert_checkequal(a,  -1);
396 a=[1.../* a comment */
397 - 2];
398 assert_checkequal(a,  -1);
399
400 // Operators within matrices
401 // DOTTIMES
402 a = [[2 3] .* ... /* a comment */
403 -3];
404 expected = [-6 -9];
405 assert_checkequal(a, expected);
406
407 //DOTRDIVIDE
408
409 a = [[2 3] ./ ... /* a comment */
410 -3];
411 expected = [-2/3 -1];
412 assert_checkequal(a, expected);
413
414 //DOTLDIVIDE
415 a = [[2 3] .\ ... /* a comment */
416 -3];
417 expected = [-3/2 -1];
418 assert_checkequal(a, expected);
419
420 //DOTPOWER
421 a = [[2 3] .^ ... /* a comment */
422 -3];
423 expected = [(2^(-3)), (3^(-3))];
424 assert_checkequal(a, expected);
425
426 //MINUS
427 a = [[2 3] - ... /* a comment */
428 -3];
429 expected = [(2-(-3)), (3-(-3))];
430 assert_checkequal(a, expected);
431
432 //PLUS
433 a = [[2 3] + ... /* a comment */
434 -3];
435 expected = [(2+(-3)), (3+(-3))];
436 assert_checkequal(a, expected);
437
438 //TIMES
439 a = [2  * ... /* a comment */
440  -3];
441 expected = [(2*(-3))];
442 assert_checkequal(a, expected);
443
444 //RDIVIDE
445 a = [2  / ... /* a comment */
446  -3];
447 expected = [(2/(-3))];
448 assert_checkequal(a, expected);
449
450 //LDIVIDE
451 a = [2  \ ... /* a comment */
452  -3];
453 expected = [(2\(-3))];
454 assert_checkequal(a, expected);
455
456 //POWER
457 a = [2  ^ ... /* a comment */
458  -3];
459 expected = [(2^(-3))];
460 assert_checkequal(a, expected);
461
462 //KRONTIMES
463 a = [[2 3] .*. ... /* a comment */
464  -3];
465 expected = [([2, 3].*.(-3))];
466 assert_checkequal(a, expected);
467
468 //kronrdivide
469 a = [[2 3] ./. ... /* a comment */
470  -3];
471 expected = [([2, 3]./.(-3))];
472 assert_checkequal(a, expected);
473
474 //KRONLDIVIDE
475 a = [[2 3] .\. ... /* a comment */
476  -3];
477 expected = [([2, 3].\.(-3))];
478 assert_checkequal(a, expected);
479
480 //EQ
481 a = [[2 3] == ... /* a comment */
482  -3];
483 expected = [([2, 3]==(-3))];
484 assert_checkequal(a, expected);
485
486 //NE
487 a = [[2 3]  ~= ... /* a comment */
488  -3];
489 expected = [([2, 3]~=(-3))];
490 assert_checkequal(a, expected);
491
492 //LT
493 a = [[2 3]  < ... /* a comment */
494  -3];
495 expected = [([2, 3]<(-3))];
496 assert_checkequal(a, expected);
497
498 //GT
499 a = [[2 3]  > ... /* a comment */
500  -3];
501 expected = [([2, 3]>(-3))];
502 assert_checkequal(a, expected);
503
504 //LE
505 a = [[2 3]  <= ... /* a comment */
506  -3];
507 expected = [([2, 3]<=(-3))];
508 assert_checkequal(a, expected);
509
510 //GE
511 a = [[2 3]  >= ... /* a comment */
512  -3];
513 expected = [([2, 3]>=(-3))];
514 assert_checkequal(a, expected);
515
516 // Comments on several lines
517 a=[1; .../* a comment 
518  on several lines */
519 -2];
520 assert_checkequal(a,  colvect);
521 a=[1;.../* a comment 
522  on several lines */
523 -2];
524 assert_checkequal(a,  colvect);
525 a=[1; .../* a comment 
526  on several lines */
527  -2];
528 assert_checkequal(a,  colvect);
529 a=[1;.../* a comment 
530  on several lines */
531  -2];
532 assert_checkequal(a,  colvect);
533 a=[1; .../* a comment 
534  on several lines */
535 - 2];
536 assert_checkequal(a,  colvect);
537 a=[1;.../* a comment 
538  on several lines */
539 - 2];
540 assert_checkequal(a,  colvect);
541
542 a=[1 .../* a comment 
543  on several lines */
544 -2];
545 assert_checkequal(a,  linevect);
546 a=[1.../* a comment 
547  on several lines */
548 -2];
549 assert_checkequal(a,  -1);
550 a=[1 .../* a comment 
551  on several lines */
552  -2];
553 assert_checkequal(a,  linevect);
554 a=[1.../* a comment 
555  on several lines */
556  -2];
557 assert_checkequal(a,  linevect);
558 a=[1 .../* a comment 
559  on several lines */
560 - 2];
561 assert_checkequal(a,  -1);
562 a=[1.../* a comment 
563  on several lines */
564 - 2];
565 assert_checkequal(a,  -1);
566
567 // Operators within matrices
568 // DOTTIMES
569 a = [[2 3] .* ... /* a comment 
570  on several lines */
571 -3];
572 expected = [-6 -9];
573 assert_checkequal(a, expected);
574
575 //DOTRDIVIDE
576 a = [[2 3] ./ ... /* a comment 
577  on several lines */
578 -3];
579 expected = [-2/3 -1];
580 assert_checkequal(a, expected);
581
582 //DOTLDIVIDE
583 a = [[2 3] .\ ... /* a comment 
584  on several lines */
585 -3];
586 expected = [-3/2 -1];
587 assert_checkequal(a, expected);
588
589 //DOTPOWER
590 a = [[2 3] .^ ... /* a comment 
591  on several lines */
592 -3];
593 expected = [(2^(-3)), (3^(-3))];
594 assert_checkequal(a, expected);
595
596 //MINUS
597 a = [[2 3] - ... /* a comment 
598  on several lines */
599 -3];
600 expected = [(2-(-3)), (3-(-3))];
601 assert_checkequal(a, expected);
602
603 //PLUS
604 a = [[2 3] + ... /* a comment 
605  on several lines */
606 -3];
607 expected = [(2+(-3)), (3+(-3))];
608 assert_checkequal(a, expected);
609
610 //TIMES
611 a = [2  * ... /* a comment 
612  on several lines */
613  -3];
614 expected = [(2*(-3))];
615 assert_checkequal(a, expected);
616
617 //RDIVIDE
618 a = [2  / ... /* a comment 
619  on several lines */
620  -3];
621 expected = [(2/(-3))];
622 assert_checkequal(a, expected);
623
624 //LDIVIDE
625 a = [2  \ ... /* a comment 
626  on several lines */
627  -3];
628 expected = [(2\(-3))];
629 assert_checkequal(a, expected);
630
631 //POWER
632 a = [2  ^ ... /* a comment 
633  on several lines */
634  -3];
635 expected = [(2^(-3))];
636 assert_checkequal(a, expected);
637
638 //KRONTIMES
639 a = [[2 3] .*. ... /* a comment 
640  on several lines */
641  -3];
642 expected = [([2, 3].*.(-3))];
643 assert_checkequal(a, expected);
644
645 //KRONRDIVIDE
646 a = [[2 3] ./. ... /* a comment 
647  on several lines */
648  -3];
649 expected = [([2, 3]./.(-3))];
650 assert_checkequal(a, expected);
651
652 //KRONLDIVIDE
653 a = [[2 3] .\. ... /* a comment 
654  on several lines */
655  -3];
656 expected = [([2, 3].\.(-3))];
657 assert_checkequal(a, expected);
658
659 //EQ
660 a = [[2 3] == ... /* a comment 
661  on several lines */
662  -3];
663 expected = [([2, 3]==(-3))];
664 assert_checkequal(a, expected);
665
666 //NE
667 a = [[2 3]  ~= ... /* a comment 
668  on several lines */
669  -3];
670 expected = [([2, 3]~=(-3))];
671 assert_checkequal(a, expected);
672
673 //LT
674 a = [[2 3]  < ... /* a comment 
675  on several lines */
676  -3];
677 expected = [([2, 3]<(-3))];
678 assert_checkequal(a, expected);
679
680 //GT
681 a = [[2 3]  > ... /* a comment 
682  on several lines */
683  -3];
684 expected = [([2, 3]>(-3))];
685 assert_checkequal(a, expected);
686
687 //LE
688 a = [[2 3]  <= ... /* a comment 
689  on several lines */
690  -3];
691 expected = [([2, 3]<=(-3))];
692 assert_checkequal(a, expected);
693
694 //GE
695 a = [[2 3]  >= ... /* a comment 
696  on several lines */
697  -3];
698 expected = [([2, 3]>=(-3))];
699 assert_checkequal(a, expected);
700
701 // Special behaviour of ... with + and -
702 a = [1 +...
703 2]
704 expected = 3;
705 assert_checkequal(a, expected);
706
707 a = [1 +...
708  2]
709 expected = 3;
710 assert_checkequal(a, expected);
711
712 a = [1 +...
713  +2]
714 expected = 3;
715 assert_checkequal(a, expected);
716
717 a = [1 -...
718 2]
719 expected = -1;
720 assert_checkequal(a, expected);
721
722 a = [1 -...
723  2]
724 expected = -1;
725 assert_checkequal(a, expected);
726
727 a = [1 -...
728  -2]
729 expected = 3;
730 assert_checkequal(a, expected);
731
732 // Case with multiline comment
733 str_cmd = ["a = [1 -... /* the start of a";
734           "multiline comment */ 2 3]"]; // this currently generates an error
735 assert_checktrue(execstr(str_cmd, "errcatch") <> 0);
736
737 // bug_14374 comments in SHELLMODE
738 // Testing if shellmode execution with command
739 // convstr a u // a comment
740 // convstr a /* a comment */
741 // convstr a u /* some text
742 //                ending comment here */
743 ierr = execstr("convstr a u // a comment", "errcatch");
744 assert_checkequal(ierr, 0);
745
746 ierr = execstr("convstr a /* a comment */", "errcatch");
747 assert_checkequal(ierr, 0);
748
749 ierr = execstr(["convstr a u /* some text"; ..
750                 "              ending comment here */"], "errcatch");
751 assert_checkequal(ierr, 0);
752
753 ierr = execstr("convstr a /* some comments */ u;", "errcatch");
754 assert_checkequal(ierr, 0);