2b223b45c435576e39edcded1f56a68124802645
[scilab.git] / scilab / modules / core / tests / unit_tests / macro.dia.ref
1 // =============================================================================
2 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 // Copyright (C) ????-2008 - INRIA
4 //
5 //  This file is distributed under the same license as the Scilab package.
6 // =============================================================================
7 // <-- CLI SHELL MODE -->
8 funcprot(0);
9 // simple
10 //
11 deff("[x,y]=t1(a,b)","x=a+b,y=a-b")
12 [u,v]=t1(1,2);
13 if u<> 3 then bugmes();quit;end
14 if v<>-1 then bugmes();quit;end
15 //
16 //with arguments
17 b=2;
18 if t1(1)<>t1(1,2) then bugmes();quit;end
19 t2=t1;
20 //
21 [u,v]=t1(1,2);
22 if u<> 3 then bugmes();quit;end
23 if v<>-1 then bugmes();quit;end
24 b=2;
25 if t1(1)<>t1(1,2) then bugmes();quit;end
26 //
27 //resume
28 //
29 deff("[x,y]=t3(a,b)","x=a+b,y=a-b,z=resume(a*a)")
30 [u,v]=t3(1,2);
31 if u<> 3 then bugmes();quit;end
32 if v<>-1 then bugmes();quit;end
33 if z<>1 then bugmes();quit;end
34 b=2;
35 clear z
36 if t3(1)<>t3(1,2) then bugmes();quit;end
37 if z<>1 then bugmes();quit;end
38 t4=t3;
39 [u,v]=t3(1,2);
40 if u<> 3 then bugmes();quit;end
41 if v<>-1 then bugmes();quit;end
42 if z<>1 then bugmes();quit;end
43 clear z
44 b=2;
45 if t3(1)<>t3(1,2) then bugmes();quit;end
46 if z<>1 then bugmes();quit;end
47 //
48 // macro + clauses
49 //
50 text = ["if n>0 then x=1"
51 "y=0;for k=1:n,y=y+k,end"
52 "else x=-1"
53 "if n==4 then y=''yes'' "
54 "else y=''no'' "
55 "end"
56 "end"
57 "if n==-1 then return,end"
58 "if n==-2 then tt=resume(n),end"
59 "select x,"
60 "case 1 then x=''pos'' ,tt=resume(''ok''),"
61 "case -1 then x=''neg'' ,"
62 "end"];
63 //
64 deff("[x,y]=t5(n)",text)
65 [u,v]=t5(5);
66 if u<>"pos" then bugmes();quit;end
67 if v<>15 then bugmes();quit;end
68 if tt<>"ok" then bugmes();quit;end
69 clear tt
70 [u,v]=t5(-1);
71 if u<>-1 then bugmes();quit;end
72 if v<>"no" then bugmes();quit;end
73 if exists("tt")==1 then bugmes();quit;end
74 clear tt v
75 u=t5(-2);
76 if u<>-1 then bugmes();quit;end
77 if tt<>-2 then bugmes();quit;end
78 clear tt
79 u=t5(-4);
80 if u<>"neg" then bugmes();quit;end
81 if exists("tt")==1 then bugmes();quit;end
82 clear u v tt
83 [u,v]=t5(5);
84 if u<>"pos" then bugmes();quit;end
85 if v<>15 then bugmes();quit;end
86 if tt<>"ok" then bugmes();quit;end
87 clear tt
88 [u,v]=t5(-1);
89 if u<>-1 then bugmes();quit;end
90 if v<>"no" then bugmes();quit;end
91 if exists("tt")==1 then bugmes();quit;end
92 clear tt v
93 u=t5(-2);
94 if u<>-1 then bugmes();quit;end
95 if tt<>-2 then bugmes();quit;end
96 clear tt
97 u=t5(-4);
98 if u<>"neg" then bugmes();quit;end
99 if exists("tt")==1 then bugmes();quit;end
100 //
101 // complex clauses
102 //
103 text = ["if n>0 then x=1"
104 "y=0;for k=1:b(n),y=y+b(k),end"
105 "else x=-1"
106 "if n==4 then y=b(''yes'') "
107 "else y=b(''no'') "
108 "end"
109 "end"
110 "if n==b(-1) then return,end"
111 "if n==b(-2) then tt=resume(b(n)),end"
112 "select x,"
113 "case 1 then x=b(''pos'') ,tt=resume(b(''ok'')),"
114 "case b(-1) then x=b(''neg'') ,"
115 "end"];
116 deff("[x]=b(a)","x=a,prod([1 1])")
117 deff("[x,y]=t5(n)",text)
118 [u,v]=t5(5);
119 if u<>"pos" then bugmes();quit;end
120 if v<>15 then bugmes();quit;end
121 if tt<>"ok" then bugmes();quit;end
122 clear tt
123 [u,v]=t5(-1);
124 if u<>-1 then bugmes();quit;end
125 if v<>"no" then bugmes();quit;end
126 if exists("tt")==1 then bugmes();quit;end
127 clear tt v
128 u=t5(-2);
129 if u<>-1 then bugmes();quit;end
130 if tt<>-2 then bugmes();quit;end
131 clear tt
132 u=t5(-4);
133 if u<>"neg" then bugmes();quit;end
134 if exists("tt")==1 then bugmes();quit;end
135 clear u v tt
136 [u,v]=t5(5);
137 if u<>"pos" then bugmes();quit;end
138 if v<>15 then bugmes();quit;end
139 if tt<>"ok" then bugmes();quit;end
140 clear tt
141 [u,v]=t5(-1);
142 if u<>-1 then bugmes();quit;end
143 if v<>"no" then bugmes();quit;end
144 if exists("tt")==1 then bugmes();quit;end
145 clear tt v
146 u=t5(-2);
147 if u<>-1 then bugmes();quit;end
148 if tt<>-2 then bugmes();quit;end
149 clear tt
150 u=t5(-4);
151 if u<>"neg" then bugmes();quit;end
152 if exists("tt")==1 then bugmes();quit;end
153 deff("[x,y]=t5(n)",text)
154 [u,v]=t5(5);
155 if u<>"pos" then bugmes();quit;end
156 if v<>15 then bugmes();quit;end
157 if tt<>"ok" then bugmes();quit;end
158 clear tt
159 [u,v]=t5(-1);
160 if u<>-1 then bugmes();quit;end
161 if v<>"no" then bugmes();quit;end
162 if exists("tt")==1 then bugmes();quit;end
163 clear tt v
164 u=t5(-2);
165 if u<>-1 then bugmes();quit;end
166 if tt<>-2 then bugmes();quit;end
167 clear tt
168 u=t5(-4);
169 if u<>"neg" then bugmes();quit;end
170 if exists("tt")==1 then bugmes();quit;end
171 //
172 clear u v tt
173 [u,v]=t5(5);
174 if u<>"pos" then bugmes();quit;end
175 if v<>15 then bugmes();quit;end
176 if tt<>"ok" then bugmes();quit;end
177 clear tt
178 [u,v]=t5(-1);
179 if u<>-1 then bugmes();quit;end
180 if v<>"no" then bugmes();quit;end
181 if exists("tt")==1 then bugmes();quit;end
182 clear tt v
183 u=t5(-2);
184 if u<>-1 then bugmes();quit;end
185 if tt<>-2 then bugmes();quit;end
186 clear tt
187 u=t5(-4);
188 if u<>"neg" then bugmes();quit;end
189 if exists("tt")==1 then bugmes();quit;end
190 //more complex
191 deff("[x]=b(a)","if a==1 then x=1,else x=a,prod([1 1]),end")
192 //
193 deff("[x,y]=t5(n)",text)
194 [u,v]=t5(5);
195 if u<>"pos" then bugmes();quit;end
196 if v<>15 then bugmes();quit;end
197 if tt<>"ok" then bugmes();quit;end
198 clear tt
199 [u,v]=t5(-1);
200 if u<>-1 then bugmes();quit;end
201 if v<>"no" then bugmes();quit;end
202 if exists("tt")==1 then bugmes();quit;end
203 clear tt v
204 u=t5(-2);
205 if u<>-1 then bugmes();quit;end
206 if tt<>-2 then bugmes();quit;end
207 clear tt
208 u=t5(-4);
209 if u<>"neg" then bugmes();quit;end
210 if exists("tt")==1 then bugmes();quit;end
211 clear u v tt
212 [u,v]=t5(5);
213 if u<>"pos" then bugmes();quit;end
214 if v<>15 then bugmes();quit;end
215 if tt<>"ok" then bugmes();quit;end
216 clear tt
217 [u,v]=t5(-1);
218 if u<>-1 then bugmes();quit;end
219 if v<>"no" then bugmes();quit;end
220 if exists("tt")==1 then bugmes();quit;end
221 clear tt v
222 u=t5(-2);
223 if u<>-1 then bugmes();quit;end
224 if tt<>-2 then bugmes();quit;end
225 clear tt
226 u=t5(-4);
227 if u<>"neg" then bugmes();quit;end
228 if exists("tt")==1 then bugmes();quit;end
229 //
230 deff("[x,y]=t5(n)",text)
231 [u,v]=t5(5);
232 if u<>"pos" then bugmes();quit;end
233 if v<>15 then bugmes();quit;end
234 if tt<>"ok" then bugmes();quit;end
235 clear tt
236 [u,v]=t5(-1);
237 if u<>-1 then bugmes();quit;end
238 if v<>"no" then bugmes();quit;end
239 if exists("tt")==1 then bugmes();quit;end
240 clear tt v
241 u=t5(-2);
242 if u<>-1 then bugmes();quit;end
243 if tt<>-2 then bugmes();quit;end
244 clear tt
245 u=t5(-4);
246 if u<>"neg" then bugmes();quit;end
247 if exists("tt")==1 then bugmes();quit;end
248 //
249 clear u v tt
250 [u,v]=t5(5);
251 if u<>"pos" then bugmes();quit;end
252 if v<>15 then bugmes();quit;end
253 if tt<>"ok" then bugmes();quit;end
254 clear tt
255 [u,v]=t5(-1);
256 if u<>-1 then bugmes();quit;end
257 if v<>"no" then bugmes();quit;end
258 if exists("tt")==1 then bugmes();quit;end
259 clear tt v
260 u=t5(-2);
261 if u<>-1 then bugmes();quit;end
262 if tt<>-2 then bugmes();quit;end
263 clear tt
264 u=t5(-4);
265 if u<>"neg" then bugmes();quit;end
266 if exists("tt")==1 then bugmes();quit;end
267 // resume
268 deff("[]=t6(a)","x=resume(a)")
269 clear ans x
270 t6(15)
271 if x<>15 then bugmes();quit;end
272 if exists("ans")==1 then bugmes();quit;end
273 //
274 clear ans x
275 t6(15)
276 if x<>15 then bugmes();quit;end
277 if exists("ans")==1 then bugmes();quit;end
278 //
279 //
280 //
281 deff("[ydot]=simul(t,y,a)","ydot=a")
282 a=2;
283 //appel le plus imple
284 y=ode(0,0,1:2,simul)
285  y  =
286     2.    4.
287 if norm(y-[a 2*a]) >1000*%eps then bugmes();quit;end
288 y=ode(0,0,1:2,simul)
289  y  =
290     2.    4.
291 if norm(y-[a 2*a]) >1000*%eps then bugmes();quit;end
292 //appel avec passage d'arguments supplementaires
293 deff("[ydot]=simul(t,y,a)","ydot=a")
294 y=ode(0,0,1:2,list(simul,a))
295  y  =
296     2.    4.
297 if norm(y-[a 2*a]) >1000*%eps then bugmes();quit;end
298 y=ode(0,0,1:2,list(simul,a))
299  y  =
300     2.    4.
301 if norm(y-[a 2*a]) >1000*%eps then bugmes();quit;end
302 //
303 //non linear
304 //
305 text=["for k=1:n,"
306 "y=ode(a*(k-1),k-1,k,simul),"
307 "x=[x,y],"
308 "end"];
309 //
310 deff("[x]=calcul(n)",text)
311 deff("[ydot]=simul(t,y,a)","ydot=a")
312 x=[];
313 x=calcul(3);
314 if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
315 x=[];
316 x=calcul(3);
317 if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
318 x=[];
319 x=calcul(3);
320 if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
321 deff("[ydot]=simul(t,y,a)","ydot=a")
322 x=[];
323 x=calcul(3);
324 if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
325 //
326 text(2)="y=ode(a*(k-1),k-1,k,list(simul,a)),";
327 deff("[x]=calcul(n)",text)
328 deff("[ydot]=simul(t,y,a)","ydot=a")
329 x=[];
330 x=calcul(3);
331 if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
332 x=[];
333 x=calcul(3);
334 if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
335 x=[];
336 x=calcul(3);
337 if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
338 deff("[ydot]=simul(t,y,a)","ydot=a")
339 x=[];
340 x=calcul(3);
341 if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
342 //resume in external
343 deff("[ydot]=simul(t,y,a)","ydot=a,tt=resume([tt,t])")
344 tt=[]
345  tt  =
346     []
347 deff("[x]=calcul(n)",text)
348 deff("[ydot]=simul(t,y,a)","ydot=a")
349 x=[];
350 x=calcul(3);
351 if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
352 x=[];
353 x=calcul(3);
354 if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
355 x=[];
356 x=calcul(3);
357 if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
358 deff("[ydot]=simul(t,y,a)","ydot=a")
359 x=[];
360 x=calcul(3);
361 if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
362 //
363 //external calls a macro
364 //
365 deff("[x]=b(a)","if a==1 then x=a,prod([1 1]),else x=a,prod([1 1]),end")
366 text=["for k=1:n,"
367 "y=ode(a*(k-1),k-1,k,simul),"
368 "x=[x,y],"
369 "end"];
370 //
371 deff("[x]=calcul(n)",text)
372 deff("[ydot]=simul(t,y,a)","ydot=b(a)")
373 x=[];
374 x=calcul(3);
375 if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
376 x=[];
377 x=calcul(3);
378 if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
379 x=[];
380 x=calcul(3);
381 if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
382 deff("[ydot]=simul(t,y,a)","ydot=b(a)")
383 x=[];
384 x=calcul(3);
385 if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
386 //
387 text(2)="y=ode(a*(k-1),k-1,k,list(simul,a)),";
388 deff("[x]=calcul(n)",text)
389 deff("[ydot]=simul(t,y,a)","ydot=b(a)")
390 x=[];
391 x=calcul(3);
392 if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
393 x=[];
394 x=calcul(3);
395 if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
396 x=[];
397 x=calcul(3);
398 if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
399 deff("[ydot]=simul(t,y,a)","ydot=b(a)")
400 x=[];
401 x=calcul(3);
402 if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
403 //
404 deff("[ydot]=simul(t,y,a)","ydot=b(a),tt=resume([tt,t])")
405 tt=[]
406  tt  =
407     []
408 deff("[x]=calcul(n)",text)
409 deff("[ydot]=simul(t,y,a)","ydot=b(a)")
410 x=[];
411 x=calcul(3);
412 if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
413 x=[];
414 x=calcul(3);
415 if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
416 x=[];
417 x=calcul(3);
418 if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
419 deff("[ydot]=simul(t,y,a)","ydot=b(a)")
420 x=[];
421 x=calcul(3);
422 if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
423 text=["for k=1:n,"
424 "y=ode(a*(k-1),k-1,k,simul),"
425 "x=[x,y],"
426 "end"];
427 //
428 deff("[x]=calcul(n)",text)
429 deff("[ydot]=simul(t,y,a)","ydot=b(a)")
430 x=[];
431 x=calcul(3);
432 if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
433 x=[];
434 x=calcul(3);
435 if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
436 x=[];
437 x=calcul(3);
438 if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
439 deff("[ydot]=simul(t,y,a)","ydot=b(a)")
440 x=[];
441 x=calcul(3);
442 if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
443 //
444 text(2)="y=ode(a*(k-1),k-1,k,list(simul,a)),";
445 deff("[x]=calcul(n)",text)
446 deff("[ydot]=simul(t,y,a)","ydot=b(a)")
447 x=[];
448 x=calcul(3);
449 if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
450 x=[];
451 x=calcul(3);
452 if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
453 x=[];
454 x=calcul(3);
455 if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
456 deff("[ydot]=simul(t,y,a)","ydot=b(a)")
457 x=[];
458 x=calcul(3);
459 if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
460 //
461 deff("[ydot]=simul(t,y,a)","ydot=b(a),tt=resume([tt,t])")
462 tt=[]
463  tt  =
464     []
465 deff("[x]=calcul(n)",text)
466 deff("[ydot]=simul(t,y,a)","ydot=b(a)")
467 x=[];
468 x=calcul(3);
469 if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
470 x=[];
471 x=calcul(3);
472 if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
473 x=[];
474 x=calcul(3);
475 if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
476 deff("[ydot]=simul(t,y,a)","ydot=b(a)")
477 x=[];
478 x=calcul(3);
479 if norm(x-a*[1 2 3])>1000*%eps then bugmes();quit;end
480 //
481 //macro defining ,compiling and executing a macro
482 //
483 text=["deff(''[x]=b(a)'',''if a==1 then x=1,else x=a,prod([1 1]),end''),"
484 "b,"
485 "x=b(n),"]
486  text  =
487 !deff('[x]=b(a)','if a==1 then x=1,else x=a,prod([1 1]),end'),  !
488 !                                                                   !
489 !b,                                                                 !
490 !                                                                   !
491 !x=b(n),                                                            !
492 deff("[x]=t8(n)",text')
493 y=t8(10);
494 if y<>10 then bugmes();quit;end
495 y=t8(10);
496 if y<>10 then bugmes();quit;end
497 //
498 //
499 s=poly(0,"s");z=poly(0,"z");
500 deff("[ok]=cplist(l1,l2)",["ok=1;"
501 "if size(l1)<>size(l2) then ok=0,return,end"
502 "for k=1:length(l1),"
503 "if l1(k)<>l2(k) then ok=0,return,end;"
504 "end"])
505 deff("[r]=horner(p,x)",["if type(p)==15|type(p)==16 then";
506 "r=horner(p(2),x)./horner(p(3),x),";
507 "return,";
508 "end;";
509 "d=max(degree(p));";
510 "r=coeff(p,d);";
511 "for k=1:d,";
512 "r=r*x+coeff(p,d-k)*eye();";
513 "end;"])
514 deff("[f]=%p_r_p(p1,p2)",["[l,c]=size(p2);";
515 "if l*c <>1 then f=p1*invr(p2),return,end;";
516 "[l,c]=size(p1);";
517 "[p1 p2]=simp(p1,p2*ones(l,c));";
518 "f=rlist(p1,p2,[]);"])
519 horn=horner;
520 h=1/s;
521 if cplist(h,rlist(1,s,[]))==0 then bugmes();quit;end
522 h1=(z-1)/(z+1);
523 hrn=horner(h,h1);
524 if cplist(hrn , rlist(z+1,z-1,[]))==0 then bugmes();quit;end
525 //
526 hrn=horner(h,h1);
527 if cplist(hrn , rlist(z+1,z-1,[]))==0 then bugmes();quit;end
528 //
529 h=1/s;
530 if cplist(h,rlist(1,s,[]))==0 then bugmes();quit;end
531 h1=(z-1)/(z+1);
532 hrn=horn(h,h1);
533 if cplist(hrn , rlist(z+1,z-1,[]))==0 then bugmes();quit;end
534 //
535 hrn=horn(h,h1);
536 if cplist(hrn , rlist(z+1,z-1,[]))==0 then bugmes();quit;end
537 //
538 //
539 //
540 text=["aa=1,if a==2 then aa=b(a),end"]
541  text  =
542  aa=1,if a==2 then aa=b(a),end
543 fic=file("open",TMPDIR+"/test_macro_exec","unknown");
544 write(fic,text)
545 file("close",fic)
546 deff("[x]=b(a)","x=a,prod([1 1])")
547 deff("[x]=t9(a)","exec(TMPDIR+''/test_macro_exec''),x=aa")
548 y=t9(2)
549 aa=1,if a==2 then aa=b(a),end
550  aa  =
551     1.
552  aa  =
553     2.
554  y  =
555     2.
556 if y<>2 then bugmes();quit;end
557 ierr = execstr("file(""rewind"",fic);","errcatch");
558 assert_checkequal(ierr, 999);
559 errMsg = lasterror();
560 refMsg = msprintf(gettext("%s: Unknown file format.\n"), "file");
561 assert_checkequal(errMsg, refMsg);
562 y=t9(2)
563 aa=1,if a==2 then aa=b(a),end
564  aa  =
565     1.
566  aa  =
567     2.
568  y  =
569     2.
570 if y<>2 then bugmes();quit;end
571 //
572 deff("[x]=t9(a)","exec(TMPDIR+''/test_macro_exec''),x=aa")
573 y=t9(2)
574 aa=1,if a==2 then aa=b(a),end
575  aa  =
576     1.
577  aa  =
578     2.
579  y  =
580     2.
581 if y<>2 then bugmes();quit;end
582 y=t9(2)
583 aa=1,if a==2 then aa=b(a),end
584  aa  =
585     1.
586  aa  =
587     2.
588  y  =
589     2.
590 if y<>2 then bugmes();quit;end