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