Fix test
[scilab.git] / scilab / modules / integer / tests / nonreg_tests / bug_3842.dia.ref
1 // =============================================================================
2 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 // Copyright (C) 2010 - INRIA - Serge Steer
4 //
5 //  This file is distributed under the same license as the Scilab package.
6 // =============================================================================
7 //
8 // <-- Non-regression test for bug 3842 -->
9 //
10 // <-- Bugzilla URL -->
11 // http://bugzilla.scilab.org/show_bug.cgi?id=3842
12 //
13 // <-- Short Description -->
14 // sum applyed to integer arrys can only procuce results computed using native operations.
15 exec SCI/modules/elementary_functions/tests/unit_tests/prod.tst
16  
17 // =============================================================================
18  
19 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
20  
21 // Copyright (C) 2010 - INRIA - Serge Steer
22  
23 //
24  
25 //  This file is distributed under the same license as the Scilab package.
26  
27 // =============================================================================
28  
29  
30 // <-- CLI SHELL MODE 
31  
32 // prod 
33  
34 //empty matrices
35  
36 T=list(list(),list('native'),list('double'));
37  
38 for typ=T
39   if prod([],typ(:))<>1 then pause,end
40   if prod([],'*',typ(:))<>1 then pause,end
41   if prod([],1,typ(:))<>[] then pause,end
42   if prod([],2,typ(:))<>[] then pause,end
43   if prod([],3,typ(:))<>[] then pause,end
44 end
45  
46  
47 //=======================================================================
48  
49 //float matrices
50  
51 d=[1 10;254 9];
52  
53 T=list(list(),list('native'),list('double'));
54  
55 for typ=T
56   if prod(d,typ(:))<>22860 then pause,end
57   if prod(d,'*',typ(:))<>22860 then pause,end
58   if or(prod(d,1,typ(:))<>[254 90]) then pause,end
59   if or(prod(d,2,typ(:))<>[10;2286]) then pause,end
60   if or(prod(d,3,typ(:))<>d) then pause,end
61 end
62  
63  
64  
65 //hypermatrices of floats
66  
67 d=[1 10;254 9];d(:,:,2)=1;
68  
69 T=list(list(),list('native'),list('double'));
70  
71 for typ=T
72   if prod(d,typ(:))<>22860 then pause,end
73   if prod(d,'*',typ(:))<>22860 then pause,end
74   if or(prod(d,1,typ(:))<>hypermat([1,2,2],[254;90;1;1])) then pause,end
75   if or(prod(d,2,typ(:))<>hypermat([2,1,2],[10;2286;1;1])) then pause,end
76   if or(prod(d,3,typ(:))<>[1,10;254,9]) then pause,end
77   if or(prod(d,5,typ(:))<>d) then pause,end
78 end
79  
80  
81 //=======================================================================
82  
83 //matrices of short integers
84  
85 i=uint8([1 10;254 9]);
86  
87 T=list(list(),list('native'));
88  
89 for typ=T
90   if prod(i,typ(:))<>uint8(76) then pause,end
91   if prod(i,'*',typ(:))<>uint8(76) then pause,end
92   if or(prod(i,1,typ(:))<>uint8([254 90])) then pause,end
93   if or(prod(i,2,typ(:))<>uint8([10;238])) then pause,end
94   if or(prod(i,3,typ(:))<>i) then pause,end
95 end
96  
97  
98 if prod(i,'double')<>22860 then pause,end
99  
100 if prod(i,'*','double')<>22860 then pause,end
101  
102 if or(prod(i,1,'double')<>[254 90]) then pause,end
103  
104 if or(prod(i,2,'double')<>[10;2286]) then pause,end
105  
106 if or(prod(i,3,'double')<>double(i)) then pause,end
107  
108  
109 //with hypermatrices
110  
111 i=uint8([1 10;254 9]);i(:,:,2)=uint8(1);
112  
113 for typ=list(list(),list('native'));
114   if prod(i,typ(:))<>uint8(76) then pause,end
115   if prod(i,'*',typ(:))<>uint8(76) then pause,end
116   if or(prod(i,1,typ(:))<>hypermat([1,2,2],uint8([254;90;1;1]))) then pause,end
117   if or(prod(i,2,typ(:))<>hypermat([2,1,2],uint8([10;238;1;1]))) then pause,end
118   if or(prod(i,3,typ(:))<>([1,10;254,9])) then pause,end
119   if or(prod(i,5,typ(:))<>i) then pause,end
120 end
121  
122  
123 if prod(i,'double')<>22860 then pause,end
124  
125 if prod(i,'*','double')<>22860 then pause,end
126  
127 if or(prod(i,1,'double')<>hypermat([1,2,2],[254;90;1;1])) then pause,end
128  
129 if or(prod(i,2,'double')<>hypermat([2,1,2],[10;2286;1;1])) then pause,end
130  
131 if or(prod(i,3,'double')<>[1,10;254,9]) then pause,end
132  
133 if or(prod(i,5,'double')<>double(i)) then pause,end
134  
135  
136  
137 //Polynomials
138  
139 s=%s;p=[s s+1;s^2 1];
140  
141 T=list(list(),list('native'),list('double'));
142  
143 for typ=T
144   if prod(p,typ(:))<>s^3+s^4 then pause,end
145   if prod(p,'*',typ(:))<>s^3+s^4 then pause,end
146   if or(prod(p,1,typ(:))<>[s^3,1+s]) then pause,end
147   if or(prod(p,2,typ(:))<>[s+s^2;s^2]) then pause,end
148   if or(prod(p,3,typ(:))<>p) then pause,end
149 end
150  
151 //with hypermatrices
152  
153 s=%s;p=[s s+1;s^2 1];p(:,:,2)=[1 s;s+1 2];
154  
155 T=list(list(),list('native'),list('double'));
156  
157 for typ=T
158   if prod(p,typ(:))<>2*s^4+4*s^5+2*s^6 then pause,end
159   if prod(p,'*',typ(:))<>2*s^4+4*s^5+2*s^6 then pause,end
160   if or(prod(p,1,typ(:))<>hypermat([1,2,2],[s^3;1+s;1+s;2*s])) then pause,end
161   if or(prod(p,2,typ(:))<>hypermat([2,1,2],[s+s^2;s^2;s;2+2*s])) then pause,end
162   if or(prod(p,3,typ(:))<>[s,s+s^2;s^2+s^3,2]) then pause,end
163   if or(prod(p,5,typ(:))<>p) then pause,end
164 end
165  
166  
167 //=======================================================================
168  
169 //Matrices of rationals
170  
171 s=%s;r=1.0 ./[s s+1;s^2 1];
172  
173 T=list(list(),list('native'),list('double'));
174  
175 for typ=T
176   if prod(r,typ(:))<>1.0/(s^3+s^4) then pause,end
177   if prod(r,'*',typ(:))<>1.0/(s^3+s^4) then pause,end
178   if or(prod(r,1,typ(:))<>[1,1]./[s^3,1+s]) then pause,end
179   if or(prod(r,2,typ(:))<>[1;1]./[s+s^2;s^2]) then pause,end
180   if or(prod(r,3,typ(:))<>r) then pause,end
181 end
182  
183  
184 //=======================================================================
185  
186 //Matrices of booleans
187  
188 b=[%t %t; %f %t];
189  
190 for typ=list(list(),list('double'));
191   if prod(b,typ(:))<>0 then pause,end
192   if prod(b,'*',typ(:))<>0 then pause,end
193   if or(prod(b,1,typ(:))<>[0 1]) then pause,end
194   if or(prod(b,2,typ(:))<>[1;0]) then pause,end
195   if or(prod(b,3,typ(:))<>double(b)) then pause,end
196 end
197  
198  
199 if prod(b,'native')<>%f then pause,end
200  
201 if prod(b,'*','native')<>%f then pause,end
202  
203 if or(prod(b,1,'native')<>[%f %t]) then pause,end
204  
205 if or(prod(b,2,'native')<>[%t;%f]) then pause,end
206  
207 if or(prod(b,3,'native')<>b) then pause,end
208  
209 //with hypermatrices 
210  
211  
212 b=[%t %t;%f %t];b(1,1,2)=%t;
213  
214 for typ=list(list(),list('double'));
215   if prod(b,typ(:))<>0 then pause,end
216   if prod(b,'*',typ(:))<>0 then pause,end
217   if or(prod(b,1,typ(:))<>hypermat([1,2,2],[0;1;0;0])) then pause,end
218   if or(prod(b,2,typ(:))<>hypermat([2,1,2],[1;0;0;0])) then pause,end
219   if or(prod(b,3,typ(:))<>[1,0;0,0]) then pause,end
220   if or(prod(b,5,typ(:))<>double(b)) then pause,end
221 end
222  
223  
224 if prod(b,'native')<>%f then pause,end
225  
226 if prod(b,'*','native')<>%f then pause,end
227  
228 if or(prod(b,1,'native')<>hypermat([1,2,2],[%f;%t;%f;%f])) then pause,end
229  
230 if or(prod(b,2,'native')<>hypermat([2,1,2],[%t;%f;%f;%f])) then pause,end
231  
232 if or(prod(b,3,'native')<>[%t,%f;%f,%f]) then pause,end
233  
234 if or(prod(b,5,'native')<>b) then pause,end
235  
236 //=======================================================================
237  
238 //sparse matrices of floats
239  
240 s=sparse([1 10 2;-1 254 9]);
241  
242 T=list(list(),list('native'),list('double'));
243  
244 for typ=T
245   if prod(s,typ(:))<>-45720 then pause,end
246   if prod(s,'*',typ(:))<>-45720 then pause,end
247   if or(prod(s,1,typ(:))<>sparse([-1 2540 18])) then pause,end
248   if or(prod(s,2,typ(:))<>sparse([20;-2286])) then pause,end
249   if or(prod(s,3,typ(:))<>s) then pause,end
250 end
251  
252  
253 //=======================================================================
254  
255 //sparse  matrices of boolean
256  
257 bs=sparse([%t %t %f;%t %t %t]);
258  
259 for typ=list(list(),list('double'));
260   if prod(bs,typ(:))<>0 then pause,end
261   if prod(bs,'*',typ(:))<>0 then pause,end
262   if or(prod(bs,1,typ(:))<>sparse([1,1,0])) then pause,end
263   if or(prod(bs,2,typ(:))<>sparse([0;1])) then pause,end
264   if or(prod(bs,3,typ(:))<>bool2s(bs)) then pause,end
265 end
266  
267  
268 if prod(bs,'native')<>%f then pause,end
269  
270 if prod(bs,'*','native')<>%f then pause,end
271  
272 if or(prod(bs,1,'native')<>sparse([%t,%t,%f])) then pause,end
273  
274 if or(prod(bs,2,'native')<>sparse([%f;%t])) then pause,end
275  
276 if or(prod(bs,3,'native')<>bs) then pause,end
277  
278  
279 // TODO : test the "m" option
280  
281 exec SCI/modules/elementary_functions/tests/unit_tests/cumprod.tst
282  
283 // =============================================================================
284  
285 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
286  
287 // Copyright (C) 2010 - INRIA - Serge Steer
288  
289 // Copyright (C) 2012 - Scilab Enterprises - Cedric Delamarre
290  
291 //
292  
293 //  This file is distributed under the same license as the Scilab package.
294  
295 // =============================================================================
296  
297  
298 // <-- CLI SHELL MODE 
299  
300  
301 //cumprod
302  
303 //Empty matrices
304  
305 T=list(list(),list('native'),list('double'));
306  
307 for typ=T
308   assert_checkequal(cumprod([],typ(:)), []);
309   assert_checkequal(cumprod([],'*',typ(:)), []);
310   assert_checkequal(cumprod([],1,typ(:)), []);
311   assert_checkequal(cumprod([],2,typ(:)), []);
312   assert_checkequal(cumprod([],3,typ(:)), []);
313 end
314  
315  
316 //=======================================================================
317  
318 //float matrices
319  
320 d=[1 10;254 9];
321  
322 T=list(list(),list('native'),list('double'));
323  
324 for typ=T
325   assert_checkequal(cumprod(d,typ(:)), [1,2540;254,22860]);
326   assert_checkequal(cumprod(d,'*',typ(:)), [1,2540;254,22860]);
327   assert_checkequal(cumprod(d,1,typ(:)), [1,10;254,90]);
328   assert_checkequal(cumprod(d,2,typ(:)), [1,10;254,2286]);
329   assert_checkequal(cumprod(d,3,typ(:)), d);
330 end
331  
332  
333 //hypermatrices of floats
334  
335 d=[1 10;254 9];d(1,1,2)=1;
336  
337 T=list(list(),list('native'),list('double'));
338  
339 for typ=T
340   assert_checkequal(cumprod(d,typ(:)), hypermat([2,2,2],[1;254;2540;22860;22860;0;0;0]));
341   assert_checkequal(cumprod(d,'*',typ(:)), hypermat([2,2,2],[1;254;2540;22860;22860;0;0;0]));
342   assert_checkequal(cumprod(d,1,typ(:)), hypermat([2,2,2],[1;254;10;90;1;0;0;0]));
343   assert_checkequal(cumprod(d,2,typ(:)), hypermat([2,2,2],[1;254;10;2286;1;0;0;0]));
344   assert_checkequal(cumprod(d,3,typ(:)), hypermat([2,2,2],[1;254;10;9;1;0;0;0]));
345   assert_checkequal(cumprod(d,5,typ(:)), d);
346 end
347  
348  
349 //=======================================================================
350  
351 //Integers
352  
353 i=uint8([1 10;254 9]);
354  
355 for typ=list(list(),list('native'));
356   assert_checkequal(cumprod(i,typ(:)), uint8([1,236;254,76]));
357   assert_checkequal(cumprod(i,'*',typ(:)), uint8([1,236;254,76]));
358   assert_checkequal(cumprod(i,1,typ(:)), uint8([1,10;254,90]));
359   assert_checkequal(cumprod(i,2,typ(:)), uint8([1,10;254,238]));
360   assert_checkequal(cumprod(i,3,typ(:)), double(i));
361 end
362  
363  
364 assert_checkequal(cumprod(i,'double'), [1,2540;254,22860]);
365  
366 assert_checkequal(cumprod(i,'*','double'), [1,2540;254,22860]);
367  
368 assert_checkequal(cumprod(i,1,'double'), [1,10;254,90]);
369  
370 assert_checkequal(cumprod(i,2,'double'), [1,10;254,2286]);
371  
372 assert_checkequal(cumprod(i,3,'double'), double(i));
373  
374  
375 //with hypermatrices
376  
377 i=uint8([1 10;254 9]);i(1,1,2)=uint8(1);
378  
379 for typ=list(list(),list('native'));
380   assert_checkequal(cumprod(i,typ(:)), hypermat([2,2,2],uint8([1;254;236;76;76;0;0;0])));
381   assert_checkequal(cumprod(i,'*',typ(:)), hypermat([2,2,2],uint8([1;254;236;76;76;0;0;0])));
382   assert_checkequal(cumprod(i,1,typ(:)), hypermat([2,2,2],uint8([1;254;10;90;1;0;0;0])));
383   assert_checkequal(cumprod(i,2,typ(:)), hypermat([2,2,2],uint8([1;254;10;238;1;0;0;0])));
384   assert_checkequal(cumprod(i,3,typ(:)), hypermat([2,2,2],uint8([1;254;10;9;1;0;0;0])));
385   assert_checkequal(cumprod(i,5,typ(:)), double(i));
386 end
387  
388  
389  
390 assert_checkequal(cumprod(i,'double'), hypermat([2,2,2],[1;254;2540;22860;22860;0;0;0]));
391  
392 assert_checkequal(cumprod(i,'*','double'), hypermat([2,2,2],[1;254;2540;22860;22860;0;0;0]));
393  
394 assert_checkequal(cumprod(i,1,'double'), hypermat([2,2,2],[1;254;10;90;1;0;0;0]));
395  
396 assert_checkequal(cumprod(i,2,'double'), hypermat([2,2,2],[1;254;10;2286;1;0;0;0]));
397  
398 assert_checkequal(cumprod(i,3,'double'), hypermat([2,2,2],[1;254;10;9;1;0;0;0]));
399  
400 assert_checkequal(cumprod(i,5,'double'), double(i));
401  
402  
403 //=======================================================================
404  
405 //Matrices of Polynomials
406  
407 s=%s;p=[s s+1;s^2 0];
408  
409 T=list(list(),list('native'),list('double'));
410  
411 for typ=T
412   assert_checkequal(cumprod(p,typ(:)), [s,s^3+s^4;s^3,0*s]);
413   assert_checkequal(cumprod(p,'*',typ(:)), [s,s^3+s^4;s^3,0*s]);
414   assert_checkequal(cumprod(p,1,typ(:)), [s,1+s;s^3,0*s]);
415   assert_checkequal(cumprod(p,2,typ(:)), [s,s+s^2;s^2,0*s]);
416   assert_checkequal(cumprod(p,3,typ(:)), p);
417 end
418  
419  
420 //with hypermatrices
421  
422 s=%s;p=[s s+1;s^2 0];p(1,1,2)=-1;
423  
424 T=list(list(),list('native'),list('double'));
425  
426 for typ=T
427   assert_checkequal(cumprod(p,typ(:)), hypermat([2,2,2],[s;s^3;s^3+s^4;0*s;0*s;0*s;0*s;0*s]));
428   assert_checkequal(cumprod(p,'*',typ(:)), hypermat([2,2,2],[s;s^3;s^3+s^4;0*s;0*s;0*s;0*s;0*s]));
429   assert_checkequal(cumprod(p,1,typ(:)), hypermat([2,2,2],[s;s^3;1+s;0*s;-1;0*s;0*s;0*s]));
430   assert_checkequal(cumprod(p,2,typ(:)), hypermat([2,2,2],[s;s^2;s+s^2;0*s;-1;0*s;0*s;0*s]));
431   assert_checkequal(cumprod(p,3,typ(:)), hypermat([2,2,2],[s;s^2;1+s;0*s;-s;0*s;0*s;0*s]));
432   assert_checkequal(cumprod(p,5,typ(:)), p);
433 end
434  
435 //=======================================================================
436  
437 //Matrices of rationals
438  
439 s=%s;r=1.0 ./[s s+1;s^2 1];
440  
441 T=list(list(),list('native'),list('double'));
442  
443 for typ=T
444   assert_checkequal(cumprod(r,typ(:)), [1,1;1,1]./[s,s^3+s^4;s^3,s^3+s^4]);
445   assert_checkequal(cumprod(r,'*',typ(:)), [1,1;1,1]./[s,s^3+s^4;s^3,s^3+s^4]);
446   assert_checkequal(cumprod(r,1,typ(:)), [1,1;1,1]./[s,1+s;s^3,1+s]);
447   assert_checkequal(cumprod(r,2,typ(:)), [1,1;1,1]./[s,s+s^2;s^2,s^2]);
448   assert_checkequal(cumprod(r,3,typ(:)), r);
449 end
450  
451  
452 //=======================================================================
453  
454 ///Matrices of boolean
455  
456  
457 b=[%t %t;%f %t];
458  
459 for typ=list(list(),list('double'));
460   assert_checkequal(cumprod(b,typ(:)), [1,0;0,0]);
461   assert_checkequal(cumprod(b,'*',typ(:)), [1,0;0,0]);
462   assert_checkequal(cumprod(b,1,typ(:)), [1,1;0,1]);
463   assert_checkequal(cumprod(b,2,typ(:)), [1,1;0,0]);
464   assert_checkequal(cumprod(b,3,typ(:)), double(b));
465 end
466  
467 assert_checkequal(cumprod(b,'native'), [%t,%f;%f,%f]);
468  
469 assert_checkequal(cumprod(b,'*','native'), [%t,%f;%f,%f]);
470  
471 assert_checkequal(cumprod(b,1,'native'), [%t,%t;%f,%t]);
472  
473 assert_checkequal(cumprod(b,2,'native'), [%t,%t;%f,%f]);
474  
475 assert_checkequal(cumprod(b,3,'native'), b);
476  
477  
478 //with hypermatrices
479  
480 b=[%t %t;%f %t];b(1,1,2)=%f;
481  
482 for typ=list(list(),list('double'));
483   assert_checkequal(cumprod(b,typ(:)), hypermat([2,2,2],[1;0;0;0;0;0;0;0]));
484   assert_checkequal(cumprod(b,'*',typ(:)), hypermat([2,2,2],[1;0;0;0;0;0;0;0]));
485   assert_checkequal(cumprod(b,1,typ(:)), hypermat([2,2,2],[1;0;1;1;0;0;0;0]));
486   assert_checkequal(cumprod(b,2,typ(:)), hypermat([2,2,2],[1;0;1;0;0;0;0;0]));
487   assert_checkequal(cumprod(b,3,typ(:)), hypermat([2,2,2],[1;0;1;1;0;0;0;0]));
488   assert_checkequal(cumprod(b,5,typ(:)), double(b));
489 end
490  
491  
492 assert_checkequal(cumprod(b,'native'), hypermat([2,2,2],[%t;%f;%f;%f;%f;%f;%f;%f]));
493  
494 assert_checkequal(cumprod(b,'*','native'), hypermat([2,2,2],[%t;%f;%f;%f;%f;%f;%f;%f]));
495  
496 assert_checkequal(cumprod(b,1,'native'), hypermat([2,2,2],[%t;%f;%t;%t;%f;%f;%f;%f]));
497  
498 assert_checkequal(cumprod(b,2,'native'), hypermat([2,2,2],[%t;%f;%t;%f;%f;%f;%f;%f]));
499  
500 assert_checkequal(cumprod(b,3,'native'), hypermat([2,2,2],[%t;%f;%t;%t;%f;%f;%f;%f]));
501  
502 assert_checkequal(cumprod(b,5,'native'), b);
503  
504  
505 //=======================================================================
506  
507 //sparse matrices of floats
508  
509 s=sparse([1 10 0;-1 0 9]);
510  
511 T=list(list(),list('native'),list('double'));
512  
513 for typ=T
514   assert_checkequal(cumprod(s,typ(:)), sparse([1,1;1,2;2,1],[1;-10;-1],[2,3]));
515   assert_checkequal(cumprod(s,'*',typ(:)), sparse([1,1;1,2;2,1],[1;-10;-1],[2,3]));
516   assert_checkequal(cumprod(s,1,typ(:)), sparse([1,1;1,2;2,1],[1;10;-1],[2,3]));
517   assert_checkequal(cumprod(s,2,typ(:)), sparse([1,1;1,2;2,1],[1;10;-1],[2,3]));
518   assert_checkequal(cumprod(s,3,typ(:)), s);
519 end
520  
521  
522 //=======================================================================
523  
524 //sparse  matrices of boolean
525  
526 bs=sparse([%t %t %f;%t %t %t]);
527  
528 for typ=list(list(),list('double'));
529   assert_checkequal(cumprod(bs,typ(:)), sparse([1,1;1,2;2,1;2,2],[1;1;1;1],[2,3]));
530   assert_checkequal(cumprod(bs,'*',typ(:)), sparse([1,1;1,2;2,1;2,2],[1;1;1;1],[2,3]));
531   assert_checkequal(cumprod(bs,1,typ(:)), sparse([1,1;1,2;2,1;2,2],[1;1;1;1],[2,3]));
532   assert_checkequal(cumprod(bs,2,typ(:)), sparse([1,1;1,2;2,1;2,2;2,3],[1;1;1;1;1],[2,3]));
533   assert_checkequal(cumprod(bs,3,typ(:)), bool2s(bs));
534 end
535  
536  
537 assert_checkequal(cumprod(bs,'native'), sparse([1,1;1,2;2,1;2,2],[%t;%t;%t;%t],[2,3]));
538  
539 assert_checkequal(cumprod(bs,'*','native'), sparse([1,1;1,2;2,1;2,2],[%t;%t;%t;%t],[2,3]));
540  
541  
542 assert_checkequal(cumprod(bs,1,'native'), sparse([1,1;1,2;2,1;2,2],[%t;%t;%t;%t],[2,3]));
543  
544 assert_checkequal(cumprod(bs,2,'native'), sparse([1,1;1,2;2,1;2,2;2,3],[%t;%t;%t;%t;%t],[2,3]));
545  
546 assert_checkequal(cumprod(bs,3,'native'), bs);
547  
548  
549 // TODO : test the "m" option
550  
551 exec SCI/modules/elementary_functions/tests/unit_tests/prod.tst
552  
553 // =============================================================================
554  
555 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
556  
557 // Copyright (C) 2010 - INRIA - Serge Steer
558  
559 //
560  
561 //  This file is distributed under the same license as the Scilab package.
562  
563 // =============================================================================
564  
565  
566 // <-- CLI SHELL MODE 
567  
568 // prod 
569  
570 //empty matrices
571  
572 T=list(list(),list('native'),list('double'));
573  
574 for typ=T
575   if prod([],typ(:))<>1 then pause,end
576   if prod([],'*',typ(:))<>1 then pause,end
577   if prod([],1,typ(:))<>[] then pause,end
578   if prod([],2,typ(:))<>[] then pause,end
579   if prod([],3,typ(:))<>[] then pause,end
580 end
581  
582  
583 //=======================================================================
584  
585 //float matrices
586  
587 d=[1 10;254 9];
588  
589 T=list(list(),list('native'),list('double'));
590  
591 for typ=T
592   if prod(d,typ(:))<>22860 then pause,end
593   if prod(d,'*',typ(:))<>22860 then pause,end
594   if or(prod(d,1,typ(:))<>[254 90]) then pause,end
595   if or(prod(d,2,typ(:))<>[10;2286]) then pause,end
596   if or(prod(d,3,typ(:))<>d) then pause,end
597 end
598  
599  
600  
601 //hypermatrices of floats
602  
603 d=[1 10;254 9];d(:,:,2)=1;
604  
605 T=list(list(),list('native'),list('double'));
606  
607 for typ=T
608   if prod(d,typ(:))<>22860 then pause,end
609   if prod(d,'*',typ(:))<>22860 then pause,end
610   if or(prod(d,1,typ(:))<>hypermat([1,2,2],[254;90;1;1])) then pause,end
611   if or(prod(d,2,typ(:))<>hypermat([2,1,2],[10;2286;1;1])) then pause,end
612   if or(prod(d,3,typ(:))<>[1,10;254,9]) then pause,end
613   if or(prod(d,5,typ(:))<>d) then pause,end
614 end
615  
616  
617 //=======================================================================
618  
619 //matrices of short integers
620  
621 i=uint8([1 10;254 9]);
622  
623 T=list(list(),list('native'));
624  
625 for typ=T
626   if prod(i,typ(:))<>uint8(76) then pause,end
627   if prod(i,'*',typ(:))<>uint8(76) then pause,end
628   if or(prod(i,1,typ(:))<>uint8([254 90])) then pause,end
629   if or(prod(i,2,typ(:))<>uint8([10;238])) then pause,end
630   if or(prod(i,3,typ(:))<>i) then pause,end
631 end
632  
633  
634 if prod(i,'double')<>22860 then pause,end
635  
636 if prod(i,'*','double')<>22860 then pause,end
637  
638 if or(prod(i,1,'double')<>[254 90]) then pause,end
639  
640 if or(prod(i,2,'double')<>[10;2286]) then pause,end
641  
642 if or(prod(i,3,'double')<>double(i)) then pause,end
643  
644  
645 //with hypermatrices
646  
647 i=uint8([1 10;254 9]);i(:,:,2)=uint8(1);
648  
649 for typ=list(list(),list('native'));
650   if prod(i,typ(:))<>uint8(76) then pause,end
651   if prod(i,'*',typ(:))<>uint8(76) then pause,end
652   if or(prod(i,1,typ(:))<>hypermat([1,2,2],uint8([254;90;1;1]))) then pause,end
653   if or(prod(i,2,typ(:))<>hypermat([2,1,2],uint8([10;238;1;1]))) then pause,end
654   if or(prod(i,3,typ(:))<>([1,10;254,9])) then pause,end
655   if or(prod(i,5,typ(:))<>i) then pause,end
656 end
657  
658  
659 if prod(i,'double')<>22860 then pause,end
660  
661 if prod(i,'*','double')<>22860 then pause,end
662  
663 if or(prod(i,1,'double')<>hypermat([1,2,2],[254;90;1;1])) then pause,end
664  
665 if or(prod(i,2,'double')<>hypermat([2,1,2],[10;2286;1;1])) then pause,end
666  
667 if or(prod(i,3,'double')<>[1,10;254,9]) then pause,end
668  
669 if or(prod(i,5,'double')<>double(i)) then pause,end
670  
671  
672  
673 //Polynomials
674  
675 s=%s;p=[s s+1;s^2 1];
676  
677 T=list(list(),list('native'),list('double'));
678  
679 for typ=T
680   if prod(p,typ(:))<>s^3+s^4 then pause,end
681   if prod(p,'*',typ(:))<>s^3+s^4 then pause,end
682   if or(prod(p,1,typ(:))<>[s^3,1+s]) then pause,end
683   if or(prod(p,2,typ(:))<>[s+s^2;s^2]) then pause,end
684   if or(prod(p,3,typ(:))<>p) then pause,end
685 end
686  
687 //with hypermatrices
688  
689 s=%s;p=[s s+1;s^2 1];p(:,:,2)=[1 s;s+1 2];
690  
691 T=list(list(),list('native'),list('double'));
692  
693 for typ=T
694   if prod(p,typ(:))<>2*s^4+4*s^5+2*s^6 then pause,end
695   if prod(p,'*',typ(:))<>2*s^4+4*s^5+2*s^6 then pause,end
696   if or(prod(p,1,typ(:))<>hypermat([1,2,2],[s^3;1+s;1+s;2*s])) then pause,end
697   if or(prod(p,2,typ(:))<>hypermat([2,1,2],[s+s^2;s^2;s;2+2*s])) then pause,end
698   if or(prod(p,3,typ(:))<>[s,s+s^2;s^2+s^3,2]) then pause,end
699   if or(prod(p,5,typ(:))<>p) then pause,end
700 end
701  
702  
703 //=======================================================================
704  
705 //Matrices of rationals
706  
707 s=%s;r=1.0 ./[s s+1;s^2 1];
708  
709 T=list(list(),list('native'),list('double'));
710  
711 for typ=T
712   if prod(r,typ(:))<>1.0/(s^3+s^4) then pause,end
713   if prod(r,'*',typ(:))<>1.0/(s^3+s^4) then pause,end
714   if or(prod(r,1,typ(:))<>[1,1]./[s^3,1+s]) then pause,end
715   if or(prod(r,2,typ(:))<>[1;1]./[s+s^2;s^2]) then pause,end
716   if or(prod(r,3,typ(:))<>r) then pause,end
717 end
718  
719  
720 //=======================================================================
721  
722 //Matrices of booleans
723  
724 b=[%t %t; %f %t];
725  
726 for typ=list(list(),list('double'));
727   if prod(b,typ(:))<>0 then pause,end
728   if prod(b,'*',typ(:))<>0 then pause,end
729   if or(prod(b,1,typ(:))<>[0 1]) then pause,end
730   if or(prod(b,2,typ(:))<>[1;0]) then pause,end
731   if or(prod(b,3,typ(:))<>double(b)) then pause,end
732 end
733  
734  
735 if prod(b,'native')<>%f then pause,end
736  
737 if prod(b,'*','native')<>%f then pause,end
738  
739 if or(prod(b,1,'native')<>[%f %t]) then pause,end
740  
741 if or(prod(b,2,'native')<>[%t;%f]) then pause,end
742  
743 if or(prod(b,3,'native')<>b) then pause,end
744  
745 //with hypermatrices 
746  
747  
748 b=[%t %t;%f %t];b(1,1,2)=%t;
749  
750 for typ=list(list(),list('double'));
751   if prod(b,typ(:))<>0 then pause,end
752   if prod(b,'*',typ(:))<>0 then pause,end
753   if or(prod(b,1,typ(:))<>hypermat([1,2,2],[0;1;0;0])) then pause,end
754   if or(prod(b,2,typ(:))<>hypermat([2,1,2],[1;0;0;0])) then pause,end
755   if or(prod(b,3,typ(:))<>[1,0;0,0]) then pause,end
756   if or(prod(b,5,typ(:))<>double(b)) then pause,end
757 end
758  
759  
760 if prod(b,'native')<>%f then pause,end
761  
762 if prod(b,'*','native')<>%f then pause,end
763  
764 if or(prod(b,1,'native')<>hypermat([1,2,2],[%f;%t;%f;%f])) then pause,end
765  
766 if or(prod(b,2,'native')<>hypermat([2,1,2],[%t;%f;%f;%f])) then pause,end
767  
768 if or(prod(b,3,'native')<>[%t,%f;%f,%f]) then pause,end
769  
770 if or(prod(b,5,'native')<>b) then pause,end
771  
772 //=======================================================================
773  
774 //sparse matrices of floats
775  
776 s=sparse([1 10 2;-1 254 9]);
777  
778 T=list(list(),list('native'),list('double'));
779  
780 for typ=T
781   if prod(s,typ(:))<>-45720 then pause,end
782   if prod(s,'*',typ(:))<>-45720 then pause,end
783   if or(prod(s,1,typ(:))<>sparse([-1 2540 18])) then pause,end
784   if or(prod(s,2,typ(:))<>sparse([20;-2286])) then pause,end
785   if or(prod(s,3,typ(:))<>s) then pause,end
786 end
787  
788  
789 //=======================================================================
790  
791 //sparse  matrices of boolean
792  
793 bs=sparse([%t %t %f;%t %t %t]);
794  
795 for typ=list(list(),list('double'));
796   if prod(bs,typ(:))<>0 then pause,end
797   if prod(bs,'*',typ(:))<>0 then pause,end
798   if or(prod(bs,1,typ(:))<>sparse([1,1,0])) then pause,end
799   if or(prod(bs,2,typ(:))<>sparse([0;1])) then pause,end
800   if or(prod(bs,3,typ(:))<>bool2s(bs)) then pause,end
801 end
802  
803  
804 if prod(bs,'native')<>%f then pause,end
805  
806 if prod(bs,'*','native')<>%f then pause,end
807  
808 if or(prod(bs,1,'native')<>sparse([%t,%t,%f])) then pause,end
809  
810 if or(prod(bs,2,'native')<>sparse([%f;%t])) then pause,end
811  
812 if or(prod(bs,3,'native')<>bs) then pause,end
813  
814  
815 // TODO : test the "m" option
816  
817 exec SCI/modules/elementary_functions/tests/unit_tests/cumprod.tst
818  
819 // =============================================================================
820  
821 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
822  
823 // Copyright (C) 2010 - INRIA - Serge Steer
824  
825 // Copyright (C) 2012 - Scilab Enterprises - Cedric Delamarre
826  
827 //
828  
829 //  This file is distributed under the same license as the Scilab package.
830  
831 // =============================================================================
832  
833  
834 // <-- CLI SHELL MODE 
835  
836  
837 //cumprod
838  
839 //Empty matrices
840  
841 T=list(list(),list('native'),list('double'));
842  
843 for typ=T
844   assert_checkequal(cumprod([],typ(:)), []);
845   assert_checkequal(cumprod([],'*',typ(:)), []);
846   assert_checkequal(cumprod([],1,typ(:)), []);
847   assert_checkequal(cumprod([],2,typ(:)), []);
848   assert_checkequal(cumprod([],3,typ(:)), []);
849 end
850  
851  
852 //=======================================================================
853  
854 //float matrices
855  
856 d=[1 10;254 9];
857  
858 T=list(list(),list('native'),list('double'));
859  
860 for typ=T
861   assert_checkequal(cumprod(d,typ(:)), [1,2540;254,22860]);
862   assert_checkequal(cumprod(d,'*',typ(:)), [1,2540;254,22860]);
863   assert_checkequal(cumprod(d,1,typ(:)), [1,10;254,90]);
864   assert_checkequal(cumprod(d,2,typ(:)), [1,10;254,2286]);
865   assert_checkequal(cumprod(d,3,typ(:)), d);
866 end
867  
868  
869 //hypermatrices of floats
870  
871 d=[1 10;254 9];d(1,1,2)=1;
872  
873 T=list(list(),list('native'),list('double'));
874  
875 for typ=T
876   assert_checkequal(cumprod(d,typ(:)), hypermat([2,2,2],[1;254;2540;22860;22860;0;0;0]));
877   assert_checkequal(cumprod(d,'*',typ(:)), hypermat([2,2,2],[1;254;2540;22860;22860;0;0;0]));
878   assert_checkequal(cumprod(d,1,typ(:)), hypermat([2,2,2],[1;254;10;90;1;0;0;0]));
879   assert_checkequal(cumprod(d,2,typ(:)), hypermat([2,2,2],[1;254;10;2286;1;0;0;0]));
880   assert_checkequal(cumprod(d,3,typ(:)), hypermat([2,2,2],[1;254;10;9;1;0;0;0]));
881   assert_checkequal(cumprod(d,5,typ(:)), d);
882 end
883  
884  
885 //=======================================================================
886  
887 //Integers
888  
889 i=uint8([1 10;254 9]);
890  
891 for typ=list(list(),list('native'));
892   assert_checkequal(cumprod(i,typ(:)), uint8([1,236;254,76]));
893   assert_checkequal(cumprod(i,'*',typ(:)), uint8([1,236;254,76]));
894   assert_checkequal(cumprod(i,1,typ(:)), uint8([1,10;254,90]));
895   assert_checkequal(cumprod(i,2,typ(:)), uint8([1,10;254,238]));
896   assert_checkequal(cumprod(i,3,typ(:)), double(i));
897 end
898  
899  
900 assert_checkequal(cumprod(i,'double'), [1,2540;254,22860]);
901  
902 assert_checkequal(cumprod(i,'*','double'), [1,2540;254,22860]);
903  
904 assert_checkequal(cumprod(i,1,'double'), [1,10;254,90]);
905  
906 assert_checkequal(cumprod(i,2,'double'), [1,10;254,2286]);
907  
908 assert_checkequal(cumprod(i,3,'double'), double(i));
909  
910  
911 //with hypermatrices
912  
913 i=uint8([1 10;254 9]);i(1,1,2)=uint8(1);
914  
915 for typ=list(list(),list('native'));
916   assert_checkequal(cumprod(i,typ(:)), hypermat([2,2,2],uint8([1;254;236;76;76;0;0;0])));
917   assert_checkequal(cumprod(i,'*',typ(:)), hypermat([2,2,2],uint8([1;254;236;76;76;0;0;0])));
918   assert_checkequal(cumprod(i,1,typ(:)), hypermat([2,2,2],uint8([1;254;10;90;1;0;0;0])));
919   assert_checkequal(cumprod(i,2,typ(:)), hypermat([2,2,2],uint8([1;254;10;238;1;0;0;0])));
920   assert_checkequal(cumprod(i,3,typ(:)), hypermat([2,2,2],uint8([1;254;10;9;1;0;0;0])));
921   assert_checkequal(cumprod(i,5,typ(:)), double(i));
922 end
923  
924  
925  
926 assert_checkequal(cumprod(i,'double'), hypermat([2,2,2],[1;254;2540;22860;22860;0;0;0]));
927  
928 assert_checkequal(cumprod(i,'*','double'), hypermat([2,2,2],[1;254;2540;22860;22860;0;0;0]));
929  
930 assert_checkequal(cumprod(i,1,'double'), hypermat([2,2,2],[1;254;10;90;1;0;0;0]));
931  
932 assert_checkequal(cumprod(i,2,'double'), hypermat([2,2,2],[1;254;10;2286;1;0;0;0]));
933  
934 assert_checkequal(cumprod(i,3,'double'), hypermat([2,2,2],[1;254;10;9;1;0;0;0]));
935  
936 assert_checkequal(cumprod(i,5,'double'), double(i));
937  
938  
939 //=======================================================================
940  
941 //Matrices of Polynomials
942  
943 s=%s;p=[s s+1;s^2 0];
944  
945 T=list(list(),list('native'),list('double'));
946  
947 for typ=T
948   assert_checkequal(cumprod(p,typ(:)), [s,s^3+s^4;s^3,0*s]);
949   assert_checkequal(cumprod(p,'*',typ(:)), [s,s^3+s^4;s^3,0*s]);
950   assert_checkequal(cumprod(p,1,typ(:)), [s,1+s;s^3,0*s]);
951   assert_checkequal(cumprod(p,2,typ(:)), [s,s+s^2;s^2,0*s]);
952   assert_checkequal(cumprod(p,3,typ(:)), p);
953 end
954  
955  
956 //with hypermatrices
957  
958 s=%s;p=[s s+1;s^2 0];p(1,1,2)=-1;
959  
960 T=list(list(),list('native'),list('double'));
961  
962 for typ=T
963   assert_checkequal(cumprod(p,typ(:)), hypermat([2,2,2],[s;s^3;s^3+s^4;0*s;0*s;0*s;0*s;0*s]));
964   assert_checkequal(cumprod(p,'*',typ(:)), hypermat([2,2,2],[s;s^3;s^3+s^4;0*s;0*s;0*s;0*s;0*s]));
965   assert_checkequal(cumprod(p,1,typ(:)), hypermat([2,2,2],[s;s^3;1+s;0*s;-1;0*s;0*s;0*s]));
966   assert_checkequal(cumprod(p,2,typ(:)), hypermat([2,2,2],[s;s^2;s+s^2;0*s;-1;0*s;0*s;0*s]));
967   assert_checkequal(cumprod(p,3,typ(:)), hypermat([2,2,2],[s;s^2;1+s;0*s;-s;0*s;0*s;0*s]));
968   assert_checkequal(cumprod(p,5,typ(:)), p);
969 end
970  
971 //=======================================================================
972  
973 //Matrices of rationals
974  
975 s=%s;r=1.0 ./[s s+1;s^2 1];
976  
977 T=list(list(),list('native'),list('double'));
978  
979 for typ=T
980   assert_checkequal(cumprod(r,typ(:)), [1,1;1,1]./[s,s^3+s^4;s^3,s^3+s^4]);
981   assert_checkequal(cumprod(r,'*',typ(:)), [1,1;1,1]./[s,s^3+s^4;s^3,s^3+s^4]);
982   assert_checkequal(cumprod(r,1,typ(:)), [1,1;1,1]./[s,1+s;s^3,1+s]);
983   assert_checkequal(cumprod(r,2,typ(:)), [1,1;1,1]./[s,s+s^2;s^2,s^2]);
984   assert_checkequal(cumprod(r,3,typ(:)), r);
985 end
986  
987  
988 //=======================================================================
989  
990 ///Matrices of boolean
991  
992  
993 b=[%t %t;%f %t];
994  
995 for typ=list(list(),list('double'));
996   assert_checkequal(cumprod(b,typ(:)), [1,0;0,0]);
997   assert_checkequal(cumprod(b,'*',typ(:)), [1,0;0,0]);
998   assert_checkequal(cumprod(b,1,typ(:)), [1,1;0,1]);
999   assert_checkequal(cumprod(b,2,typ(:)), [1,1;0,0]);
1000   assert_checkequal(cumprod(b,3,typ(:)), double(b));
1001 end
1002  
1003 assert_checkequal(cumprod(b,'native'), [%t,%f;%f,%f]);
1004  
1005 assert_checkequal(cumprod(b,'*','native'), [%t,%f;%f,%f]);
1006  
1007 assert_checkequal(cumprod(b,1,'native'), [%t,%t;%f,%t]);
1008  
1009 assert_checkequal(cumprod(b,2,'native'), [%t,%t;%f,%f]);
1010  
1011 assert_checkequal(cumprod(b,3,'native'), b);
1012  
1013  
1014 //with hypermatrices
1015  
1016 b=[%t %t;%f %t];b(1,1,2)=%f;
1017  
1018 for typ=list(list(),list('double'));
1019   assert_checkequal(cumprod(b,typ(:)), hypermat([2,2,2],[1;0;0;0;0;0;0;0]));
1020   assert_checkequal(cumprod(b,'*',typ(:)), hypermat([2,2,2],[1;0;0;0;0;0;0;0]));
1021   assert_checkequal(cumprod(b,1,typ(:)), hypermat([2,2,2],[1;0;1;1;0;0;0;0]));
1022   assert_checkequal(cumprod(b,2,typ(:)), hypermat([2,2,2],[1;0;1;0;0;0;0;0]));
1023   assert_checkequal(cumprod(b,3,typ(:)), hypermat([2,2,2],[1;0;1;1;0;0;0;0]));
1024   assert_checkequal(cumprod(b,5,typ(:)), double(b));
1025 end
1026  
1027  
1028 assert_checkequal(cumprod(b,'native'), hypermat([2,2,2],[%t;%f;%f;%f;%f;%f;%f;%f]));
1029  
1030 assert_checkequal(cumprod(b,'*','native'), hypermat([2,2,2],[%t;%f;%f;%f;%f;%f;%f;%f]));
1031  
1032 assert_checkequal(cumprod(b,1,'native'), hypermat([2,2,2],[%t;%f;%t;%t;%f;%f;%f;%f]));
1033  
1034 assert_checkequal(cumprod(b,2,'native'), hypermat([2,2,2],[%t;%f;%t;%f;%f;%f;%f;%f]));
1035  
1036 assert_checkequal(cumprod(b,3,'native'), hypermat([2,2,2],[%t;%f;%t;%t;%f;%f;%f;%f]));
1037  
1038 assert_checkequal(cumprod(b,5,'native'), b);
1039  
1040  
1041 //=======================================================================
1042  
1043 //sparse matrices of floats
1044  
1045 s=sparse([1 10 0;-1 0 9]);
1046  
1047 T=list(list(),list('native'),list('double'));
1048  
1049 for typ=T
1050   assert_checkequal(cumprod(s,typ(:)), sparse([1,1;1,2;2,1],[1;-10;-1],[2,3]));
1051   assert_checkequal(cumprod(s,'*',typ(:)), sparse([1,1;1,2;2,1],[1;-10;-1],[2,3]));
1052   assert_checkequal(cumprod(s,1,typ(:)), sparse([1,1;1,2;2,1],[1;10;-1],[2,3]));
1053   assert_checkequal(cumprod(s,2,typ(:)), sparse([1,1;1,2;2,1],[1;10;-1],[2,3]));
1054   assert_checkequal(cumprod(s,3,typ(:)), s);
1055 end
1056  
1057  
1058 //=======================================================================
1059  
1060 //sparse  matrices of boolean
1061  
1062 bs=sparse([%t %t %f;%t %t %t]);
1063  
1064 for typ=list(list(),list('double'));
1065   assert_checkequal(cumprod(bs,typ(:)), sparse([1,1;1,2;2,1;2,2],[1;1;1;1],[2,3]));
1066   assert_checkequal(cumprod(bs,'*',typ(:)), sparse([1,1;1,2;2,1;2,2],[1;1;1;1],[2,3]));
1067   assert_checkequal(cumprod(bs,1,typ(:)), sparse([1,1;1,2;2,1;2,2],[1;1;1;1],[2,3]));
1068   assert_checkequal(cumprod(bs,2,typ(:)), sparse([1,1;1,2;2,1;2,2;2,3],[1;1;1;1;1],[2,3]));
1069   assert_checkequal(cumprod(bs,3,typ(:)), bool2s(bs));
1070 end
1071  
1072  
1073 assert_checkequal(cumprod(bs,'native'), sparse([1,1;1,2;2,1;2,2],[%t;%t;%t;%t],[2,3]));
1074  
1075 assert_checkequal(cumprod(bs,'*','native'), sparse([1,1;1,2;2,1;2,2],[%t;%t;%t;%t],[2,3]));
1076  
1077  
1078 assert_checkequal(cumprod(bs,1,'native'), sparse([1,1;1,2;2,1;2,2],[%t;%t;%t;%t],[2,3]));
1079  
1080 assert_checkequal(cumprod(bs,2,'native'), sparse([1,1;1,2;2,1;2,2;2,3],[%t;%t;%t;%t;%t],[2,3]));
1081  
1082 assert_checkequal(cumprod(bs,3,'native'), bs);
1083  
1084  
1085 // TODO : test the "m" option
1086