restore tests from operations module
[scilab.git] / scilab / modules / ast / tests / unit_tests / addition.tst
1 // ============================================================================
2 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 // Copyright (C) 2012 - DIGITEO - Antoine ELIAS
4 //
5 //  This file is distributed under the same license as the Scilab package.
6 // ============================================================================
7
8 // <-- JVM NOT MANDATORY -->
9
10 r = 2;
11 R = [1,2;3,4];
12 R3(:,:,1) = R;
13 R3(:,:,2) = R';
14 c = 1 + 2*%i;
15 C = [1+2*%i,2+4*%i;3+6*%i,4+8*%i];
16 C3(:,:,1) = C;
17 C3(:,:,2) = C';
18 e = eye();
19 ei = (5+%i) * eye();
20 p = 1 + %s - %s**2;
21 pc = 1 + %s - %s**2 + ( 2 - 3 * %s + 4 * %s**2 ) * %i;
22 P = [2*p, -3*p;4*p,-5*p];
23 PC = [2*pc, -3*pc;4*pc,-5*pc];
24 SP = sparse([1,2;4,5;3,10],[1,2,3]);
25 SPC = sparse([1,2;4,5;3,10],[1,2,3]) + sparse([1,2;4,5;3,10],[1,2,3]) * -4*%i;
26
27 assert_checkequal((1:3) + 1, 2:4);
28 assert_checkequal((1:3) + (4:6), [5 7 9]);
29 assert_checkequal(1 + (1:3), 2:4);
30
31 //[] + []
32 assert_checkequal([] + [], []);
33
34 //double + []
35 //r + []
36 assert_checkequal(r + [], r);
37 //c + []
38 assert_checkequal(c + [], c);
39
40 //[] + double
41 //[] + r
42 assert_checkequal([] + r, r);
43 //[] + c
44 assert_checkequal([] + c, c);
45
46 //DOUBLE + []
47 //R + []
48 assert_checkequal(R + [], R);
49 //C + []
50 assert_checkequal(C + [], C);
51
52 //[] + DOUBLE
53 //[] + R
54 assert_checkequal([] + R, R);
55 //[] + C
56 assert_checkequal([] + C, C);
57
58
59 // double + double
60
61 //r + r
62 assert_checkequal(r + r, 4);
63 //r + c
64 assert_checkequal(r + c, 3+2*%i);
65 //c + r
66 assert_checkequal(c + r, 3+2*%i);
67 //c + c
68 assert_checkequal(c + c, 2+4*%i);
69
70
71 //double + DOUBLE
72
73 //r + R
74 assert_checkequal(r + R, [3,4;5,6]);
75 rR3ref(:,:,1) = [3,4;5,6];
76 rR3ref(:,:,2) = [3,5;4,6];
77 assert_checkequal(r + R3, rR3ref);
78 //r + C
79 assert_checkequal(r + C, [3+2*%i,4+4*%i;5+6*%i,6+8*%i]);
80 rC3ref(:,:,1) = [3+2*%i,4+4*%i;5+6*%i,6+8*%i];
81 rC3ref(:,:,2) = [3-2*%i,5-6*%i;4-4*%i,6-8*%i];
82 assert_checkequal(r + C3, rC3ref);
83 //c + R
84 assert_checkequal(c + R, [2+2*%i,3+2*%i;4+2*%i,5+2*%i]);
85 cR3ref(:,:,1) = [2+2*%i,3+2*%i;4+2*%i,5+2*%i];
86 cR3ref(:,:,2) = [2+2*%i,4+2*%i;3+2*%i,5+2*%i];
87 assert_checkequal(c + R3, cR3ref);
88 //c + C
89 assert_checkequal(c + C, [2+4*%i,3+6*%i;4+8*%i,5+10*%i]);
90 cC3ref(:,:,1) = [2+4*%i,3+6*%i;4+8*%i,5+10*%i];
91 cC3ref(:,:,2) = [2,4-4*%i;3-2*%i,5-6*%i];
92 assert_checkequal(c + C3, cC3ref);
93
94
95 //DOUBLE + double
96
97 //R + r
98 assert_checkequal(R + r, [3,4;5,6]);
99 R3rref(:,:,1) = [3,4;5,6];
100 R3rref(:,:,2) = [3,5;4,6];
101 assert_checkequal(R3 + r, R3rref);
102 //R + c
103 assert_checkequal(R + c, [2+2*%i,3+2*%i;4+2*%i,5+2*%i]);
104 R3cref(:,:,1) = [2+2*%i,3+2*%i;4+2*%i,5+2*%i];
105 R3cref(:,:,2) = [2+2*%i,4+2*%i;3+2*%i,5+2*%i];
106 assert_checkequal(R3 + c, R3cref);
107 //C + r
108 assert_checkequal(C + r, [3+2*%i,4+4*%i;5+6*%i,6+8*%i]);
109 C3rref(:,:,1) = [3+2*%i,4+4*%i;5+6*%i,6+8*%i];
110 C3rref(:,:,2) = [3-2*%i,5-6*%i;4-4*%i,6-8*%i];
111 assert_checkequal(C3 + r, C3rref);
112 //c + c
113 assert_checkequal(C + c, [2+4*%i,3+6*%i;4+8*%i,5+10*%i]);
114 C3cref(:,:,1) = [2+4*%i,3+6*%i;4+8*%i,5+10*%i];
115 C3cref(:,:,2) = [2,4-4*%i;3-2*%i,5-6*%i];
116 assert_checkequal(C3 + c, C3cref);
117
118
119 //DOUBLE + DOUBLE
120 //R + R
121 assert_checkequal(R + R, [2,4;6,8]);
122 R3R3ref(:,:,1) = [2,4;6,8];
123 R3R3ref(:,:,2) = [2,6;4,8];
124 assert_checkequal(R3 + R3, R3R3ref);
125 //R + C
126 assert_checkequal(R + C, [2+2*%i,4+4*%i;6+6*%i,8+8*%i]);
127 R3C3ref(:,:,1) = [2+2*%i,4+4*%i;6+6*%i,8+8*%i];
128 R3C3ref(:,:,2) = [2-2*%i,6-6*%i;4-4*%i,8-8*%i];
129 assert_checkequal(R3 + C3, R3C3ref);
130 //C + R
131 assert_checkequal(C + R, [2+2*%i,4+4*%i;6+6*%i,8+8*%i]);
132 C3R3ref(:,:,1) = [2+2*%i,4+4*%i;6+6*%i,8+8*%i];
133 C3R3ref(:,:,2) = [2-2*%i,6-6*%i;4-4*%i,8-8*%i];
134 assert_checkequal(C3 + R3, C3R3ref);
135 //C + C
136 assert_checkequal(C + C, [2+4*%i,4+8*%i;6+12*%i,8+16*%i]);
137 C3C3ref(:,:,1) = [2+4*%i,4+8*%i;6+12*%i,8+16*%i];
138 C3C3ref(:,:,2) = [2-4*%i,6-12*%i;4-8*%i,8-16*%i];
139 assert_checkequal(C3 + C3, C3C3ref);
140
141 //identity
142 //e + R
143 assert_checkequal(e + R, [2 2 ;3 5]);
144 //R + e
145 assert_checkequal(R + e, [2 2 ;3 5]);
146
147 //e + C
148 assert_checkequal(e + C, [2+2*%i,2+4*%i;3+6*%i,5+8*%i]);
149 //C + e
150 assert_checkequal(C + e, [2+2*%i,2+4*%i;3+6*%i,5+8*%i]);
151
152 //e + r
153 assert_checkequal(e + r, 3);
154 //r + e
155 assert_checkequal(r + e, 3);
156
157 //e + c
158 assert_checkequal(e + c, 2+2*%i);
159 //c + e
160 assert_checkequal(c + e, 2+2*%i);
161
162 //e + []
163 assert_checkequal(e + [], e);
164 //[] + e
165 assert_checkequal([] + e, e);
166
167 //e + e
168 assert_checkequal(e + e, 2* eye());
169 //e + ei
170 assert_checkequal(e + ei, (6+%i) * eye());
171
172
173 //identity complex
174 //ei + R
175 assert_checkequal(ei + R, [6+%i,2;3,9+%i]);
176 //R + ei
177 assert_checkequal(R + ei, [6+%i,2;3,9+%i]);
178
179 //ei + C
180 assert_checkequal(ei + C, [6+3*%i,2+4*%i;3+6*%i,9+9*%i]);
181 //C + ei
182 assert_checkequal(C + ei, [6+3*%i,2+4*%i;3+6*%i,9+9*%i]);
183
184 //ei + r
185 assert_checkequal(ei + r, 7 + %i);
186 //r + ei
187 assert_checkequal(r + ei, 7 + %i);
188
189 //ei + c
190 assert_checkequal(ei + c, 6+3*%i);
191 //c + ei
192 assert_checkequal(c + ei, 6+3*%i);
193
194 //ei + []
195 assert_checkequal(ei + [], ei);
196 //[] + ei
197 assert_checkequal([] + ei, ei);
198
199 //ei + e
200 assert_checkequal(ei + e, (6+%i) * eye());
201 //ei + ei
202 assert_checkequal(ei + ei, (10+2*%i) * eye());
203
204 //poly
205 //p + []
206 assert_checkequal(p + [], p);
207 //[] + p
208 assert_checkequal([] + p, p);
209 //pc + []
210 assert_checkequal(pc + [], pc);
211 //[] + pc
212 assert_checkequal([] + pc, pc);
213 //P + []
214 assert_checkequal(P + [], P);
215 //[] + P
216 assert_checkequal([] + P, P);
217 //PC + []
218 assert_checkequal(PC + [], PC);
219 //[] + PC
220 assert_checkequal([] + PC, PC);
221
222 //p + r
223 assert_checkequal(p + r, 3+%s-%s**2);
224 //r + p
225 assert_checkequal(r + p, 3+%s-%s**2);
226 //p + c
227 assert_checkequal(p + c, 2+%s-%s**2 + 2*%i);
228 //c + p
229 assert_checkequal(c + p, 2+%s-%s**2 + 2*%i);
230
231 //p + R
232 assert_checkequal(p + R, [2+%s-%s**2,3+%s-%s**2;4+%s-%s**2,5+%s-%s**2]);
233 //R + p
234 assert_checkequal(R + p, [2+%s-%s**2,3+%s-%s**2;4+%s-%s**2,5+%s-%s**2]);
235 //p + C
236 assert_checkequal(p + C, [2+%s-%s**2+2*%i,3+%s-%s**2+4*%i;4+%s-%s**2+6*%i,5+%s-%s**2+8*%i]);
237 //C + p
238 assert_checkequal(C + p, [2+%s-%s**2+2*%i,3+%s-%s**2+4*%i;4+%s-%s**2+6*%i,5+%s-%s**2+8*%i]);
239
240 //p + p
241 assert_checkequal(p + p, 2 + 2*%s - 2*%s**2);
242 //p + pc
243 assert_checkequal(p + pc, 2 + 2*%s - 2*%s**2 + (2-3*%s+4*%s**2) * %i);
244 //pc + p
245 assert_checkequal(pc + p, 2 + 2*%s - 2*%s**2 + (2-3*%s+4*%s**2) * %i);
246 //pc + pc
247 assert_checkequal(pc + pc, 2 + 2*%s - 2*%s**2 + (4-6*%s+8*%s**2) * %i);
248
249 //P + p
250 assert_checkequal(P + p, [3+3*%s-3*%s**2,-2-2*%s+2*%s**2;5+5*%s-5*%s**2,-4-4*%s+4*%s**2]);
251 //p + P
252 assert_checkequal(p + P, [3+3*%s-3*%s**2,-2-2*%s+2*%s**2;5+5*%s-5*%s**2,-4-4*%s+4*%s**2]);
253 //P + pc
254 assert_checkequal(P + pc, [3+3*%s-3*%s**2+(2-3*%s+4*%s**2)*%i,-2-2*%s+2*%s**2+(2-3*%s+4*%s**2)*%i;5+5*%s-5*%s**2+(2-3*%s+4*%s**2)*%i,-4-4*%s+4*%s**2+(2-3*%s+4*%s**2)*%i]);
255 //pc + P
256 assert_checkequal(pc + P, [3+3*%s-3*%s**2+(2-3*%s+4*%s**2)*%i,-2-2*%s+2*%s**2+(2-3*%s+4*%s**2)*%i;5+5*%s-5*%s**2+(2-3*%s+4*%s**2)*%i,-4-4*%s+4*%s**2+(2-3*%s+4*%s**2)*%i]);
257 //PC + p
258 assert_checkequal(PC + p, [3+3*%s-3*%s**2+(4-6*%s+8*%s**2)*%i,-2-2*%s+2*%s**2+(-6+9*%s-12*%s**2)*%i;5+5*%s-5*%s**2+(8-12*%s+16*%s**2)*%i,-4-4*%s+4*%s**2+(-10+15*%s-20*%s**2)*%i]);
259 //p + PC
260 assert_checkequal(p + PC, [3+3*%s-3*%s**2+(4-6*%s+8*%s**2)*%i,-2-2*%s+2*%s**2+(-6+9*%s-12*%s**2)*%i;5+5*%s-5*%s**2+(8-12*%s+16*%s**2)*%i,-4-4*%s+4*%s**2+(-10+15*%s-20*%s**2)*%i]);
261 //PC + pc
262 assert_checkequal(PC + pc, [3+3*%s-3*%s**2+(6-9*%s+12*%s**2)*%i,-2-2*%s+2*%s**2+(-4+6*%s-8*%s**2)*%i;5+5*%s-5*%s**2+(10-15*%s+20*%s**2)*%i,-4-4*%s+4*%s**2+(-8+12*%s-16*%s**2)*%i]);
263 //pc + PC
264 assert_checkequal(pc + PC, [3+3*%s-3*%s**2+(6-9*%s+12*%s**2)*%i,-2-2*%s+2*%s**2+(-4+6*%s-8*%s**2)*%i;5+5*%s-5*%s**2+(10-15*%s+20*%s**2)*%i,-4-4*%s+4*%s**2+(-8+12*%s-16*%s**2)*%i]);
265
266 //P + P
267 assert_checkequal(P + P, [4+4*%s-4*%s**2,-6-6*%s+6*%s**2;8+8*%s-8*%s**2,-10-10*%s+10*%s**2]);
268 //P + PC
269 assert_checkequal(P + PC, [4+4*%s-4*%s**2+(4-6*%s+8*%s**2)*%i,-6-6*%s+6*%s**2+(-6+9*%s-12*%s**2)*%i;8+8*%s-8*%s**2+(8-12*%s+16*%s**2)*%i,-10-10*%s+10*%s**2+(-10+15*%s-20*%s**2)*%i]);
270 //PC + P
271 assert_checkequal(PC + P, [4+4*%s-4*%s**2+(4-6*%s+8*%s**2)*%i,-6-6*%s+6*%s**2+(-6+9*%s-12*%s**2)*%i;8+8*%s-8*%s**2+(8-12*%s+16*%s**2)*%i,-10-10*%s+10*%s**2+(-10+15*%s-20*%s**2)*%i]);
272 //PC + PC
273 assert_checkequal(PC + PC, [4+4*%s-4*%s**2+(8-12*%s+16*%s**2)*%i,-6-6*%s+6*%s**2+(-12+18*%s-24*%s**2)*%i;8+8*%s-8*%s**2+(16-24*%s+32*%s**2)*%i,-10-10*%s+10*%s**2+(-20+30*%s-40*%s**2)*%i]);
274
275
276 //sparse
277 //SP + []
278 assert_checkequal(SP + [], SP);
279 //[] + SP
280 assert_checkequal([] + SP, SP);
281 //SPC + []
282 assert_checkequal(SPC + [], SPC);
283 //[] + SPC
284 assert_checkequal([] + SPC, SPC);
285
286 //SP + r
287 assert_checkequal(SP + r, full(SP) + r);
288 //r + SP
289 assert_checkequal(r + SP, full(SP) + r);
290 //SP + c
291 assert_checkequal(SP + c, full(SP) + c);
292 //c + SP
293 assert_checkequal(c + SP, full(SP) + c);
294 //SPC + r
295 assert_checkequal(SPC + r, full(SPC) + r);
296 //r + SPC
297 assert_checkequal(r + SPC, full(SPC) + r);
298 //SPC + c
299 assert_checkequal(SPC + c, full(SPC) + c);
300 //c + SPC
301 assert_checkequal(c + SPC, full(SPC) + c);
302
303 //SP + SP
304 assert_checkequal(SP + SP, sparse(full(SP) + full(SP)));
305 //SP + SPC
306 assert_checkequal(SP + SPC, sparse(full(SP) + full(SPC)));
307 //SPC + SP
308 assert_checkequal(SPC + SP, sparse(full(SPC) + full(SP)));
309 //SPC + SPC
310 assert_checkequal(SPC + SPC, sparse(full(SPC) + full(SPC)));