3ec06386c211396dacbf8c6e9c566d804918a891
[scilab.git] / scilab / modules / functions / tests / nonreg_tests / bug_1469.tst
1 // =============================================================================
2 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 // Copyright (C) 2006-2008 - INRIA - Serge STEER <serge.steer@inria.fr>
4 //
5 //  This file is distributed under the same license as the Scilab package.
6 // =============================================================================
7 //
8 // <-- CLI SHELL MODE -->
9 // <-- ENGLISH IMPOSED -->
10 //
11 // <-- Non-regression test for bug 1469 -->
12 //
13 // <-- Bugzilla URL -->
14 // http://bugzilla.scilab.org/show_bug.cgi?id=1469
15 //
16 // <-- Short Description -->
17 //    Comments modify line numbering in functions
18 //
19 //    What you don't believe?
20 //
21 //    Try this:
22 //
23 //    1st test, no comment in line 1:
24 //
25 //    -->function foo1()
26 //    -->  function foo3
27 //    -->  endfunction
28 //    -->  disp("line a");
29 //    -->  disp("line b");
30 //    -->  disp("line c");
31 //    -->endfunction
32 //
33 //    -->setbpt("foo1",[3,4])
34 //
35 //    -->foo1()
36 //    Stop after row     3 in function foo1 :
37 // ...
38
39 //test of line numbering in  functions, handling initial comments
40
41
42 // ================ Test 1 =====================================================
43
44 function foo,endfunction
45 L=macr2tree(foo);
46 R1=L(6)==1&size(L)==6;
47 if ~R1 then pause,end
48 clear foo;
49
50 // ================ Test 2 =====================================================
51 // known syntax error in scilab 6
52 //function foo,,endfunction
53 //L=macr2tree(foo);
54 //R2=L(6)==1&size(L)==6
55 //if ~R2 then pause,end
56 //clear foo;
57
58 // ================ Test 3 =====================================================
59
60 function foo(),endfunction
61 L=macr2tree(foo);
62 R3=L(6)==1&size(L)==6;
63 if ~R3 then pause,end
64 clear foo;
65
66 // ================ Test 4 =====================================================
67
68 function foo(),a=1,endfunction
69 L=macr2tree(foo);
70 R4=L(6)==1&size(L)==6;
71 if ~R4 then pause,end
72 clear foo;
73
74 // ================ Test 5 =====================================================
75
76 function foo
77 endfunction
78 L=macr2tree(foo);
79 R5=L(6)==2&size(L)==6;
80 if ~R5 then pause,end
81 clear foo;
82
83 // ================ Test 6 =====================================================
84
85 function foo,
86 endfunction
87 L=macr2tree(foo);
88 R6=L(6)==2&size(L)==6;
89 if ~R6 then pause,end
90 clear foo;
91
92 // ================ Test 7 =====================================================
93
94 function foo//ZZZZ
95 endfunction
96 L=macr2tree(foo);
97 R7=L(6)==2&size(L)==6;
98 if ~R7 then pause,end
99 clear foo;
100
101 // ================ Test 8 =====================================================
102
103 function foo,//ZZZZ
104 endfunction
105 L=macr2tree(foo);
106 R8=L(6)==2&size(L)==6;
107 if ~R8 then pause,end
108 clear foo;
109
110 // ================ Test 9 =====================================================
111
112 function foo
113     //ZZZZ
114 endfunction
115 L=macr2tree(foo);
116 R9=L(6)==3&size(L)==6;
117 if ~R9 then pause,end
118 clear foo;
119
120 // ================ Test 10 ====================================================
121
122 function foo,//ZZZZ
123     a=1
124 endfunction
125 L=macr2tree(foo);
126 R10=L(6)==3&size(L)==6;
127 if ~R10 then pause,end
128 clear foo;
129
130 // ================ Test 11 ====================================================
131
132 function loc=foo,[l,w]=where(),loc=l(1),endfunction
133 R11= and(foo()==1);
134 if ~R11 then pause,end
135 clear foo;
136
137 // ================ Test 12 ====================================================
138
139 function loc=foo,//ZZZZ
140     [l,w]=where(),loc=l(1)
141 endfunction
142 R12= and(foo()==2);
143 if ~R12 then pause,end
144 clear foo;
145
146 // ================ Test 13 ====================================================
147
148 function loc=foo
149     //ZZZZ
150     [l,w]=where(),loc=l(1)
151 endfunction
152 R13= and(foo()==3);
153 if ~R13 then pause,end
154 clear foo;
155
156 // ================ Test 14 ====================================================
157
158 function loc=foo1()
159     [l,w]=where(),loc=l(1)
160     function loc=foo3(loc)
161         [l,w]=where(),loc=[loc,l(1:2)']
162     endfunction
163     [l,w]=where(),loc=[loc,l(1)]
164     loc=foo3(loc)
165 endfunction
166 R14= and(foo1()==[2,6,2,7]);
167 if ~R14 then pause,end
168 clear foo1;
169
170 // ================ Test 15 ====================================================
171
172 function loc=foo1()//ZZZZZZZ
173     [l,w]=where(),loc=l(1)
174     function loc=foo3(loc)
175         [l,w]=where(),loc=[loc,l(1:2)']
176     endfunction
177     [l,w]=where(),loc=[loc,l(1)]
178     loc=foo3(loc)
179 endfunction
180 L=macr2tree(foo1);
181 R15=and(foo1()==[2,6,2,7])&(L(6)==8);
182 if ~R15 then pause,end
183 clear foo1;
184
185 // ================ Test 16 ====================================================
186
187 function loc=foo1()
188     //ZZZZZZZ
189     [l,w]=where(),loc=l(1)
190     function loc=foo3(loc)
191         [l,w]=where(),loc=[loc,l(1:2)']
192     endfunction
193     [l,w]=where(),loc=[loc,l(1)]
194     loc=foo3(loc)
195 endfunction
196 L=macr2tree(foo1);
197 R16=and(foo1()==[3,7,2,8])&(L(6)==9);
198 if ~R16 then pause,end
199 clear foo1;
200
201 // ================ Test 17 ====================================================
202
203 //pb execution des macros non compilee
204 deff("y=foo(a,b,c)","y=a+b+c");
205 R17=foo("aaa","bbb","cc")=="aaabbbcc";
206 if ~R17 then pause,end
207 clear foo
208
209 // ================ Test 18 ====================================================
210
211 deff("y=foo(a,b,c)",["","y=a+b+c"]);
212 R18=foo("aaa","bbb","cc")=="aaabbbcc";
213 if ~R18 then pause,end
214 clear foo
215
216 // ================ Test 19 ====================================================
217 // comp is obsolete since Scilab 6
218 //comp(foo)
219 //R19=foo('aaa','bbb','cc')=='aaabbbcc'
220 //if ~R19 then pause,end
221 //clear foo
222
223 // ================ Test 20 ====================================================
224
225 //function definition nested in a or loop!
226 z=0;R20=%t;
227 for k=1:2
228     function y=foo()
229         y=k
230     endfunction
231     L=macr2tree(foo);
232     R20=R20&(L(6)==3);
233     z=z+foo();
234 end
235 R20=R20&z==3;
236 if ~R20 then pause,end
237
238 // ================ Test 21 ====================================================
239
240 //test avec getf
241 t=["function foo,//ZZZZ"
242 "  a=1"
243 "endfunction"];
244 mputl(t,TMPDIR+"/foo.sci");
245 warning("off");
246 exec(TMPDIR+"/foo.sci")
247 warning("on");
248 L=macr2tree(foo); //getf ignores declaration line comments
249 R21=L(6)==3&size(L)==6;
250 if ~R21 then pause,end
251 clear foo;
252
253 // ================ Test 22 ====================================================
254
255 t=["function foo"
256 "//ZZZZ"
257 "  a=1"
258 "endfunction"];
259 mputl(t,TMPDIR+"/foo.sci");
260 exec(TMPDIR+"/foo.sci")
261 L=macr2tree(foo); //getf ignores declaration line comments
262 R22=L(6)==4&size(L)==6;
263 if ~R22 then pause,end
264 clear foo;
265
266 // ================ Test 23 ====================================================
267 function foo()
268     function bar()
269         a=1
270     endfunction
271 endfunction
272
273 t=macr2tree(foo);
274 t=tree2code(t);
275 if size(t,1)<>6 then pause,end
276
277 clear foo
278 function foo()
279     function bar()
280         a=1
281     endfunction
282 endfunction
283
284 t1=macr2tree(foo);
285 t1=tree2code(t1);
286 if or(t<>t1) then pause,end
287 // ================ Test 24 ====================================================
288 function test;endfunction
289 L=macr2tree(test);
290 if size(L)<>6 then pause,end
291 if L(6)<>1 then pause,end