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