]> gitweb.factorcode.org Git - factor.git/blob - extra/math/blas/matrices/matrices-tests.factor
Merge branch 'master' of git://factorcode.org/git/factor
[factor.git] / extra / math / blas / matrices / matrices-tests.factor
1 USING: kernel math.blas.matrices math.blas.vectors math.blas.syntax
2 sequences tools.test ;
3 IN: math.blas.matrices.tests
4
5 ! clone
6
7 [ smatrix{
8     { 1.0 2.0 3.0 }
9     { 4.0 5.0 6.0 }
10     { 7.0 8.0 9.0 }
11 } ] [
12     smatrix{
13         { 1.0 2.0 3.0 }
14         { 4.0 5.0 6.0 }
15         { 7.0 8.0 9.0 }
16     } clone
17 ] unit-test
18 [ f ] [
19     smatrix{
20         { 1.0 2.0 3.0 }
21         { 4.0 5.0 6.0 }
22         { 7.0 8.0 9.0 }
23     } dup clone eq?
24 ] unit-test
25
26 [ dmatrix{
27     { 1.0 2.0 3.0 }
28     { 4.0 5.0 6.0 }
29     { 7.0 8.0 9.0 }
30 } ] [
31     dmatrix{
32         { 1.0 2.0 3.0 }
33         { 4.0 5.0 6.0 }
34         { 7.0 8.0 9.0 }
35     } clone
36 ] unit-test
37 [ f ] [
38     dmatrix{
39         { 1.0 2.0 3.0 }
40         { 4.0 5.0 6.0 }
41         { 7.0 8.0 9.0 }
42     } dup clone eq?
43 ] unit-test
44
45 [ cmatrix{
46     { C{ 1.0 1.0 } 2.0          3.0          }
47     { 4.0          C{ 5.0 2.0 } 6.0          }
48     { 7.0          8.0          C{ 9.0 3.0 } }
49 } ] [
50     cmatrix{
51         { C{ 1.0 1.0 } 2.0          3.0          }
52         { 4.0          C{ 5.0 2.0 } 6.0          }
53         { 7.0          8.0          C{ 9.0 3.0 } }
54     } clone
55 ] unit-test
56 [ f ] [
57     cmatrix{
58         { C{ 1.0 1.0 } 2.0          3.0          }
59         { 4.0          C{ 5.0 2.0 } 6.0          }
60         { 7.0          8.0          C{ 9.0 3.0 } }
61     } dup clone eq?
62 ] unit-test
63
64 [ zmatrix{
65     { C{ 1.0 1.0 } 2.0          3.0          }
66     { 4.0          C{ 5.0 2.0 } 6.0          }
67     { 7.0          8.0          C{ 9.0 3.0 } }
68 } ] [
69     zmatrix{
70         { C{ 1.0 1.0 } 2.0          3.0          }
71         { 4.0          C{ 5.0 2.0 } 6.0          }
72         { 7.0          8.0          C{ 9.0 3.0 } }
73     } clone
74 ] unit-test
75 [ f ] [
76     zmatrix{
77         { C{ 1.0 1.0 } 2.0          3.0          }
78         { 4.0          C{ 5.0 2.0 } 6.0          }
79         { 7.0          8.0          C{ 9.0 3.0 } }
80     } dup clone eq?
81 ] unit-test
82
83 ! M.V
84
85 [ svector{ 3.0 1.0 6.0 } ] [
86     smatrix{
87         {  0.0 1.0 0.0 1.0 }
88         { -1.0 0.0 0.0 2.0 }
89         {  0.0 0.0 1.0 3.0 }
90     }
91     svector{ 1.0 2.0 3.0 1.0 }
92     M.V
93 ] unit-test 
94 [ svector{ -2.0 1.0 3.0 14.0 } ] [
95     smatrix{
96         {  0.0 1.0 0.0 1.0 }
97         { -1.0 0.0 0.0 2.0 }
98         {  0.0 0.0 1.0 3.0 }
99     } Mtranspose
100     svector{ 1.0 2.0 3.0 }
101     M.V
102 ] unit-test 
103
104 [ dvector{ 3.0 1.0 6.0 } ] [
105     dmatrix{
106         {  0.0 1.0 0.0 1.0 }
107         { -1.0 0.0 0.0 2.0 }
108         {  0.0 0.0 1.0 3.0 }
109     }
110     dvector{ 1.0 2.0 3.0 1.0 }
111     M.V
112 ] unit-test 
113 [ dvector{ -2.0 1.0 3.0 14.0 } ] [
114     dmatrix{
115         {  0.0 1.0 0.0 1.0 }
116         { -1.0 0.0 0.0 2.0 }
117         {  0.0 0.0 1.0 3.0 }
118     } Mtranspose
119     dvector{ 1.0 2.0 3.0 }
120     M.V
121 ] unit-test 
122
123 [ cvector{ 3.0 C{ 1.0 2.0 } 6.0 } ] [
124     cmatrix{
125         {  0.0 1.0          0.0 1.0 }
126         { -1.0 C{ 0.0 1.0 } 0.0 2.0 }
127         {  0.0 0.0          1.0 3.0 }
128     }
129     cvector{ 1.0 2.0 3.0 1.0 }
130     M.V
131 ] unit-test 
132 [ cvector{ -2.0 C{ 1.0 2.0 } 3.0 14.0 } ] [
133     cmatrix{
134         {  0.0 1.0          0.0 1.0 }
135         { -1.0 C{ 0.0 1.0 } 0.0 2.0 }
136         {  0.0 0.0          1.0 3.0 }
137     } Mtranspose
138     cvector{ 1.0 2.0 3.0 }
139     M.V
140 ] unit-test 
141
142 [ zvector{ 3.0 C{ 1.0 2.0 } 6.0 } ] [
143     zmatrix{
144         {  0.0 1.0          0.0 1.0 }
145         { -1.0 C{ 0.0 1.0 } 0.0 2.0 }
146         {  0.0 0.0          1.0 3.0 }
147     }
148     zvector{ 1.0 2.0 3.0 1.0 }
149     M.V
150 ] unit-test
151 [ zvector{ -2.0 C{ 1.0 2.0 } 3.0 14.0 } ] [
152     zmatrix{
153         {  0.0 1.0          0.0 1.0 }
154         { -1.0 C{ 0.0 1.0 } 0.0 2.0 }
155         {  0.0 0.0          1.0 3.0 }
156     } Mtranspose
157     zvector{ 1.0 2.0 3.0 }
158     M.V
159 ] unit-test 
160
161 ! V(*)
162
163 [ smatrix{
164     { 1.0 2.0 3.0  4.0 }
165     { 2.0 4.0 6.0  8.0 }
166     { 3.0 6.0 9.0 12.0 }
167 } ] [
168     svector{ 1.0 2.0 3.0 } svector{ 1.0 2.0 3.0 4.0 } V(*)
169 ] unit-test
170
171 [ dmatrix{
172     { 1.0 2.0 3.0  4.0 }
173     { 2.0 4.0 6.0  8.0 }
174     { 3.0 6.0 9.0 12.0 }
175 } ] [
176     dvector{ 1.0 2.0 3.0 } dvector{ 1.0 2.0 3.0 4.0 } V(*)
177 ] unit-test
178
179 [ cmatrix{
180     { 1.0          2.0          C{ 3.0 -3.0 } 4.0            }
181     { 2.0          4.0          C{ 6.0 -6.0 } 8.0            }
182     { C{ 3.0 3.0 } C{ 6.0 6.0 } 18.0          C{ 12.0 12.0 } }
183 } ] [
184     cvector{ 1.0 2.0 C{ 3.0 3.0 } } cvector{ 1.0 2.0 C{ 3.0 -3.0 } 4.0 } V(*)
185 ] unit-test
186
187 [ zmatrix{
188     { 1.0          2.0          C{ 3.0 -3.0 } 4.0            }
189     { 2.0          4.0          C{ 6.0 -6.0 } 8.0            }
190     { C{ 3.0 3.0 } C{ 6.0 6.0 } 18.0          C{ 12.0 12.0 } }
191 } ] [
192     zvector{ 1.0 2.0 C{ 3.0 3.0 } } zvector{ 1.0 2.0 C{ 3.0 -3.0 } 4.0 } V(*)
193 ] unit-test
194
195 ! M.
196
197 [ smatrix{
198     { 1.0 0.0  0.0 4.0  0.0 }
199     { 0.0 0.0 -3.0 0.0  0.0 }
200     { 0.0 4.0  0.0 0.0 10.0 }
201     { 0.0 0.0  0.0 0.0  0.0 }
202 } ] [
203     smatrix{
204         { 1.0 0.0  0.0 }
205         { 0.0 0.0 -1.0 }
206         { 0.0 2.0  0.0 }
207         { 0.0 0.0  0.0 }
208     } smatrix{
209         { 1.0 0.0 0.0 4.0 0.0 }
210         { 0.0 2.0 0.0 0.0 5.0 }
211         { 0.0 0.0 3.0 0.0 0.0 }
212     } M.
213 ] unit-test
214
215 [ smatrix{
216     { 1.0  0.0  0.0 0.0 }
217     { 0.0  0.0  4.0 0.0 }
218     { 0.0 -3.0  0.0 0.0 }
219     { 4.0  0.0  0.0 0.0 }
220     { 0.0  0.0 10.0 0.0 }
221 } ] [
222     smatrix{
223         { 1.0 0.0 0.0 4.0 0.0 }
224         { 0.0 2.0 0.0 0.0 5.0 }
225         { 0.0 0.0 3.0 0.0 0.0 }
226     } Mtranspose smatrix{
227         { 1.0 0.0  0.0 }
228         { 0.0 0.0 -1.0 }
229         { 0.0 2.0  0.0 }
230         { 0.0 0.0  0.0 }
231     } Mtranspose M.
232 ] unit-test
233
234 [ dmatrix{
235     { 1.0 0.0  0.0 4.0  0.0 }
236     { 0.0 0.0 -3.0 0.0  0.0 }
237     { 0.0 4.0  0.0 0.0 10.0 }
238     { 0.0 0.0  0.0 0.0  0.0 }
239 } ] [
240     dmatrix{
241         { 1.0 0.0  0.0 }
242         { 0.0 0.0 -1.0 }
243         { 0.0 2.0  0.0 }
244         { 0.0 0.0  0.0 }
245     } dmatrix{
246         { 1.0 0.0 0.0 4.0 0.0 }
247         { 0.0 2.0 0.0 0.0 5.0 }
248         { 0.0 0.0 3.0 0.0 0.0 }
249     } M.
250 ] unit-test
251
252 [ dmatrix{
253     { 1.0  0.0  0.0 0.0 }
254     { 0.0  0.0  4.0 0.0 }
255     { 0.0 -3.0  0.0 0.0 }
256     { 4.0  0.0  0.0 0.0 }
257     { 0.0  0.0 10.0 0.0 }
258 } ] [
259     dmatrix{
260         { 1.0 0.0 0.0 4.0 0.0 }
261         { 0.0 2.0 0.0 0.0 5.0 }
262         { 0.0 0.0 3.0 0.0 0.0 }
263     } Mtranspose dmatrix{
264         { 1.0 0.0  0.0 }
265         { 0.0 0.0 -1.0 }
266         { 0.0 2.0  0.0 }
267         { 0.0 0.0  0.0 }
268     } Mtranspose M.
269 ] unit-test
270
271 [ cmatrix{
272     { 1.0 0.0            0.0 4.0  0.0 }
273     { 0.0 0.0           -3.0 0.0  0.0 }
274     { 0.0 C{ 4.0 -4.0 }  0.0 0.0 10.0 }
275     { 0.0 0.0            0.0 0.0  0.0 }
276 } ] [
277     cmatrix{
278         { 1.0 0.0  0.0 }
279         { 0.0 0.0 -1.0 }
280         { 0.0 2.0  0.0 }
281         { 0.0 0.0  0.0 }
282     } cmatrix{
283         { 1.0 0.0           0.0 4.0 0.0 }
284         { 0.0 C{ 2.0 -2.0 } 0.0 0.0 5.0 }
285         { 0.0 0.0           3.0 0.0 0.0 }
286     } M.
287 ] unit-test
288
289 [ cmatrix{
290     { 1.0  0.0  0.0          0.0 }
291     { 0.0  0.0 C{ 4.0 -4.0 } 0.0 }
292     { 0.0 -3.0  0.0          0.0 }
293     { 4.0  0.0  0.0          0.0 }
294     { 0.0  0.0 10.0          0.0 }
295 } ] [
296     cmatrix{
297         { 1.0 0.0           0.0 4.0 0.0 }
298         { 0.0 C{ 2.0 -2.0 } 0.0 0.0 5.0 }
299         { 0.0 0.0           3.0 0.0 0.0 }
300     } Mtranspose cmatrix{
301         { 1.0 0.0  0.0 }
302         { 0.0 0.0 -1.0 }
303         { 0.0 2.0  0.0 }
304         { 0.0 0.0  0.0 }
305     } Mtranspose M.
306 ] unit-test
307
308 [ zmatrix{
309     { 1.0 0.0            0.0 4.0  0.0 }
310     { 0.0 0.0           -3.0 0.0  0.0 }
311     { 0.0 C{ 4.0 -4.0 }  0.0 0.0 10.0 }
312     { 0.0 0.0            0.0 0.0  0.0 }
313 } ] [
314     zmatrix{
315         { 1.0 0.0  0.0 }
316         { 0.0 0.0 -1.0 }
317         { 0.0 2.0  0.0 }
318         { 0.0 0.0  0.0 }
319     } zmatrix{
320         { 1.0 0.0           0.0 4.0 0.0 }
321         { 0.0 C{ 2.0 -2.0 } 0.0 0.0 5.0 }
322         { 0.0 0.0           3.0 0.0 0.0 }
323     } M.
324 ] unit-test
325
326 [ zmatrix{
327     { 1.0  0.0  0.0          0.0 }
328     { 0.0  0.0 C{ 4.0 -4.0 } 0.0 }
329     { 0.0 -3.0  0.0          0.0 }
330     { 4.0  0.0  0.0          0.0 }
331     { 0.0  0.0 10.0          0.0 }
332 } ] [
333     zmatrix{
334         { 1.0 0.0           0.0 4.0 0.0 }
335         { 0.0 C{ 2.0 -2.0 } 0.0 0.0 5.0 }
336         { 0.0 0.0           3.0 0.0 0.0 }
337     } Mtranspose zmatrix{
338         { 1.0 0.0  0.0 }
339         { 0.0 0.0 -1.0 }
340         { 0.0 2.0  0.0 }
341         { 0.0 0.0  0.0 }
342     } Mtranspose M.
343 ] unit-test
344
345 ! n*M
346
347 [ smatrix{
348     { 2.0 0.0 }
349     { 0.0 2.0 }
350 } ] [
351     2.0 smatrix{
352         { 1.0 0.0 }
353         { 0.0 1.0 }
354     } n*M
355 ] unit-test
356
357 [ dmatrix{
358     { 2.0 0.0 }
359     { 0.0 2.0 }
360 } ] [
361     2.0 dmatrix{
362         { 1.0 0.0 }
363         { 0.0 1.0 }
364     } n*M
365 ] unit-test
366
367 [ cmatrix{
368     { C{ 2.0 1.0 } 0.0           }
369     { 0.0          C{ -1.0 2.0 } }
370 } ] [
371     C{ 2.0 1.0 } cmatrix{
372         { 1.0 0.0          }
373         { 0.0 C{ 0.0 1.0 } }
374     } n*M
375 ] unit-test
376
377 [ zmatrix{
378     { C{ 2.0 1.0 } 0.0           }
379     { 0.0          C{ -1.0 2.0 } }
380 } ] [
381     C{ 2.0 1.0 } zmatrix{
382         { 1.0 0.0          }
383         { 0.0 C{ 0.0 1.0 } }
384     } n*M
385 ] unit-test
386
387 ! Mrows, Mcols
388
389 [ svector{ 3.0 3.0 3.0 } ] [
390     2 smatrix{
391         { 1.0 2.0 3.0 4.0 }
392         { 2.0 2.0 3.0 4.0 }
393         { 3.0 2.0 3.0 4.0 }
394     } Mcols nth
395 ] unit-test
396 [ svector{ 3.0 2.0 3.0 4.0 } ] [
397     2 smatrix{
398         { 1.0 2.0 3.0 4.0 }
399         { 2.0 2.0 3.0 4.0 }
400         { 3.0 2.0 3.0 4.0 }
401     } Mrows nth
402 ] unit-test
403 [ 3 ] [
404     smatrix{
405         { 1.0 2.0 3.0 4.0 }
406         { 2.0 2.0 3.0 4.0 }
407         { 3.0 2.0 3.0 4.0 }
408     } Mrows length
409 ] unit-test
410 [ 4 ] [
411     smatrix{
412         { 1.0 2.0 3.0 4.0 }
413         { 2.0 2.0 3.0 4.0 }
414         { 3.0 2.0 3.0 4.0 }
415     } Mcols length
416 ] unit-test
417 [ svector{ 3.0 3.0 3.0 } ] [
418     2 smatrix{
419         { 1.0 2.0 3.0 4.0 }
420         { 2.0 2.0 3.0 4.0 }
421         { 3.0 2.0 3.0 4.0 }
422     } Mtranspose Mrows nth
423 ] unit-test
424 [ svector{ 3.0 2.0 3.0 4.0 } ] [
425     2 smatrix{
426         { 1.0 2.0 3.0 4.0 }
427         { 2.0 2.0 3.0 4.0 }
428         { 3.0 2.0 3.0 4.0 }
429     } Mtranspose Mcols nth
430 ] unit-test
431 [ 3 ] [
432     smatrix{
433         { 1.0 2.0 3.0 4.0 }
434         { 2.0 2.0 3.0 4.0 }
435         { 3.0 2.0 3.0 4.0 }
436     } Mtranspose Mcols length
437 ] unit-test
438 [ 4 ] [
439     smatrix{
440         { 1.0 2.0 3.0 4.0 }
441         { 2.0 2.0 3.0 4.0 }
442         { 3.0 2.0 3.0 4.0 }
443     } Mtranspose Mrows length
444 ] unit-test
445
446 [ dvector{ 3.0 3.0 3.0 } ] [
447     2 dmatrix{
448         { 1.0 2.0 3.0 4.0 }
449         { 2.0 2.0 3.0 4.0 }
450         { 3.0 2.0 3.0 4.0 }
451     } Mcols nth
452 ] unit-test
453 [ dvector{ 3.0 2.0 3.0 4.0 } ] [
454     2 dmatrix{
455         { 1.0 2.0 3.0 4.0 }
456         { 2.0 2.0 3.0 4.0 }
457         { 3.0 2.0 3.0 4.0 }
458     } Mrows nth
459 ] unit-test
460 [ 3 ] [
461     dmatrix{
462         { 1.0 2.0 3.0 4.0 }
463         { 2.0 2.0 3.0 4.0 }
464         { 3.0 2.0 3.0 4.0 }
465     } Mrows length
466 ] unit-test
467 [ 4 ] [
468     dmatrix{
469         { 1.0 2.0 3.0 4.0 }
470         { 2.0 2.0 3.0 4.0 }
471         { 3.0 2.0 3.0 4.0 }
472     } Mcols length
473 ] unit-test
474 [ dvector{ 3.0 3.0 3.0 } ] [
475     2 dmatrix{
476         { 1.0 2.0 3.0 4.0 }
477         { 2.0 2.0 3.0 4.0 }
478         { 3.0 2.0 3.0 4.0 }
479     } Mtranspose Mrows nth
480 ] unit-test
481 [ dvector{ 3.0 2.0 3.0 4.0 } ] [
482     2 dmatrix{
483         { 1.0 2.0 3.0 4.0 }
484         { 2.0 2.0 3.0 4.0 }
485         { 3.0 2.0 3.0 4.0 }
486     } Mtranspose Mcols nth
487 ] unit-test
488 [ 3 ] [
489     dmatrix{
490         { 1.0 2.0 3.0 4.0 }
491         { 2.0 2.0 3.0 4.0 }
492         { 3.0 2.0 3.0 4.0 }
493     } Mtranspose Mcols length
494 ] unit-test
495 [ 4 ] [
496     dmatrix{
497         { 1.0 2.0 3.0 4.0 }
498         { 2.0 2.0 3.0 4.0 }
499         { 3.0 2.0 3.0 4.0 }
500     } Mtranspose Mrows length
501 ] unit-test
502
503 [ cvector{ C{ 3.0 1.0 } C{ 3.0 2.0 } C{ 3.0 3.0 } } ] [
504     2 cmatrix{
505         { C{ 1.0 1.0 } C{ 2.0 1.0 } C{ 3.0 1.0 } C{ 4.0 1.0 } }
506         { C{ 1.0 2.0 } C{ 2.0 2.0 } C{ 3.0 2.0 } C{ 4.0 2.0 } }
507         { C{ 1.0 3.0 } C{ 2.0 3.0 } C{ 3.0 3.0 } C{ 4.0 3.0 } }
508     } Mcols nth
509 ] unit-test
510 [ cvector{ C{ 1.0 3.0 } C{ 2.0 3.0 } C{ 3.0 3.0 } C{ 4.0 3.0 } } ] [
511     2 cmatrix{
512         { C{ 1.0 1.0 } C{ 2.0 1.0 } C{ 3.0 1.0 } C{ 4.0 1.0 } }
513         { C{ 1.0 2.0 } C{ 2.0 2.0 } C{ 3.0 2.0 } C{ 4.0 2.0 } }
514         { C{ 1.0 3.0 } C{ 2.0 3.0 } C{ 3.0 3.0 } C{ 4.0 3.0 } }
515     } Mrows nth
516 ] unit-test
517 [ 3 ] [
518     cmatrix{
519         { C{ 1.0 1.0 } C{ 2.0 1.0 } C{ 3.0 1.0 } C{ 4.0 1.0 } }
520         { C{ 1.0 2.0 } C{ 2.0 2.0 } C{ 3.0 2.0 } C{ 4.0 2.0 } }
521         { C{ 1.0 3.0 } C{ 2.0 3.0 } C{ 3.0 3.0 } C{ 4.0 3.0 } }
522     } Mrows length
523 ] unit-test
524 [ 4 ] [
525     cmatrix{
526         { C{ 1.0 1.0 } C{ 2.0 1.0 } C{ 3.0 1.0 } C{ 4.0 1.0 } }
527         { C{ 1.0 2.0 } C{ 2.0 2.0 } C{ 3.0 2.0 } C{ 4.0 2.0 } }
528         { C{ 1.0 3.0 } C{ 2.0 3.0 } C{ 3.0 3.0 } C{ 4.0 3.0 } }
529     } Mcols length
530 ] unit-test
531 [ cvector{ C{ 3.0 1.0 } C{ 3.0 2.0 } C{ 3.0 3.0 } } ] [
532     2 cmatrix{
533         { C{ 1.0 1.0 } C{ 2.0 1.0 } C{ 3.0 1.0 } C{ 4.0 1.0 } }
534         { C{ 1.0 2.0 } C{ 2.0 2.0 } C{ 3.0 2.0 } C{ 4.0 2.0 } }
535         { C{ 1.0 3.0 } C{ 2.0 3.0 } C{ 3.0 3.0 } C{ 4.0 3.0 } }
536     } Mtranspose Mrows nth
537 ] unit-test
538 [ cvector{ C{ 1.0 3.0 } C{ 2.0 3.0 } C{ 3.0 3.0 } C{ 4.0 3.0 } } ] [
539     2 cmatrix{
540         { C{ 1.0 1.0 } C{ 2.0 1.0 } C{ 3.0 1.0 } C{ 4.0 1.0 } }
541         { C{ 1.0 2.0 } C{ 2.0 2.0 } C{ 3.0 2.0 } C{ 4.0 2.0 } }
542         { C{ 1.0 3.0 } C{ 2.0 3.0 } C{ 3.0 3.0 } C{ 4.0 3.0 } }
543     } Mtranspose Mcols nth
544 ] unit-test
545 [ 3 ] [
546     cmatrix{
547         { C{ 1.0 1.0 } C{ 2.0 1.0 } C{ 3.0 1.0 } C{ 4.0 1.0 } }
548         { C{ 1.0 2.0 } C{ 2.0 2.0 } C{ 3.0 2.0 } C{ 4.0 2.0 } }
549         { C{ 1.0 3.0 } C{ 2.0 3.0 } C{ 3.0 3.0 } C{ 4.0 3.0 } }
550     } Mtranspose Mcols length
551 ] unit-test
552 [ 4 ] [
553     cmatrix{
554         { C{ 1.0 1.0 } C{ 2.0 1.0 } C{ 3.0 1.0 } C{ 4.0 1.0 } }
555         { C{ 1.0 2.0 } C{ 2.0 2.0 } C{ 3.0 2.0 } C{ 4.0 2.0 } }
556         { C{ 1.0 3.0 } C{ 2.0 3.0 } C{ 3.0 3.0 } C{ 4.0 3.0 } }
557     } Mtranspose Mrows length
558 ] unit-test
559
560 [ zvector{ C{ 3.0 1.0 } C{ 3.0 2.0 } C{ 3.0 3.0 } } ] [
561     2 zmatrix{
562         { C{ 1.0 1.0 } C{ 2.0 1.0 } C{ 3.0 1.0 } C{ 4.0 1.0 } }
563         { C{ 1.0 2.0 } C{ 2.0 2.0 } C{ 3.0 2.0 } C{ 4.0 2.0 } }
564         { C{ 1.0 3.0 } C{ 2.0 3.0 } C{ 3.0 3.0 } C{ 4.0 3.0 } }
565     } Mcols nth
566 ] unit-test
567 [ zvector{ C{ 1.0 3.0 } C{ 2.0 3.0 } C{ 3.0 3.0 } C{ 4.0 3.0 } } ] [
568     2 zmatrix{
569         { C{ 1.0 1.0 } C{ 2.0 1.0 } C{ 3.0 1.0 } C{ 4.0 1.0 } }
570         { C{ 1.0 2.0 } C{ 2.0 2.0 } C{ 3.0 2.0 } C{ 4.0 2.0 } }
571         { C{ 1.0 3.0 } C{ 2.0 3.0 } C{ 3.0 3.0 } C{ 4.0 3.0 } }
572     } Mrows nth
573 ] unit-test
574 [ 3 ] [
575     zmatrix{
576         { C{ 1.0 1.0 } C{ 2.0 1.0 } C{ 3.0 1.0 } C{ 4.0 1.0 } }
577         { C{ 1.0 2.0 } C{ 2.0 2.0 } C{ 3.0 2.0 } C{ 4.0 2.0 } }
578         { C{ 1.0 3.0 } C{ 2.0 3.0 } C{ 3.0 3.0 } C{ 4.0 3.0 } }
579     } Mrows length
580 ] unit-test
581 [ 4 ] [
582     zmatrix{
583         { C{ 1.0 1.0 } C{ 2.0 1.0 } C{ 3.0 1.0 } C{ 4.0 1.0 } }
584         { C{ 1.0 2.0 } C{ 2.0 2.0 } C{ 3.0 2.0 } C{ 4.0 2.0 } }
585         { C{ 1.0 3.0 } C{ 2.0 3.0 } C{ 3.0 3.0 } C{ 4.0 3.0 } }
586     } Mcols length
587 ] unit-test
588 [ zvector{ C{ 3.0 1.0 } C{ 3.0 2.0 } C{ 3.0 3.0 } } ] [
589     2 zmatrix{
590         { C{ 1.0 1.0 } C{ 2.0 1.0 } C{ 3.0 1.0 } C{ 4.0 1.0 } }
591         { C{ 1.0 2.0 } C{ 2.0 2.0 } C{ 3.0 2.0 } C{ 4.0 2.0 } }
592         { C{ 1.0 3.0 } C{ 2.0 3.0 } C{ 3.0 3.0 } C{ 4.0 3.0 } }
593     } Mtranspose Mrows nth
594 ] unit-test
595 [ zvector{ C{ 1.0 3.0 } C{ 2.0 3.0 } C{ 3.0 3.0 } C{ 4.0 3.0 } } ] [
596     2 zmatrix{
597         { C{ 1.0 1.0 } C{ 2.0 1.0 } C{ 3.0 1.0 } C{ 4.0 1.0 } }
598         { C{ 1.0 2.0 } C{ 2.0 2.0 } C{ 3.0 2.0 } C{ 4.0 2.0 } }
599         { C{ 1.0 3.0 } C{ 2.0 3.0 } C{ 3.0 3.0 } C{ 4.0 3.0 } }
600     } Mtranspose Mcols nth
601 ] unit-test
602 [ 3 ] [
603     zmatrix{
604         { C{ 1.0 1.0 } C{ 2.0 1.0 } C{ 3.0 1.0 } C{ 4.0 1.0 } }
605         { C{ 1.0 2.0 } C{ 2.0 2.0 } C{ 3.0 2.0 } C{ 4.0 2.0 } }
606         { C{ 1.0 3.0 } C{ 2.0 3.0 } C{ 3.0 3.0 } C{ 4.0 3.0 } }
607     } Mtranspose Mcols length
608 ] unit-test
609 [ 4 ] [
610     zmatrix{
611         { C{ 1.0 1.0 } C{ 2.0 1.0 } C{ 3.0 1.0 } C{ 4.0 1.0 } }
612         { C{ 1.0 2.0 } C{ 2.0 2.0 } C{ 3.0 2.0 } C{ 4.0 2.0 } }
613         { C{ 1.0 3.0 } C{ 2.0 3.0 } C{ 3.0 3.0 } C{ 4.0 3.0 } }
614     } Mtranspose Mrows length
615 ] unit-test
616
617 ! Msub
618
619 [ smatrix{
620     { 3.0 2.0 1.0 }
621     { 0.0 1.0 0.0 }
622 } ] [
623     smatrix{
624         { 0.0 1.0 2.0 3.0 2.0 }
625         { 1.0 0.0 3.0 2.0 1.0 }
626         { 2.0 3.0 0.0 1.0 0.0 }
627     } 1 2 2 3 Msub
628 ] unit-test
629
630 [ smatrix{
631     { 3.0 0.0 }
632     { 2.0 1.0 }
633     { 1.0 0.0 }
634 } ] [
635     smatrix{
636         { 0.0 1.0 2.0 3.0 2.0 }
637         { 1.0 0.0 3.0 2.0 1.0 }
638         { 2.0 3.0 0.0 1.0 0.0 }
639     } Mtranspose 2 1 3 2 Msub
640 ] unit-test
641
642 [ dmatrix{
643     { 3.0 2.0 1.0 }
644     { 0.0 1.0 0.0 }
645 } ] [
646     dmatrix{
647         { 0.0 1.0 2.0 3.0 2.0 }
648         { 1.0 0.0 3.0 2.0 1.0 }
649         { 2.0 3.0 0.0 1.0 0.0 }
650     } 1 2 2 3 Msub
651 ] unit-test
652
653 [ dmatrix{
654     { 3.0 0.0 }
655     { 2.0 1.0 }
656     { 1.0 0.0 }
657 } ] [
658     dmatrix{
659         { 0.0 1.0 2.0 3.0 2.0 }
660         { 1.0 0.0 3.0 2.0 1.0 }
661         { 2.0 3.0 0.0 1.0 0.0 }
662     } Mtranspose 2 1 3 2 Msub
663 ] unit-test
664
665 [ cmatrix{
666     { C{ 3.0 3.0 } 2.0 1.0 }
667     { 0.0          1.0 0.0 }
668 } ] [
669     cmatrix{
670         { 0.0 1.0 2.0          3.0 2.0 }
671         { 1.0 0.0 C{ 3.0 3.0 } 2.0 1.0 }
672         { 2.0 3.0 0.0          1.0 0.0 }
673     } 1 2 2 3 Msub
674 ] unit-test
675
676 [ cmatrix{
677     { C{ 3.0 3.0 } 0.0 }
678     { 2.0          1.0 }
679     { 1.0          0.0 }
680 } ] [
681     cmatrix{
682         { 0.0 1.0 2.0          3.0 2.0 }
683         { 1.0 0.0 C{ 3.0 3.0 } 2.0 1.0 }
684         { 2.0 3.0 0.0          1.0 0.0 }
685     } Mtranspose 2 1 3 2 Msub
686 ] unit-test
687
688 [ zmatrix{
689     { C{ 3.0 3.0 } 2.0 1.0 }
690     { 0.0          1.0 0.0 }
691 } ] [
692     zmatrix{
693         { 0.0 1.0 2.0          3.0 2.0 }
694         { 1.0 0.0 C{ 3.0 3.0 } 2.0 1.0 }
695         { 2.0 3.0 0.0          1.0 0.0 }
696     } 1 2 2 3 Msub
697 ] unit-test
698
699 [ zmatrix{
700     { C{ 3.0 3.0 } 0.0 }
701     { 2.0          1.0 }
702     { 1.0          0.0 }
703 } ] [
704     zmatrix{
705         { 0.0 1.0 2.0          3.0 2.0 }
706         { 1.0 0.0 C{ 3.0 3.0 } 2.0 1.0 }
707         { 2.0 3.0 0.0          1.0 0.0 }
708     } Mtranspose 2 1 3 2 Msub
709 ] unit-test
710