b963e1fb32945939a90f745d02ff81d0f2be1502
[scilab.git] / scilab / modules / overloading / tests / unit_tests / rational.tst
1 // =============================================================================
2 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 // Copyright (C) 2009 - DIGITEO
4 //
5 //  This file is distributed under the same license as the Scilab package.
6 // =============================================================================
7 // <-- CLI SHELL MODE -->
8 // <-- NO CHECK REF -->
9 //
10
11 s=poly(0,"s");
12 z = s^0;
13 h=1/(2*s);
14 assert_checkequal(size(h), [1 1]);
15 assert_checkequal(h.num, 1*z);
16 assert_checkequal(h.den, 2*s);
17
18 //basic operations with 2D matrices
19 H=[h h];
20 assert_checkequal(H.num, [1 1].*z);
21 assert_checkequal(H.den, [2*s 2*s]);
22
23 H=[h;h];
24 assert_checkequal(H.num, [1;1].*z);
25 assert_checkequal(H.den, [2*s;2*s]);
26
27 H=[h 3];
28 assert_checkequal(H.num, [1*z 3]);
29 assert_checkequal(H.den, [2*s 1]);
30
31 H=[h;5];
32 assert_checkequal(H.num, [1*z;5]);
33 assert_checkequal(H.den, [2*s;1]);
34
35 H=[3 h];
36 assert_checkequal(H.num, [3 1*z]);
37 assert_checkequal(H.den, [1 2*s]);
38
39 H=[5;h];
40 assert_checkequal(H.num, [5;1*z]);
41 assert_checkequal(H.den, [1;2*s]);
42
43 H=[3 h;s 2];
44 assert_checkequal(H(1,1), rlist(3,1));
45 assert_checkequal(H(1,2), h);
46 assert_checkequal(H(1, [2 1]), [h rlist(3,1)]);
47 assert_checkequal(H(1, [2 2]), [h h]);
48 assert_checkequal(H(1,:), [rlist(3,1) h]);
49 assert_checkequal(H(:,1), [rlist(3,1); s]);
50 assert_checkequal(H([2 1], :), [s rlist(2,1);rlist(3,1) h]);
51 assert_checkequal(H([1 1], :), [rlist(3,1) h;rlist(3,1) h]);
52
53 assert_checkequal(matrix(H, -1, 1), [3*z;s;h;2*z]);
54
55 H=h;H(1,3)=1/s;
56 assert_checkequal(H.num, [1 0 1].*z);
57 assert_checkequal(H.den, [2*s 1 s]);
58
59 H=h;H(3,1)=1/s;
60 assert_checkequal(H.num, [1 0 1]'.*z);
61 assert_checkequal(H.den, [2*s 1 s]');
62
63 H=h;H(1,3)=1.5;
64 assert_checkequal(H.num, [1 0 1.5].*z);
65 assert_checkequal(H.den, [2*s 1 1]);
66
67 H=h;H(3,1)=1.5;
68 assert_checkequal(H.num, [1 0 1.5]'.*z);
69 assert_checkequal(H.den, [2*s 1 1]');
70
71 H=1.5;H(1,3)=1/s;
72 assert_checkequal(H.num, [1.5 0 1].*z);
73 assert_checkequal(H.den, [1 1 s]);
74
75 H=1.5;H(3,1)=1/s;
76 assert_checkequal(H.num, [1.5 0 1]'.*z);
77 assert_checkequal(H.den, [1 1 s]');
78
79 H=[h s;1 h];H(:,1)=[];
80 assert_checkequal(H, [s;h]);
81
82 H=[h s;1 h];H(2,:)=[];
83 assert_checkequal(H, [h s]);
84
85 H=h+h;c=coeff(H.den,1);
86 assert_checkequal(H.num/c, 1*z);
87 assert_checkequal(H.den/c, s);
88
89 H=h+1;
90 assert_checkequal(H.num, 1+2*s);
91 assert_checkequal(H.den, 2*s);
92
93 H=1+h;
94 assert_checkequal(H.num, 1+2*s);
95 assert_checkequal(H.den, 2*s);
96
97 H=h+[];
98 assert_checkequal(H, []);
99
100 H=[]+h;
101 assert_checkequal(H, []);
102
103 H=h+s;
104 assert_checkequal(H.num, 1+2*s^2);
105 assert_checkequal(H.den, 2*s);
106
107 H=s+h;
108 assert_checkequal(H.num, 1+2*s^2);
109 assert_checkequal(H.den, 2*s);
110
111 H=h-h;
112 assert_checkequal(H.num, 0*z);
113 assert_checkequal(H.den, 1*s^0);
114
115 H=h-1;
116 assert_checkequal(H.num, 1-2*s);
117 assert_checkequal(H.den, 2*s);
118
119 H=1-h;
120 assert_checkequal(H.num, -1+2*s);
121 assert_checkequal(H.den, 2*s);
122
123 H=[h h+1]-1;
124 assert_checkequal(H(1,1), h-1);
125 assert_checkequal(H(1,2), h);
126
127 H=[h h+1]-2*h;
128 assert_checkequal(H.num, [-2 -2+4*s]);
129 assert_checkequal(H.den, [4*s 4*s]);
130
131 H=-2*h+[h h+1];
132 assert_checkequal(H.num, [-2 -2+4*s]);
133 assert_checkequal(H.den, [4*s 4*s]);
134
135 // *
136
137 H=h*h;
138 assert_checkequal(H.num, 1*z);
139 assert_checkequal(H.den, 4*s^2);
140
141 H=h*2;
142 assert_checkequal(H.num, 2*z);
143 assert_checkequal(H.den, 2*s);
144
145 H=2*h;
146 assert_checkequal(H.num, 2*z);
147 assert_checkequal(H.den, 2*s);
148
149 H=h*s;
150 assert_checkequal(H.num, 1*z);
151 assert_checkequal(H.den, 2*z);
152
153 H=s*h;
154 assert_checkequal(H.num, 1*z);
155 assert_checkequal(H.den, 2*z);
156
157 H=[h h+1]*h;
158 assert_checkequal(H, [h*h (h+1)*h]);
159
160 H=h*[h h+1];
161 assert_checkequal(H, [h*h, (h+1)*h]);
162
163 H=[h h+1]*2;
164 assert_checkequal(H, [h*2, (h+1)*2]);
165
166 H=2*[h h+1];
167 assert_checkequal(H, [h*2, (h+1)*2]);
168
169 H=[h h+1]*s;
170 assert_checkequal(H, [h*s, (h+1)*s]);
171
172 H=s*[h h+1];
173 assert_checkequal(H, [h*s, (h+1)*s]);
174
175 H=[h 1;s 3]*[1;h];
176 assert_checkequal(H, [h+h;s+3*h]);
177
178 H=[h 1]*[h 1;s 3];
179 assert_checkequal(H, [h*h+s, h+3]);
180
181 H=[h 1;s 3]*[1;2];
182 assert_checkequal(H, [h+2;s+6]);
183
184 H=[2 1]*[h 1;s 3];
185 assert_checkequal(H, [2*h+s, 2+3]);
186
187 // .*
188
189 H=h.*h;
190 assert_checkequal(H.num, 1*z);
191 assert_checkequal(H.den, 4*s^2);
192
193 H=h.*2;
194 assert_checkequal(H.num, 2*z);
195 assert_checkequal(H.den, 2*s);
196
197 H=2 .*h;
198 assert_checkequal(H.num, 2*z);
199 assert_checkequal(H.den, 2*s);
200
201 H=h.*s;
202 assert_checkequal(H.num, 1*z);
203 assert_checkequal(H.den, 2*z);
204
205 H=s.*h;
206 assert_checkequal(H.num, 1*z);
207 assert_checkequal(H.den, 2*z);
208
209 H=[h h+1].*h;
210 assert_checkequal(H, [h*h (h+1)*h]);
211
212 H=h.*[h h+1];
213 assert_checkequal(H, [h*h (h+1)*h]);
214
215 H=[h h+1].*2;
216 assert_checkequal(H, [h*2, (h+1)*2]);
217
218 H=2 .*[h h+1];
219 assert_checkequal(H, [h*2, (h+1)*2]);
220
221 H=[h h+1].*s;
222 assert_checkequal(H, [h*s, (h+1)*s]);
223
224 H=s.*[h h+1];
225 assert_checkequal(H, [h*s, (h+1)*s]);
226
227 H=[3 h;s 2].*[3 h;s 2];
228 assert_checkequal(H, [9 h*h; s*s 4]);
229
230
231 // /
232
233 H=h/2;
234 assert_checkequal(H.num, 0.5*z);
235 assert_checkequal(H.den, 2*s);
236
237 H=h/s;
238 assert_checkequal(H.num, 1*z);
239 assert_checkequal(H.den, 2*s^2);
240
241 H=h/(h+1);
242 assert_checkequal(H.num, 2*z);
243 assert_checkequal(H.den, 2+4*s);
244
245 H=[h h-1]/2;
246 assert_checkequal(H, [h/2 (h-1)/2]);
247
248 H=[h h-1]/s;
249 assert_checkequal(H, [h/s (h-1)/s]);
250
251 H=1/h;
252 assert_checkequal(H.num, 2*s);
253 assert_checkequal(H.den, 1*z);
254
255 H=[1 2]/h;
256 assert_checkequal(H, [1/h 2/h]);
257
258 H=[s+1 s-2]/h;
259 assert_checkequal(H, [(s+1)/h (s-2)/h]);
260
261 H=[h+1 (h+1)*(h-1)]/h;
262 assert_checkequal(H, [(h+1)/h ((h+1)*(h-1))/h]);
263
264 H=(eye(2,2)/[3 h;s 2])*[3 h;s 2];
265 assert_checkequal(coeff(H.num)./(coeff(H.den, 0) + coeff(H.den, 2)), eye(2,2));
266
267 // ./
268 H=h./2;
269 assert_checkequal(H.num, 0.5*z);
270 assert_checkequal(H.den, 2*s);
271
272 H=h./s;
273 assert_checkequal(H.num, 1*z);
274 assert_checkequal(H.den, 2*s^2);
275
276 H=h./(h+1);
277 assert_checkequal(H.num, 2*z);
278 assert_checkequal(H.den, 2+4*s);
279
280 H=[h h-1]./2;
281 assert_checkequal(H, [h/2 (h-1)/2]);
282
283 H=[h h-1]./s;
284 assert_checkequal(H, [h/s (h-1)/s]);
285
286 H=1 ./h;
287 assert_checkequal(H.num, 2*s);
288 assert_checkequal(H.den, 1*z);
289
290 H=[1 2]./h;
291 assert_checkequal(H, [1/h 2/h]);
292
293 H=[s+1 s-2]./h;
294 assert_checkequal(H, [(s+1)/h (s-2)/h]);
295
296 H=[h+1 (h+1)*(h-1)]./h;
297 assert_checkequal(H, [(h+1)/h ((h+1)*(h-1))/h]);
298
299 H=[3 h;s 2]./[3 h;s 2];
300 assert_checkequal(coeff(H.num)./coeff(H.den), ones(2,2));
301
302 // .\
303
304 H=2 .\h;
305 assert_checkequal(H.num, 0.5*z);
306 assert_checkequal(H.den, 2*s);
307
308 H=s.\h;
309 assert_checkequal(H.num, 1*z);
310 assert_checkequal(H.den, 2*s^2);
311
312 H=(h+1).\h;
313 assert_checkequal(H.num, 2*z);
314 assert_checkequal(H.den, 2+4*s);
315
316 H=2 .\[h h-1];
317 assert_checkequal(H, [h/2 (h-1)/2]);
318
319 H=s.\[h h-1];
320 assert_checkequal(H, [h/s (h-1)/s]);
321
322 H=1 ./h;
323 assert_checkequal(H.num, 2*s);
324 assert_checkequal(H.den, 1*z);
325
326 H=h.\[1 2];
327 assert_checkequal(H, [1/h 2/h]);
328
329 H=h.\[s+1 s-2];
330 assert_checkequal(H, [(s+1)/h (s-2)/h]);
331
332 H=h.\[h+1 (h+1)*(h-1)];
333 assert_checkequal(H, [(h+1)/h ((h+1)*(h-1))/h]);
334
335 H=[3 h;s 2]./[3 h;s 2];
336 assert_checkequal(coeff(H.num)./coeff(H.den), ones(2,2));
337
338 //comparison
339 //---------------
340 assert_checktrue(rlist(1,0)==%inf)
341 assert_checktrue(%inf==rlist(1,0))
342 assert_checktrue(poly(%inf,"x","coeff")==rlist(1,0))
343 assert_checktrue(rlist(1,0)==poly(%inf,"x","coeff"))
344 assert_checkfalse(rlist(1,0)<>%inf)
345 assert_checkfalse(%inf<>rlist(1,0))
346 assert_checkfalse(poly(%inf,"x","coeff")<>rlist(1,0))
347 assert_checkfalse(rlist(1,0)<>poly(%inf,"x","coeff"))
348
349
350 // hypermatrices of rationnals
351
352 clear H;H(1,1,2)=h;
353 assert_checkequal(H(1,1,1), rlist(0, 1, []));
354 assert_checkequal(H(1,1,2), h);
355
356 H(2,1,2)=h+1;
357 assert_checkequal(size(H), [2 1 2]);
358 assert_checkequal(H(:,1,1), rlist([0; 0], [1; 1]));
359 assert_checkequal(H([2 2], 1, 2), [h+1;h+1]);
360
361 clear H;H(1,1,2)=h;H(2,1,1)=1;
362 assert_checkequal(H(:,1,1), rlist([0; 1], [1; 1]));
363 assert_checkequal(H(:,1,2), [h;0]);
364
365 clear H;H(1,1,2)=h;H(1,1,:)=3;
366 assert_checkequal(H(1,1,1), rlist(3,1));
367 assert_checkequal(H(1,1,2), rlist(3,1));
368
369 clear H;H(1,1,2)=h;H(1:2,1,1)=%s;
370 assert_checkequal(H(1:2,1,1), rlist([%s;%s], [1;1]));
371
372 clear H;H(2,2,2)=s;H(2,1,1)=h;
373 assert_checkequal(H(:,:,1), [0 0;h 0]);
374 assert_checkequal(H(:,:,2), rlist([0 0;0 s], [1 1;1 1]));
375
376 clear H;H(2,2,2)=8;H(2,1,1)=h;
377 assert_checkequal(H(:,:,1), [0 0;h 0]);
378 assert_checkequal(H(:,:,2), rlist([0 0;0 8], [1 1;1 1]));
379
380 clear H;H(2,2,2)=8;H(2,1,1)=h;
381 H(:,:,1)=[];
382 assert_checkequal(H, rlist([0 0;0 8], [1 1;1 1]));
383
384 clear H;H(2,2,2)=8;H(2,1,1)=h;
385 H2=H(2,:,:);H(1,:,:)=[];
386 assert_checkequal(H, H2);
387
388 clear H;H(2,2,2)=8;H(2,1,1)=h;
389 H2=H(:,2,:);H(:,1,:)=[];
390 assert_checkequal(H, H2);
391
392 clear H;H(2,2,2)=h;H=H+1;
393 assert_checkequal(H(:,:,1), rlist([1 1;1 1], [1 1;1 1]));
394 assert_checkequal(H(:,:,2), [1 1;1 h+1]);
395
396 clear H;H(2,2,2)=h;H=1+H;
397 assert_checkequal(H(:,:,1), rlist([1 1;1 1], [1 1;1 1]));
398 assert_checkequal(H(:,:,2), [1 1;1 h+1]);
399
400 clear H;H(2,2,2)=h;H=H+s;
401 assert_checkequal(H(:,:,1), rlist([s s;s s], [1 1;1 1]));
402 assert_checkequal(H(:,:,2), [s s;s h+s]);
403
404 clear H;H(2,2,2)=h;H=s+H;
405 assert_checkequal(H(:,:,1), rlist([s s; s s], [1 1;1 1]));
406 assert_checkequal(H(:,:,2), [s s;s h+s]);
407
408 clear H;H(2,2,2)=h;H=H-1;
409 assert_checkequal(H(:,:,1), -1*rlist([1 1;1 1], [1 1;1 1]));
410 assert_checkequal(H(:,:,2), [-1 -1;-1 h-1]);
411
412 clear H;H(2,2,2)=h;H=1-H;
413 assert_checkequal(H(:,:,1), rlist([1 1;1 1], [1 1;1 1]));
414 assert_checkequal(H(:,:,2), [1 1;1 1-h]);
415
416 clear H;H(2,2,2)=h;H=H-s;
417 assert_checkequal(H(:,:,1), rlist([-s -s;-s -s], [1 1;1 1]));
418 assert_checkequal(H(:,:,2), [-s -s;-s h-s]);
419
420 clear H;H(2,2,2)=h;H=s-H;
421 assert_checkequal(H(:,:,1), rlist([s s;s s], [1 1;1 1]));
422 assert_checkequal(H(:,:,2), [s s;s -h+s]);
423
424 clear H;H(2,2,2)=s;H(2,1,1)=h;H=H+H;
425 assert_checkequal(H(:,:,1), [0 0;h+h 0]);
426 assert_checkequal(H(:,:,2), rlist([0 0;0 s+s], [1 1;1 1]));
427
428 clear H;H(2,2,2)=s;H(2,1,1)=h;H=H-H;
429 assert_checkequal(H(:,:,1), [0 0;h-h 0]);
430 assert_checkequal(H(:,:,2), rlist([0 0;0 0], [1 1;1 1]));
431
432 // *
433 clear H;H(1,1,2)=h;H(1:2,1,1)=%s;H=H*h;
434 assert_checkequal(H(:,:,1), [s*h;s*h]);
435 assert_checkequal(H(:,:,2), [h*h; 0/1]);
436
437 clear H;H(1,1,2)=h;H(1:2,1,1)=%s;H=H*2;
438 assert_checkequal(H(:,:,1), rlist([s*2;s*2], [1;1]));
439 assert_checkequal(H(:,:,2), [h*2;0]);
440
441 clear H;H(1,1,2)=h;H(1:2,1,1)=%s;H=2*H;
442 assert_checkequal(H(:,:,1), rlist([s*2;s*2], [1;1]));
443 assert_checkequal(H(:,:,2), [h*2;0]);
444
445 clear H;H(1,1,2)=h;H(1:2,1,1)=%s;H=H*s;
446 assert_checkequal(H(:,:,1), rlist([s*s;s*s], [1;1]));
447 assert_checkequal(H(:,:,2), [h*s;0]);
448
449 clear H;H(1,1,2)=h;H(1:2,1,1)=%s;H=s*H;
450 assert_checkequal(H(:,:,1), rlist([s*s;s*s], [1;1]));
451 assert_checkequal(H(:,:,2), [h*s;0]);
452
453 // .*
454 clear H;H(1,1,2)=h;H(1:2,1,1)=%s;H=H.*h;
455 assert_checkequal(H(:,:,1), [s*h;s*h]);
456 assert_checkequal(H(:,:,2), [h*h;0/1]);
457
458 clear H;H(1,1,2)=h;H(1:2,1,1)=%s;H=h.*H;
459 assert_checkequal(H(:,:,1), [s*h;s*h]);
460 assert_checkequal(H(:,:,2), [h*h;0/1]);
461
462 clear H;H(1,1,2)=h;H(1:2,1,1)=%s;H=H.*2;
463 assert_checkequal(H(:,:,1), rlist([s*2;s*2], [1;1]));
464 assert_checkequal(H(:,:,2), [h*2;0]);
465
466 clear H;H(1,1,2)=h;H(1:2,1,1)=%s;H=2 .*H;
467 assert_checkequal(H(:,:,1), rlist([s*2;s*2], [1;1]));
468 assert_checkequal(H(:,:,2), [h*2;0]);
469
470 clear H;H(1,1,2)=h;H(1:2,1,1)=%s;H=H.*s;
471 assert_checkequal(H(:,:,1), rlist([s*s;s*s], [1;1]));
472 assert_checkequal(H(:,:,2), [h*s;0]);
473
474 clear H;H(1,1,2)=h;H(1:2,1,1)=%s;H=s.*H;
475 assert_checkequal(H(:,:,1), rlist([s*s;s*s], [1;1]));
476 assert_checkequal(H(:,:,2), [h*s;0]);
477
478 clear H;H(1,1,2)=h;H(1:2,1,1)=%s;H=H.*H;
479 assert_checkequal(H(:,:,1), rlist([s*s;s*s], [1;1]));
480 assert_checkequal(H(:,:,2), [h*h;0]);
481
482