[sum] fix about m argument
[scilab.git] / scilab / modules / elementary_functions / tests / unit_tests / sum.tst
1 // =============================================================================
2 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 // Copyright (C) 2010 - INRIA - Serge Steer
4 // Copyright (C) 2013 - Scilab Enterprises - Adeline CARNIS
5 //
6 //  This file is distributed under the same license as the Scilab package.
7 // =============================================================================
8
9 // <-- CLI SHELL MODE -->
10 // <-- NO CHECK REF -->
11 // Check error
12 d=[1 10;254 9];
13
14 assert_checkfalse(execstr("sum(d, ""orient"")"   ,"errcatch") == 0);
15 refMsg = msprintf(_("%s: Wrong value for input argument #%d: Must be in the set {%s}.\n"), "sum",2,"""*"",""r"",""c"",""m"",""native"",""double""");
16 assert_checkerror("sum(d, ""orient"")", refMsg);
17
18 assert_checkfalse(execstr("sum(d, [""r"", ""c""])"   ,"errcatch") == 0);
19 refMsg = msprintf(_("%s: Wrong size for input argument #%d: A scalar string expected.\n"), "sum", 2);
20 assert_checkerror("sum(d, [""r"", ""c""])", refMsg);
21
22 assert_checkfalse(execstr("sum(d, ""e"", ""double"")"   ,"errcatch") == 0);
23 refMsg = msprintf(_("%s: Wrong value for input argument #%d: Must be in the set {%s}.\n"), "sum",2,"""*"",""r"",""c"",""m""");
24 assert_checkerror("sum(d, ""e"", ""double"")", refMsg);
25
26 assert_checkfalse(execstr("sum(d, -1.5, ""double"")"   ,"errcatch") == 0);
27 refMsg = msprintf(_("%s: Wrong value for input argument #%d: A positive scalar expected.\n"), "sum", 2);
28 assert_checkerror("sum(d, -1.5, ""double"")", refMsg);
29
30 //==============================================================================
31 // matrices of integer
32 i = uint8(d);
33
34 assert_checkfalse(execstr("sum(i, ""orient"")"   ,"errcatch") == 0);
35 refMsg = msprintf(_("%s: Wrong value for input argument #%d: Must be in the set {%s}.\n"), "sum",2,"""*"",""r"",""c"",""m"",""native"",""double""");
36 assert_checkerror("sum(i, ""orient"")", refMsg);
37
38 assert_checkfalse(execstr("sum(i, [""r"", ""c""])"   ,"errcatch") == 0);
39 refMsg = msprintf(_("%s: Wrong size for input argument #%d: A scalar string expected.\n"), "sum", 2);
40 assert_checkerror("sum(i, [""r"", ""c""])", refMsg);
41
42 assert_checkfalse(execstr("sum(i,""r"", ""nat"")"   ,"errcatch") == 0);
43 refMsg = msprintf(_("%s: Wrong value for input argument #%d: %s or %s expected.\n"),"sum", 3, """native""", """double""");
44 assert_checkerror("sum(i,""r"", ""nat"")", refMsg);
45
46 assert_checkfalse(execstr("sum(i,""r"", [""nat"" ""dble""])"   ,"errcatch") == 0);
47 refMsg = msprintf(_("%s: Wrong size for input argument #%d: A scalar string expected.\n"), "sum", 3);
48 assert_checkerror("sum(i,""r"", [""nat"" ""dble""])", refMsg);
49
50 assert_checkfalse(execstr("sum(i,""orient"", ""t"")"   ,"errcatch") == 0);
51 refMsg = msprintf(_("%s: Wrong value for input argument #%d: Must be in the set {%s}.\n"), "sum",2,"""*"",""r"",""c"",""m""");
52 assert_checkerror("sum(i,""orient"", ""t"")", refMsg);
53
54 assert_checkfalse(execstr("sum(i,1,1)"   ,"errcatch") == 0);
55 refMsg = msprintf(_("%s: Wrong type for input argument #%d: string expected.\n"), "sum", 3);
56 assert_checkerror("sum(i,1,1)", refMsg);
57
58 //==============================================================================
59 // sparse matrices
60 d = sparse(d);
61 assert_checkfalse(execstr("sum(d, ""orient"")","errcatch") == 0);
62 refMsg = msprintf(_("%s: Wrong value for input argument #%d: Must be in the set {%s}.\n"), "sum",2,"""*"",""r"",""c"",""m""");
63 assert_checkerror("sum(d, ""orient"")", refMsg);
64
65 assert_checkfalse(execstr("sum(d, [""r"", ""c""])"   ,"errcatch") == 0);
66 refMsg = msprintf(_("%s: Wrong size for input argument #%d: string expected.\n"),"sum",2);
67 assert_checkerror("sum(d, [""r"", ""c""])", refMsg);
68
69 //==============================================================================
70 // boolean matrices
71 d = [%f %t;%t %f];
72 assert_checkfalse(execstr("sum(d, ""orient"")"   ,"errcatch") == 0);
73 refMsg = msprintf(_("%s: Wrong value for input argument #%d: Must be in the set {%s}.\n"),"sum",2,"""*"",""r"",""c"",""m"",""native"",""double""");
74 assert_checkerror("sum(d, ""orient"")", refMsg);
75
76 assert_checkfalse(execstr("sum(d, [""r"", ""c""])"   ,"errcatch") == 0);
77 refMsg = msprintf(_("%s: Wrong size for input argument #%d: A scalar string expected.\n"),"sum",2);
78 assert_checkerror("sum(d, [""r"", ""c""])", refMsg);
79
80 assert_checkfalse(execstr("sum(d,""r"", ""nat"")"   ,"errcatch") == 0);
81 refMsg = msprintf(_("%s: Wrong value for input argument #%d: %s or %s expected.\n"),"sum", 3, """native""", """double""");
82 assert_checkerror("sum(d,""r"", ""nat"")", refMsg);
83
84 assert_checkfalse(execstr("sum(d,""r"", [""nat"" ""dble""])"   ,"errcatch") == 0);
85 refMsg = msprintf(_("%s: Wrong size for input argument #%d: A scalar string expected.\n"),"sum",3);
86 assert_checkerror("sum(d,""r"", [""nat"" ""dble""])", refMsg);
87
88 assert_checkfalse(execstr("sum(d,""orient"", ""t"")"   ,"errcatch") == 0);
89 refMsg = msprintf(_("%s: Wrong value for input argument #%d: Must be in the set {%s}.\n"),..
90 "sum",2,"""*"",""r"",""c"",""m""");
91 assert_checkerror("sum(d,""orient"", ""t"")", refMsg);
92
93 assert_checkfalse(execstr("sum(d,1,1)"   ,"errcatch") == 0);
94 refMsg = msprintf(_("%s: Wrong type for input argument #%d: string expected.\n"),"sum",3);
95 assert_checkerror("sum(d,1,1)", refMsg);
96
97 //==============================================================================
98 // sparse boolean matrices
99 d = sparse(d);
100 assert_checkfalse(execstr("sum(d, ""orient"")"   ,"errcatch") == 0);
101 refMsg = msprintf(_("%s: Wrong value for input argument #%d: Must be in the set {%s}.\n"),..
102 "sum",2,"""*"",""r"",""c"",""m""");
103 assert_checkerror("sum(d, ""orient"")", refMsg);
104
105 assert_checkfalse(execstr("sum(d, [""r"", ""c""])"   ,"errcatch") == 0);
106 refMsg = msprintf(_("%s: Wrong size for input argument #%d: string expected.\n"),"sum",2);
107 assert_checkerror("sum(d, [""r"", ""c""])", refMsg);
108
109 assert_checkfalse(execstr("sum(d,""r"", ""nat"")"   ,"errcatch") == 0);
110 refMsg = msprintf(_("%s: Wrong value for input argument #%d: ""%s"" or ""%s"" expected.\n"),"sum", 3, "native", "double");
111 assert_checkerror("sum(d,""r"", ""nat"")", refMsg);
112
113 assert_checkfalse(execstr("sum(d,""r"", [""nat"" ""dble""])"   ,"errcatch") == 0);
114 refMsg = msprintf(_("%s: Wrong size for input argument #%d: string expected.\n"),"sum",3);
115 assert_checkerror("sum(d,""r"", [""nat"" ""dble""])", refMsg);
116
117 assert_checkfalse(execstr("sum(d,""orient"", ""t"")"   ,"errcatch") == 0);
118 refMsg = msprintf(_("%s: Wrong value for input argument #%d: Must be in the set {%s}.\n"),..
119 "sum",2,"""*"",""r"",""c"",""m""");
120 assert_checkerror("sum(d,""orient"", ""t"")", refMsg);
121
122 assert_checkfalse(execstr("sum(d,1,1)"   ,"errcatch") == 0);
123 refMsg = msprintf(_("%s: Wrong type for input argument #%d: string expected.\n"),"sum",3);
124 assert_checkerror("sum(d,1,1)", refMsg);
125
126 //==============================================================================
127 // hypermatrices
128 d = rand(2,2,2);
129 assert_checkfalse(execstr("sum(d, ""orient"")"   ,"errcatch") == 0);
130 refMsg = msprintf(_("%s: Wrong value for input argument #%d: Must be in the set {%s}.\n"), "sum",2,"""*"",""r"",""c"",""m"",""native"",""double""");
131 assert_checkerror("sum(d, ""orient"")", refMsg);
132
133 assert_checkfalse(execstr("sum(d, [""r"", ""c""])"   ,"errcatch") == 0);
134 refMsg = msprintf(_("%s: Wrong size for input argument #%d: A scalar string expected.\n"),"sum",2);
135 assert_checkerror("sum(d, [""r"", ""c""])", refMsg);
136
137 //==============================================================================
138 // polynome
139 s = poly(0, "s");
140 d = [s s^2;s*%i 1];
141 assert_checkfalse(execstr("sum(d, ""orient"")"   ,"errcatch") == 0);
142 refMsg = msprintf(_("%s: Wrong value for input argument #%d: Must be in the set {%s}.\n"),"sum",2,"""*"",""r"",""c"",""m"",""native"",""double""");
143 assert_checkerror("sum(d, ""orient"")", refMsg);
144
145 assert_checkfalse(execstr("sum(d, [""r"", ""c""])"   ,"errcatch") == 0);
146 refMsg = msprintf(_("%s: Wrong size for input argument #%d: A scalar string expected.\n"),"sum",2);
147 assert_checkerror("sum(d, [""r"", ""c""])", refMsg);
148
149 //==============================================================================
150 // rational matrices
151 s = poly(0, "s");
152 d = [1/s 1/s^2; 1/s 1];
153 assert_checkfalse(execstr("sum(d, ""orient"")"   ,"errcatch") == 0);
154 refMsg = msprintf(_("%s: Wrong value for input argument #%d: Must be in the set {%s}.\n"),..
155 "sum",2,"""*"",""r"",""c"",""m""");
156 assert_checkerror("sum(d, ""orient"")", refMsg);
157
158 assert_checkfalse(execstr("sum(d, [""r"", ""c""])"   ,"errcatch") == 0);
159 refMsg = msprintf(_("%s: Wrong size for input argument #%d: string expected.\n"),"sum",2);
160 assert_checkerror("sum(d, [""r"", ""c""])", refMsg);
161
162 //empty matrices
163 T=list(list(),list("native"),list("double"));
164 for typ=T
165     assert_checkequal(sum([], typ(:)), 0);
166     assert_checkequal(sum([], "*", typ(:)), 0);
167
168     assert_checkequal(sum([], 1, typ(:)), []);
169     assert_checkequal(sum([], 2, typ(:)), []);
170     assert_checkequal(sum([], 3, typ(:)), []);
171 end
172 //=======================================================================
173 //float matrices
174 d=[1 10;254 9];
175 T=list(list(),list("native"),list("double"));
176 for typ=T
177     assert_checkequal(sum(d, typ(:)), 274);
178     assert_checkequal(sum(d, "*", typ(:)), 274);
179     assert_checkequal(sum(d, 1, typ(:)), [255 19]);
180     assert_checkequal(sum(d, 2, typ(:)), [11; 263]);
181     assert_checkequal(sum(d, 3, typ(:)), d);
182 end
183
184 //hypermatrices of floats
185 d(1,1,2)=1;
186 for typ=T
187     assert_checkequal(sum(d, typ(:)), 275);
188     assert_checkequal(sum(d, "*", typ(:)), 275);
189     assert_checkequal(sum(d, 1, typ(:)), matrix([255;19;1;0], [1,2,2]));
190     assert_checkequal(sum(d, 2, typ(:)), matrix([11;263;1;0], [2,1,2]));
191     assert_checkequal(sum(d, 3, typ(:)), [2,10;254,9]);
192     assert_checkequal(sum(d, 5, typ(:)), d);
193 end
194
195 //=======================================================================
196 //matrices of short integers
197 // Caution : uint8([11;263]) is equal to uint8([11;7])
198 i=uint8([1 10;254 9]);
199 T = list(list(),list("native"));
200 for typ=T
201     assert_checkequal(sum(i, typ(:)), uint8(274));
202     assert_checkequal(sum(i, "*", typ(:)), uint8(274));
203     assert_checkequal(sum(i, 1, typ(:)), uint8([255 19]));
204     assert_checkequal(sum(i, 2, typ(:)), uint8([11;263]));
205     assert_checkequal(sum(i, 3, typ(:)), i);
206 end
207
208 assert_checkequal(sum(i, "double"), 274);
209 assert_checkequal(sum(i, "*", "double"), 274);
210 assert_checkequal(sum(i, 1, "double"), [255 19]);
211 assert_checkequal(sum(i, 2, "double"), [11; 263]);
212 assert_checkequal(sum(i, 3, "double"), double(i));
213
214 //with hypermatrices
215 i(1,1,2)=uint8(1);
216 T = list(list(),list("native"));
217 for typ=T
218     assert_checkequal(sum(i, typ(:)), uint8(275));
219     assert_checkequal(sum(i, "*", typ(:)), uint8(275));
220     assert_checkequal(sum(i, 1, typ(:)), matrix(uint8([255;19;1;0]), [1,2,2]));
221     assert_checkequal(sum(i, 2, typ(:)), matrix(uint8([11;263;1;0]), [2,1,2]));
222     assert_checkequal(sum(i, 3, typ(:)), uint8([2,10;254,9]));
223     assert_checkequal(sum(i, 5, typ(:)), i);
224 end
225
226 assert_checkequal(sum(i, "double"), 275);
227 assert_checkequal(sum(i, "*", "double"), 275);
228 assert_checkequal(sum(i, 1, "double"), matrix([255;19;1;0], [1,2,2]));
229 assert_checkequal(sum(i, 2, "double"), matrix([11;263;1;0], [2,1,2]));
230 assert_checkequal(sum(i, 3, "double"), [2,10;254,9]);
231
232 //=======================================================================
233 //Matrices of polynomials
234 s=%s;
235 p=[s s+1;s^2 0];
236 T=list(list(),list("native"),list("double"));
237 for typ=T
238     assert_checkequal(sum(p, typ(:)), 1+2*s+s^2);
239     assert_checkequal(sum(p, "*", typ(:)), 1+2*s+s^2);
240     assert_checkequal(sum(p, 1, typ(:)), [s + s^2, 1 + s]);
241     assert_checkequal(sum(p, 2, typ(:)), [1+2*s;s^2]);
242     assert_checkequal(sum(p, 3, typ(:)), p);
243 end
244
245 //with hypermatrices
246 p(1,1,2)=-1;
247 for typ=T
248     assert_checkequal(sum(p, typ(:)), 2*s+s^2);
249     assert_checkequal(sum(p, "*", typ(:)), 2*s+s^2);
250     assert_checkequal(sum(p, 1, typ(:)), matrix([s+s^2;1+s;-1;0*s], [1,2,2]));
251     assert_checkequal(sum(p, 2, typ(:)), matrix([1+2*s;s^2;-1;0*s], [2,1,2]));
252     assert_checkequal(sum(p, 3, typ(:)), [-1+s,1+s;s^2,0]);
253     assert_checkequal(sum(p, 5, typ(:)), p);
254 end
255
256 //=======================================================================
257 //Matrices of rationals
258 s=%s;
259 r=1.0 ./[s s+1;s^2 1];
260 T=list(list(),list("native"),list("double"));
261 for typ=T
262     assert_checkequal(sum(r, typ(:)), (1+2*s+3*s^2+s^3)./(s^2+s^3));
263     assert_checkequal(sum(r, "*", typ(:)), (1+2*s+3*s^2+s^3)./(s^2+s^3));
264     assert_checkequal(sum(r, 1, typ(:)), [1+s,2+s]./[s^2,1+s]);
265     assert_checkequal(sum(r, 2, typ(:)), [1+2*s;1+s^2]./[s+s^2;s^2]);
266     assert_checkequal(sum(r, 3, typ(:)), r);
267 end
268
269 //=======================================================================
270 ///Matrices of boolean
271
272 b=[%t %t %f %t];
273 T = list(list(),list("double"));
274 for typ=T
275     assert_checkequal(sum(b, typ(:)), 3);
276     assert_checkequal(sum(b, "*", typ(:)), 3);
277     assert_checkequal(sum(b, 1, typ(:)), [1 1 0 1]);
278     assert_checkequal(sum(b, 2, typ(:)), 3);
279     assert_checkequal(sum(b, 3, typ(:)), double(b));
280 end
281
282 assert_checkequal(sum(b, "native"), %t);
283 assert_checkequal(sum(b, "*", "native"), %t);
284 assert_checkequal(sum(b, 1, "native"), b);
285 assert_checkequal(sum(b, 2, "native"), %t);
286 assert_checkequal(sum(b, 3, "native"), b);
287
288 //with hypermatrices
289 b=[%t %t %f %t];b(1,1,2)=%f;
290 T = list(list(),list("double"));
291 for typ=T
292     assert_checkequal(sum(b, typ(:)), 3);
293     assert_checkequal(sum(b, "*", typ(:)), 3);
294     assert_checkequal(sum(b, 1, typ(:)), matrix([1;1;0;1;0;0;0;0], [1,4,2]));
295     assert_checkequal(sum(b, 2, typ(:)), matrix([3;0], [1,1,2]));
296     assert_checkequal(sum(b, 3, typ(:)), [1 1 0 1]);
297     assert_checkequal(sum(b, 5, typ(:)), double(b));
298 end
299
300 assert_checkequal(sum(b, "native"), %t);
301 assert_checkequal(sum(b, "*", "native"), %t);
302 assert_checkequal(sum(b, 1, "native"), matrix([%t;%t;%f;%t;%f;%f;%f;%f], [1,4,2]));
303 assert_checkequal(sum(b, 2, "native"), matrix([%t;%f], [1,1,2]));
304 assert_checkequal(sum(b, 3, "native"), [%t %t %f %t]);
305 assert_checkequal(sum(b, 5, "native"), b);
306
307 //=======================================================================
308 //sparse matrices of floats
309 s=sparse([1 10 0;0 254 9]);
310 T=list(list(),list("native"),list("double"));
311 for typ=T
312     assert_checkequal(sum(s, typ(:)), 274);
313     assert_checkequal(sum(s, "*", typ(:)), 274);
314     assert_checkequal(sum(s, 1, typ(:)), sparse([1,264,9]));
315     assert_checkequal(sum(s, 2, typ(:)), sparse([11;263]));
316     assert_checkequal(sum(s, 3, typ(:)), s);
317 end
318
319 //=======================================================================
320 //sparse  matrices of boolean
321 bs=sparse([1 10 0;0 254 9])<>0;
322 T = list(list(),list("double"));
323 for typ=T
324     assert_checkequal(sum(bs, typ(:)), 4);
325     assert_checkequal(sum(bs, "*", typ(:)), 4);
326     assert_checkequal(sum(bs, 1, typ(:)), sparse([1,2,1]));
327     assert_checkequal(sum(bs, 2, typ(:)), sparse([2;2]));
328     assert_checkequal(sum(bs, 3, typ(:)), bool2s(bs));
329 end
330
331 assert_checkequal(sum(bs, "native"), %t);
332 assert_checkequal(sum(bs, "*", "native"), %t);
333 assert_checkequal(sum(bs, 1, "native"), sparse([%t,%t,%t]));
334 assert_checkequal(sum(bs, 2, "native"), sparse([%t;%t]));
335 assert_checkequal(sum(bs, 3, "native"),bs);
336
337 //=======================================================================
338 //"m" option"
339
340 d=[1 10;254 9];
341 assert_checkequal(sum(d, "m"), sum(d, "r"));
342 d=[1 10 254 9];
343 assert_checkequal(sum(d, "m"), sum(d, "c"));
344 d=d';
345 assert_checkequal(sum(d, "m"), sum(d, "r"));
346