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