56d5b4a578e120e0c4933e7370c0cf17ffa3d5bf
[scilab.git] / scilab / modules / core / tests / unit_tests / function.dia.ref
1 // =============================================================================
2 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 // Copyright (C) ????-2008 - INRIA
4 // Copyright (C) 2008-2011 - DIGITEO
5 //
6 //  This file is distributed under the same license as the Scilab package.
7 // =============================================================================
8 //Checks syntactical aspects  related to functions
9 funcprot(0);
10 //
11 //               Various calling sequences
12 //               -------------------------
13 function y=foo(x)
14     y=x^2
15 endfunction
16 if foo(2)<>4  then bugmes();quit;end
17 //
18 function y=foo(a,b)
19     y=a+b
20 endfunction
21 if foo(2,3)<>5  then bugmes();quit;end
22 //
23 function [y,z]=foo(a)
24     y=a^2
25     z=a^3
26 endfunction
27 [y,z]=foo(2);if y<>4|z<>8 then bugmes();quit;end
28 //
29 function y=foo()
30     y=2
31 endfunction
32 if foo()<>2  then bugmes();quit;end
33 //
34 function y=foo
35     y=2
36 endfunction
37 if foo()<>2  then bugmes();quit;end
38 //
39 function []=foo
40     y=resume(2)
41 endfunction
42 foo();if y<>2  then bugmes();quit;end
43 //
44 function foo
45     y=resume(3)
46 endfunction
47 foo();if y<>3  then bugmes();quit;end
48 //
49 function result=foo(a,b)
50     result = [(a+b) (a-b) (a*a + b*b)];
51 endfunction
52 result=foo(32,64); if or(result <> [96. -32. 5120.]) then bugmes();quit;end
53 //
54 //               Various line splits
55 //               -------------------
56 function y=foo(x),y=x^2
57 endfunction
58 if foo(2)<>4  then bugmes();quit;end
59 //
60 function y=foo(x),y=3*x,endfunction
61 if foo(2)<>6  then bugmes();quit;end
62 //
63 function y=foo(x)
64     z=x^2
65     function y=foo1(x)
66         y=x+1
67     endfunction
68     y=foo1(z)
69 endfunction
70 if foo(2)<>5  then bugmes();quit;end
71 //
72 //               Combined with deff
73 //               -------------------
74 function y=foo(x)
75     z=x^2
76     deff("y=foo1(x)","y=x+1")
77     y=foo1(z)
78 endfunction
79 if foo(2)<>5  then bugmes();quit;end
80 //
81 deff("y=foo(x)",[
82 "z=x^2"
83 "function y=foo1(x)"
84 "y=x+1"
85 "endfunction"
86 "y=foo1(z)"])
87 if foo(2)<>5  then bugmes();quit;end
88 function y=foo(x),y=x+1
89 endfunction;if foo(2)<>3  then bugmes();quit;end
90 //
91 //               Combined with exec
92 //               -------------------
93 function foo
94     z=9;
95     function y=foo1(x)
96         y=x+1;
97     endfunction
98     y=foo1(z);
99 endfunction
100 exec(foo); if y<>10  then bugmes();quit;end
101 //
102 //               Combined with control instructions
103 //               ----------------------------------
104 if %t then
105     function  y=foo(x)
106         y=sin(x)
107     endfunction
108 else
109     function  y=foo(x)
110         y=1
111     endfunction
112 end
113 if foo(1)<>sin(1)  then bugmes();quit;end
114 //
115 if %t then
116     function  y=foo(x)
117         if x==0 then
118             y=1
119         else
120             y=sin(x)/x
121         end
122     endfunction
123 else
124     function  y=foo(x)
125         y=1
126     endfunction
127 end
128 if foo(0)<>1   then bugmes();quit;end
129 if foo(2)<>sin(2)/2   then bugmes();quit;end
130 //
131 z=0;
132 for k=1:2
133     function y=foo()
134         y=k
135     endfunction
136     z=z+foo();
137 end
138 if z<>3 then bugmes();quit;end
139 //
140 z=0;
141     function y=foo(),y=k,endfunction
142     z=z+foo();
143 end
144 if z<>3 then bugmes();quit;end
145 //
146 z=0;
147     z=z+foo();
148 end
149 if z<>3 then bugmes();quit;end
150 z=0;
151 for k=1:2
152     function y=foo(k)//qsdsdf
153         y=k^2
154     endfunction
155     z=z+foo();
156 end
157 if z<>5 then bugmes();quit;end
158 z=0;
159 for k=1:2
160     function y=foo(k)//qsdsdf
161         y=k^2 //a comment
162     endfunction
163     z=z+foo();
164 end
165 if z<>5 then bugmes();quit;end
166 z=0;
167 for k=1:2
168     function y=foo(k), y=k^2, endfunction
169     z=z+foo();
170 end
171 if z<>5 then bugmes();quit;end
172 z=0;
173 for k=1:2
174     function y=foo(k), y=k^2, endfunction// a comment
175     z=z+foo();
176 end
177 if z<>5 then bugmes();quit;end
178 //bug 1024 non regression test
179 O=[];
180 for n= 1:10;
181     Fx=rand(1,100);
182     Fy=1:100;
183     function [f,g,ind]=cout(x,ind)
184         f1=(1-exp(-x*Fx) - Fy);
185         f= (1/2)*f1*f1';
186         g= x*(Fx.*exp(-x*Fx))*f1';
187     endfunction
188     [fopt,lmopt]=optim(cout,0.4);
189     O=[O fopt];
190 end
191 if size(O,"*")<>10 then bugmes();quit;end
192 // test line count in compiled macros
193 //
194 function a=foo(),a=1,endfunction
195 L=macr2tree(foo);
196 if L(6)<>1 then bugmes();quit;end
197 clear foo
198 function a=foo()
199     a=1,
200 endfunction
201 L=macr2tree(foo);
202 if L(6)<>3 then bugmes();quit;end
203 clear foo
204 function a=foo()//xxcxcx
205     a=1,
206 endfunction
207 L=macr2tree(foo);
208 if L(6)<>3 then bugmes();quit;end
209 clear foo
210 function a=foo(),
211     a=1,
212 endfunction
213 L=macr2tree(foo);
214 if L(6)<>3 then bugmes();quit;end
215 clear foo
216 function a=foo(),a=1//xxcxcx
217     b=2
218 endfunction
219 L=macr2tree(foo);
220 if L(6)<>3 then bugmes();quit;end
221 clear foo
222 function a=foo()
223     a=...
224     sin...
225     (...
226     1...
227     ),
228 endfunction
229 //continuation lines are replaced by a sequence of empty lines followed by the logical line
230 //so the function above is  the same as
231 function a=foo1()
232     a=sin(1),
233 endfunction
234 L=macr2tree(foo);
235 t=L(6)<>7;
236 if foo<>foo1 then bugmes();quit;end
237 clear foo foo1
238 function a=foo(),a=...
239     sin...
240     (...
241     1 ...
242     ),
243 endfunction
244 //continuation lines are replaced by a sequence of empty lines followed by the logical line
245 //foo should be equal to foo1
246 function a=foo1(),a=sin(1),
247 endfunction
248 L=macr2tree(foo);
249 if L(6)<>6  then bugmes();quit;end
250 if foo<>foo1 then bugmes();quit;end