bug 3842 fix and extension of sum, cumsum, prod cumprod to all relevant datatypes
[scilab.git] / scilab / modules / elementary_functions / tests / unit_tests / prod.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 // <-- JVM NOT MANDATORY -->
8 // prod 
9 //empty matrices
10 T=list(list(),list('native'),list('double'));
11 for typ=T
12   if prod([],typ(:))<>1 then bugmes();quit;end
13   if prod([],'*',typ(:))<>1 then bugmes();quit;end
14   if prod([],1,typ(:))<>[] then bugmes();quit;end
15   if prod([],2,typ(:))<>[] then bugmes();quit;end
16   if prod([],3,typ(:))<>[] then bugmes();quit;end
17 end
18 //=======================================================================
19 //float matrices
20 d=[1 10;254 9];
21 T=list(list(),list('native'),list('double'));
22 for typ=T
23   if prod(d,typ(:))<>22860 then bugmes();quit;end
24   if prod(d,'*',typ(:))<>22860 then bugmes();quit;end
25   if or(prod(d,1,typ(:))<>[254 90]) then bugmes();quit;end
26   if or(prod(d,2,typ(:))<>[10;2286]) then bugmes();quit;end
27   if or(prod(d,3,typ(:))<>d) then bugmes();quit;end
28 end
29 //hypermatrices of floats
30 d=[1 10;254 9];d(:,:,2)=1;
31 T=list(list(),list('native'),list('double'));
32 for typ=T
33   if prod(d,typ(:))<>22860 then bugmes();quit;end
34   if prod(d,'*',typ(:))<>22860 then bugmes();quit;end
35   if or(prod(d,1,typ(:))<>hypermat([1,2,2],[254;90;1;1])) then bugmes();quit;end
36   if or(prod(d,2,typ(:))<>hypermat([2,1,2],[10;2286;1;1])) then bugmes();quit;end
37   if or(prod(d,3,typ(:))<>[1,10;254,9]) then bugmes();quit;end
38   if or(prod(d,5,typ(:))<>d) then bugmes();quit;end
39 end
40 //=======================================================================
41 //matrices of short integers
42 i=uint8([1 10;254 9]);
43 T=list(list(),list('native'));
44 for typ=T
45   if prod(i,typ(:))<>uint8(76) then bugmes();quit;end
46   if prod(i,'*',typ(:))<>uint8(76) then bugmes();quit;end
47   if or(prod(i,1,typ(:))<>uint8([254 90])) then bugmes();quit;end
48   if or(prod(i,2,typ(:))<>uint8([10;238])) then bugmes();quit;end
49   if or(prod(i,3,typ(:))<>i) then bugmes();quit;end
50 end
51 if prod(i,'double')<>22860 then bugmes();quit;end
52 if prod(i,'*','double')<>22860 then bugmes();quit;end
53 if or(prod(i,1,'double')<>[254 90]) then bugmes();quit;end
54 if or(prod(i,2,'double')<>[10;2286]) then bugmes();quit;end
55 if or(prod(i,3,'double')<>double(i)) then bugmes();quit;end
56 //with hypermatrices
57 i=uint8([1 10;254 9]);i(:,:,2)=uint8(1);
58 for typ=list(list(),list('native'));
59   if prod(i,typ(:))<>uint8(76) then bugmes();quit;end
60   if prod(i,'*',typ(:))<>uint8(76) then bugmes();quit;end
61   if or(prod(i,1,typ(:))<>hypermat([1,2,2],uint8([254;90;1;1]))) then bugmes();quit;end
62   if or(prod(i,2,typ(:))<>hypermat([2,1,2],uint8([10;238;1;1]))) then bugmes();quit;end
63   if or(prod(i,3,typ(:))<>([1,10;254,9])) then bugmes();quit;end
64   if or(prod(i,5,typ(:))<>i) then bugmes();quit;end
65 end
66 if prod(i,'double')<>22860 then bugmes();quit;end
67 if prod(i,'*','double')<>22860 then bugmes();quit;end
68 if or(prod(i,1,'double')<>hypermat([1,2,2],[254;90;1;1])) then bugmes();quit;end
69 if or(prod(i,2,'double')<>hypermat([2,1,2],[10;2286;1;1])) then bugmes();quit;end
70 if or(prod(i,3,'double')<>[1,10;254,9]) then bugmes();quit;end
71 if or(prod(i,5,'double')<>double(i)) then bugmes();quit;end
72 //Polynomials
73 s=%s;p=[s s+1;s^2 1];
74 T=list(list(),list('native'),list('double'));
75 for typ=T
76   if prod(p,typ(:))<>s^3+s^4 then bugmes();quit;end
77   if prod(p,'*',typ(:))<>s^3+s^4 then bugmes();quit;end
78   if or(prod(p,1,typ(:))<>[s^3,1+s]) then bugmes();quit;end
79   if or(prod(p,2,typ(:))<>[s+s^2;s^2]) then bugmes();quit;end
80   if or(prod(p,3,typ(:))<>p) then bugmes();quit;end
81 end
82 //with hypermatrices
83 s=%s;p=[s s+1;s^2 1];p(:,:,2)=[1 s;s+1 2];
84 T=list(list(),list('native'),list('double'));
85 for typ=T
86   if prod(p,typ(:))<>2*s^4+4*s^5+2*s^6 then bugmes();quit;end
87   if prod(p,'*',typ(:))<>2*s^4+4*s^5+2*s^6 then bugmes();quit;end
88   if or(prod(p,1,typ(:))<>hypermat([1,2,2],[s^3;1+s;1+s;2*s])) then bugmes();quit;end
89   if or(prod(p,2,typ(:))<>hypermat([2,1,2],[s+s^2;s^2;s;2+2*s])) then bugmes();quit;end
90   if or(prod(p,3,typ(:))<>[s,s+s^2;s^2+s^3,2]) then bugmes();quit;end
91   if or(prod(p,5,typ(:))<>p) then bugmes();quit;end
92 end
93 //=======================================================================
94 //Matrices of rationals
95 s=%s;r=1.0 ./[s s+1;s^2 1];
96 T=list(list(),list('native'),list('double'));
97 for typ=T
98   if prod(r,typ(:))<>1.0/(s^3+s^4) then bugmes();quit;end
99   if prod(r,'*',typ(:))<>1.0/(s^3+s^4) then bugmes();quit;end
100   if or(prod(r,1,typ(:))<>[1,1]./[s^3,1+s]) then bugmes();quit;end
101   if or(prod(r,2,typ(:))<>[1;1]./[s+s^2;s^2]) then bugmes();quit;end
102   if or(prod(r,3,typ(:))<>r) then bugmes();quit;end
103 end
104 //=======================================================================
105 //Matrices of booleans
106 b=[%t %t; %f %t];
107 for typ=list(list(),list('double'));
108   if prod(b,typ(:))<>0 then bugmes();quit;end
109   if prod(b,'*',typ(:))<>0 then bugmes();quit;end
110   if or(prod(b,1,typ(:))<>[0 1]) then bugmes();quit;end
111   if or(prod(b,2,typ(:))<>[1;0]) then bugmes();quit;end
112   if or(prod(b,3,typ(:))<>double(b)) then bugmes();quit;end
113 end
114 if prod(b,'native')<>%f then bugmes();quit;end
115 if prod(b,'*','native')<>%f then bugmes();quit;end
116 if or(prod(b,1,'native')<>[%f %t]) then bugmes();quit;end
117 if or(prod(b,2,'native')<>[%t;%f]) then bugmes();quit;end
118 if or(prod(b,3,'native')<>b) then bugmes();quit;end
119 //with hypermatrices 
120 b=[%t %t;%f %t];b(1,1,2)=%t;
121 for typ=list(list(),list('double'));
122   if prod(b,typ(:))<>0 then bugmes();quit;end
123   if prod(b,'*',typ(:))<>0 then bugmes();quit;end
124   if or(prod(b,1,typ(:))<>hypermat([1,2,2],[0;1;0;0])) then bugmes();quit;end
125   if or(prod(b,2,typ(:))<>hypermat([2,1,2],[1;0;0;0])) then bugmes();quit;end
126   if or(prod(b,3,typ(:))<>[1,0;0,0]) then bugmes();quit;end
127   if or(prod(b,5,typ(:))<>double(b)) then bugmes();quit;end
128 end
129 if prod(b,'native')<>%f then bugmes();quit;end
130 if prod(b,'*','native')<>%f then bugmes();quit;end
131 if or(prod(b,1,'native')<>hypermat([1,2,2],[%f;%t;%f;%f])) then bugmes();quit;end
132 if or(prod(b,2,'native')<>hypermat([2,1,2],[%t;%f;%f;%f])) then bugmes();quit;end
133 if or(prod(b,3,'native')<>[%t,%f;%f,%f]) then bugmes();quit;end
134 if or(prod(b,5,'native')<>b) then bugmes();quit;end
135 //=======================================================================
136 //sparse matrices of floats
137 s=sparse([1 10 2;-1 254 9]);
138 T=list(list(),list('native'),list('double'));
139 for typ=T
140   if prod(s,typ(:))<>-45720 then bugmes();quit;end
141   if prod(s,'*',typ(:))<>-45720 then bugmes();quit;end
142   if or(prod(s,1,typ(:))<>sparse([-1 2540 18])) then bugmes();quit;end
143   if or(prod(s,2,typ(:))<>sparse([20;-2286])) then bugmes();quit;end
144   if or(prod(s,3,typ(:))<>s) then bugmes();quit;end
145 end
146 //=======================================================================
147 //sparse  matrices of boolean
148 bs=sparse([%t %t %f;%t %t %t]);
149 for typ=list(list(),list('double'));
150   if prod(bs,typ(:))<>0 then bugmes();quit;end
151   if prod(bs,'*',typ(:))<>0 then bugmes();quit;end
152   if or(prod(bs,1,typ(:))<>sparse([1,1,0])) then bugmes();quit;end
153   if or(prod(bs,2,typ(:))<>sparse([0;1])) then bugmes();quit;end
154   if or(prod(bs,3,typ(:))<>bool2s(bs)) then bugmes();quit;end
155 end
156 if prod(bs,'native')<>%f then bugmes();quit;end
157 if prod(bs,'*','native')<>%f then bugmes();quit;end
158 if or(prod(bs,1,'native')<>sparse([%t,%t,%f])) then bugmes();quit;end
159 if or(prod(bs,2,'native')<>sparse([%f;%t])) then bugmes();quit;end
160 if or(prod(bs,3,'native')<>bs) then bugmes();quit;end
161 // TODO : test the "m" option