743fd585dcd32a0ab25266c09827d077a452da82
[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 = [-3 .\. [2 3]];
271 assert_checkequal(a, expected);
272
273 a = [-3 .\. ...
274  [2 3]];
275 assert_checkequal(a, expected);
276
277 a = [-3 .\. ... // a comment
278  [2 3]];
279 assert_checkequal(a, expected);
280
281 //EQ
282 a = [[2 3] == -3];
283 expected = [([2, 3]==(-3))];
284 assert_checkequal(a, expected);
285
286 a = [[2 3] == ...
287  -3];
288 assert_checkequal(a, expected);
289
290 a = [[2 3] == ... // a comment
291  -3];
292 assert_checkequal(a, expected);
293
294 //NE
295 a = [[2 3] ~= -3];
296 expected = [([2, 3]~=(-3))];
297 assert_checkequal(a, expected);
298
299 a = [[2 3] ~= ...
300  -3];
301 assert_checkequal(a, expected);
302
303 a = [[2 3]  ~= ... // a comment
304  -3];
305 assert_checkequal(a, expected);
306
307 //LT
308 a = [[2 3] < -3];
309 expected = [([2, 3]<(-3))];
310 assert_checkequal(a, expected);
311
312 a = [[2 3] < ...
313  -3];
314 assert_checkequal(a, expected);
315
316 a = [[2 3]  < ... // a comment
317  -3];
318 assert_checkequal(a, expected);
319
320 //GT
321 a = [[2 3] > -3];
322 expected = [([2, 3]>(-3))];
323 assert_checkequal(a, expected);
324
325 a = [[2 3] > ...
326  -3];
327 assert_checkequal(a, expected);
328
329 a = [[2 3]  > ... // a comment
330  -3];
331 assert_checkequal(a, expected);
332
333 //LE
334 a = [[2 3] <= -3];
335 expected = [([2, 3]<=(-3))];
336 assert_checkequal(a, expected);
337
338 a = [[2 3] <= ...
339  -3];
340 assert_checkequal(a, expected);
341
342 a = [[2 3]  <= ... // a comment
343  -3];
344 assert_checkequal(a, expected);
345
346 //GE
347 a = [[2 3] >= -3];
348 expected = [([2, 3]>=(-3))];
349 assert_checkequal(a, expected);
350
351 a = [[2 3] >= ...
352  -3];
353 assert_checkequal(a, expected);
354
355 a = [[2 3]  >= ... // a comment
356  -3];
357 assert_checkequal(a, expected);
358
359 // bug_14361
360
361 a=[1; .../* a comment */
362 -2];
363 assert_checkequal(a,  colvect);
364 a=[1;.../* a comment */
365 -2];
366 assert_checkequal(a,  colvect);
367 a=[1; .../* a comment */
368  -2];
369 assert_checkequal(a,  colvect);
370 a=[1;.../* a comment */
371  -2];
372 assert_checkequal(a,  colvect);
373 a=[1; .../* a comment */
374 - 2];
375 assert_checkequal(a,  colvect);
376 a=[1;.../* a comment */
377 - 2];
378 assert_checkequal(a,  colvect);
379
380 a=[1 .../* a comment */
381 -2];
382 assert_checkequal(a,  linevect);
383 a=[1.../* a comment */
384 -2];
385 assert_checkequal(a,  -1);
386 a=[1 .../* a comment */
387  -2];
388 assert_checkequal(a,  linevect);
389 a=[1.../* a comment */
390  -2];
391 assert_checkequal(a,  linevect);
392 a=[1 .../* a comment */
393 - 2];
394 assert_checkequal(a,  -1);
395 a=[1.../* a comment */
396 - 2];
397 assert_checkequal(a,  -1);
398
399 // Operators within matrices
400 // DOTTIMES
401 a = [[2 3] .* ... /* a comment */
402 -3];
403 expected = [-6 -9];
404 assert_checkequal(a, expected);
405
406 //DOTRDIVIDE
407
408 a = [[2 3] ./ ... /* a comment */
409 -3];
410 expected = [-2/3 -1];
411 assert_checkequal(a, expected);
412
413 //DOTLDIVIDE
414 a = [[2 3] .\ ... /* a comment */
415 -3];
416 expected = [-3/2 -1];
417 assert_checkequal(a, expected);
418
419 //DOTPOWER
420 a = [[2 3] .^ ... /* a comment */
421 -3];
422 expected = [(2^(-3)), (3^(-3))];
423 assert_checkequal(a, expected);
424
425 //MINUS
426 a = [[2 3] - ... /* a comment */
427 -3];
428 expected = [(2-(-3)), (3-(-3))];
429 assert_checkequal(a, expected);
430
431 //PLUS
432 a = [[2 3] + ... /* a comment */
433 -3];
434 expected = [(2+(-3)), (3+(-3))];
435 assert_checkequal(a, expected);
436
437 //TIMES
438 a = [2  * ... /* a comment */
439  -3];
440 expected = [(2*(-3))];
441 assert_checkequal(a, expected);
442
443 //RDIVIDE
444 a = [2  / ... /* a comment */
445  -3];
446 expected = [(2/(-3))];
447 assert_checkequal(a, expected);
448
449 //LDIVIDE
450 a = [2  \ ... /* a comment */
451  -3];
452 expected = [(2\(-3))];
453 assert_checkequal(a, expected);
454
455 //POWER
456 a = [2  ^ ... /* a comment */
457  -3];
458 expected = [(2^(-3))];
459 assert_checkequal(a, expected);
460
461 //KRONTIMES
462 a = [[2 3] .*. ... /* a comment */
463  -3];
464 expected = [([2, 3].*.(-3))];
465 assert_checkequal(a, expected);
466
467 //kronrdivide
468 a = [[2 3] ./. ... /* a comment */
469  -3];
470 expected = [([2, 3] ./. (-3))];
471 assert_checkequal(a, expected);
472
473 //KRONLDIVIDE
474 a = [-3 .\.  ... /* a comment */
475  [2 3]];
476 assert_checkequal(a, expected);
477
478 //EQ
479 a = [[2 3] == ... /* a comment */
480  -3];
481 expected = [([2, 3]==(-3))];
482 assert_checkequal(a, expected);
483
484 //NE
485 a = [[2 3]  ~= ... /* a comment */
486  -3];
487 expected = [([2, 3]~=(-3))];
488 assert_checkequal(a, expected);
489
490 //LT
491 a = [[2 3]  < ... /* a comment */
492  -3];
493 expected = [([2, 3]<(-3))];
494 assert_checkequal(a, expected);
495
496 //GT
497 a = [[2 3]  > ... /* a comment */
498  -3];
499 expected = [([2, 3]>(-3))];
500 assert_checkequal(a, expected);
501
502 //LE
503 a = [[2 3]  <= ... /* a comment */
504  -3];
505 expected = [([2, 3]<=(-3))];
506 assert_checkequal(a, expected);
507
508 //GE
509 a = [[2 3]  >= ... /* a comment */
510  -3];
511 expected = [([2, 3]>=(-3))];
512 assert_checkequal(a, expected);
513
514 // Comments on several lines
515 a=[1; .../* a comment 
516  on several lines */
517 -2];
518 assert_checkequal(a,  colvect);
519 a=[1;.../* a comment 
520  on several lines */
521 -2];
522 assert_checkequal(a,  colvect);
523 a=[1; .../* a comment 
524  on several lines */
525  -2];
526 assert_checkequal(a,  colvect);
527 a=[1;.../* a comment 
528  on several lines */
529  -2];
530 assert_checkequal(a,  colvect);
531 a=[1; .../* a comment 
532  on several lines */
533 - 2];
534 assert_checkequal(a,  colvect);
535 a=[1;.../* a comment 
536  on several lines */
537 - 2];
538 assert_checkequal(a,  colvect);
539
540 a=[1 .../* a comment 
541  on several lines */
542 -2];
543 assert_checkequal(a,  linevect);
544 a=[1.../* a comment 
545  on several lines */
546 -2];
547 assert_checkequal(a,  -1);
548 a=[1 .../* a comment 
549  on several lines */
550  -2];
551 assert_checkequal(a,  linevect);
552 a=[1.../* a comment 
553  on several lines */
554  -2];
555 assert_checkequal(a,  linevect);
556 a=[1 .../* a comment 
557  on several lines */
558 - 2];
559 assert_checkequal(a,  -1);
560 a=[1.../* a comment 
561  on several lines */
562 - 2];
563 assert_checkequal(a,  -1);
564
565 // Operators within matrices
566 // DOTTIMES
567 a = [[2 3] .* ... /* a comment 
568  on several lines */
569 -3];
570 expected = [-6 -9];
571 assert_checkequal(a, expected);
572
573 //DOTRDIVIDE
574 a = [[2 3] ./ ... /* a comment 
575  on several lines */
576 -3];
577 expected = [-2/3 -1];
578 assert_checkequal(a, expected);
579
580 //DOTLDIVIDE
581 a = [[2 3] .\ ... /* a comment 
582  on several lines */
583 -3];
584 expected = [-3/2 -1];
585 assert_checkequal(a, expected);
586
587 //DOTPOWER
588 a = [[2 3] .^ ... /* a comment 
589  on several lines */
590 -3];
591 expected = [(2^(-3)), (3^(-3))];
592 assert_checkequal(a, expected);
593
594 //MINUS
595 a = [[2 3] - ... /* a comment 
596  on several lines */
597 -3];
598 expected = [(2-(-3)), (3-(-3))];
599 assert_checkequal(a, expected);
600
601 //PLUS
602 a = [[2 3] + ... /* a comment 
603  on several lines */
604 -3];
605 expected = [(2+(-3)), (3+(-3))];
606 assert_checkequal(a, expected);
607
608 //TIMES
609 a = [2  * ... /* a comment 
610  on several lines */
611  -3];
612 expected = [(2*(-3))];
613 assert_checkequal(a, expected);
614
615 //RDIVIDE
616 a = [2  / ... /* a comment 
617  on several lines */
618  -3];
619 expected = [(2/(-3))];
620 assert_checkequal(a, expected);
621
622 //LDIVIDE
623 a = [2  \ ... /* a comment 
624  on several lines */
625  -3];
626 expected = [(2\(-3))];
627 assert_checkequal(a, expected);
628
629 //POWER
630 a = [2  ^ ... /* a comment 
631  on several lines */
632  -3];
633 expected = [(2^(-3))];
634 assert_checkequal(a, expected);
635
636 //KRONTIMES
637 a = [[2 3] .*. ... /* a comment 
638  on several lines */
639  -3];
640 expected = [([2, 3].*.(-3))];
641 assert_checkequal(a, expected);
642
643 //KRONRDIVIDE
644 a = [[2 3] ./. ... /* a comment 
645  on several lines */
646  -3];
647 expected = [([2, 3]./.(-3))];
648 assert_checkequal(a, expected);
649
650 //KRONLDIVIDE
651 a = [ -3 .\. ... /* a comment 
652  on several lines */
653  [2 3] ];
654 assert_checkequal(a, expected);
655
656 //EQ
657 a = [[2 3] == ... /* a comment 
658  on several lines */
659  -3];
660 expected = [([2, 3]==(-3))];
661 assert_checkequal(a, expected);
662
663 //NE
664 a = [[2 3]  ~= ... /* a comment 
665  on several lines */
666  -3];
667 expected = [([2, 3]~=(-3))];
668 assert_checkequal(a, expected);
669
670 //LT
671 a = [[2 3]  < ... /* a comment 
672  on several lines */
673  -3];
674 expected = [([2, 3]<(-3))];
675 assert_checkequal(a, expected);
676
677 //GT
678 a = [[2 3]  > ... /* a comment 
679  on several lines */
680  -3];
681 expected = [([2, 3]>(-3))];
682 assert_checkequal(a, expected);
683
684 //LE
685 a = [[2 3]  <= ... /* a comment 
686  on several lines */
687  -3];
688 expected = [([2, 3]<=(-3))];
689 assert_checkequal(a, expected);
690
691 //GE
692 a = [[2 3]  >= ... /* a comment 
693  on several lines */
694  -3];
695 expected = [([2, 3]>=(-3))];
696 assert_checkequal(a, expected);
697
698 // Special behaviour of ... with + and -
699 a = [1 +...
700 2]
701 expected = 3;
702 assert_checkequal(a, expected);
703
704 a = [1 +...
705  2]
706 expected = 3;
707 assert_checkequal(a, expected);
708
709 a = [1 +...
710  +2]
711 expected = 3;
712 assert_checkequal(a, expected);
713
714 a = [1 -...
715 2]
716 expected = -1;
717 assert_checkequal(a, expected);
718
719 a = [1 -...
720  2]
721 expected = -1;
722 assert_checkequal(a, expected);
723
724 a = [1 -...
725  -2]
726 expected = 3;
727 assert_checkequal(a, expected);
728
729 // Case with multiline comment
730 str_cmd = ["a = [1 -... /* the start of a";
731           "multiline comment */ 2 3]"]; // this currently generates an error
732 assert_checktrue(execstr(str_cmd, "errcatch") <> 0);
733
734 // bug_14374 comments in SHELLMODE
735 // Testing if shellmode execution with command
736 // convstr a u // a comment
737 // convstr a /* a comment */
738 // convstr a u /* some text
739 //                ending comment here */
740 exec(SCI + "/modules/ast/tests/nonreg_tests/bug_14374.tst");
741
742 // Bug 7646: matrix transpose extraction
743 exec(SCI + "/modules/ast/tests/nonreg_tests/bug_7646.tst");
744
745 // Bug 14662: matrix concatenation with simple quote and space led to a parser error
746 exec(SCI + "/modules/ast/tests/nonreg_tests/bug_14662.tst");
747
748 // Bug 14667: multi line string in matrix generated a non terminal parser state
749 exec(SCI + "/modules/ast/tests/nonreg_tests/bug_14667.tst");