Chris@97
|
1
|
Chris@97
|
2 module yetilab.matrix.test.test_matrix;
|
Chris@97
|
3
|
Chris@97
|
4 mat = load yetilab.matrix.matrix;
|
Chris@97
|
5 block = load yetilab.block.block;
|
Chris@97
|
6
|
Chris@98
|
7 import yeti.lang: FailureException;
|
Chris@98
|
8
|
Chris@97
|
9 { compare } = load yetilab.test.test;
|
Chris@97
|
10
|
Chris@97
|
11 [
|
Chris@97
|
12
|
Chris@97
|
13 "constMatrixEmpty": \(
|
Chris@98
|
14 m = mat.constMatrix 2 { rows = 0, columns = 0 };
|
Chris@97
|
15 compare m.size { columns = 0, rows = 0 }
|
Chris@97
|
16 ),
|
Chris@97
|
17
|
Chris@97
|
18 "constMatrixEmpty2": \(
|
Chris@98
|
19 compare (mat.constMatrix 2 { rows = 0, columns = 4 }).size { columns = 0, rows = 0 } and
|
Chris@98
|
20 compare (mat.constMatrix 2 { rows = 4, columns = 0 }).size { columns = 0, rows = 0 }
|
Chris@97
|
21 ),
|
Chris@97
|
22
|
Chris@97
|
23 "constMatrix": \(
|
Chris@98
|
24 m = mat.constMatrix 2 { rows = 3, columns = 4 };
|
Chris@97
|
25 compare m.size { columns = 4, rows = 3 } and
|
Chris@97
|
26 all id (map do row: compare (block.list (m.getRow row)) [2,2,2,2] done [0..2]) and
|
Chris@97
|
27 all id (map do col: compare (block.list (m.getColumn col)) [2,2,2] done [0..3])
|
Chris@97
|
28 ),
|
Chris@97
|
29
|
Chris@97
|
30 "randomMatrixEmpty": \(
|
Chris@98
|
31 m = mat.randomMatrix { rows = 0, columns = 0 };
|
Chris@97
|
32 compare m.size { columns = 0, rows = 0 }
|
Chris@97
|
33 ),
|
Chris@97
|
34
|
Chris@97
|
35 "randomMatrix": \(
|
Chris@98
|
36 m = mat.randomMatrix { rows = 3, columns = 4 };
|
Chris@97
|
37 compare m.size { columns = 4, rows = 3 }
|
Chris@97
|
38 ),
|
Chris@97
|
39
|
Chris@97
|
40 "zeroMatrixEmpty": \(
|
Chris@98
|
41 m = mat.zeroMatrix { rows = 0, columns = 0 };
|
Chris@97
|
42 compare m.size { columns = 0, rows = 0 }
|
Chris@97
|
43 ),
|
Chris@97
|
44
|
Chris@97
|
45 "zeroMatrix": \(
|
Chris@98
|
46 m = mat.zeroMatrix { rows = 3, columns = 4 };
|
Chris@97
|
47 compare m.size { columns = 4, rows = 3 } and
|
Chris@97
|
48 all id (map do row: compare (block.list (m.getRow row)) [0,0,0,0] done [0..2]) and
|
Chris@97
|
49 all id (map do col: compare (block.list (m.getColumn col)) [0,0,0] done [0..3])
|
Chris@97
|
50 ),
|
Chris@97
|
51
|
Chris@97
|
52 "identityMatrixEmpty": \(
|
Chris@98
|
53 m = mat.identityMatrix { rows = 0, columns = 0 };
|
Chris@97
|
54 compare m.size { columns = 0, rows = 0 }
|
Chris@97
|
55 ),
|
Chris@97
|
56
|
Chris@97
|
57 "identityMatrix": \(
|
Chris@98
|
58 m = mat.identityMatrix { rows = 3, columns = 4 };
|
Chris@97
|
59 compare m.size { columns = 4, rows = 3 } and
|
Chris@97
|
60 all id (map do row: compare (block.list (m.getRow row)) [1,1,1,1] done [0..2]) and
|
Chris@97
|
61 all id (map do col: compare (block.list (m.getColumn col)) [1,1,1] done [0..3])
|
Chris@97
|
62 ),
|
Chris@97
|
63
|
Chris@97
|
64 "generateEmpty": \(
|
Chris@98
|
65 m = mat.generate do row col: 0 done { rows = 0, columns = 0 };
|
Chris@97
|
66 compare m.size { columns = 0, rows = 0 }
|
Chris@97
|
67 ),
|
Chris@97
|
68
|
Chris@97
|
69 "generate": \(
|
Chris@98
|
70 m = mat.generate do row col: row * 10 + col done { rows = 2, columns = 3 };
|
Chris@97
|
71 compare (block.list (m.getRow 0)) [0,1,2] and
|
Chris@97
|
72 compare (block.list (m.getRow 1)) [10,11,12]
|
Chris@97
|
73 ),
|
Chris@97
|
74
|
Chris@97
|
75 "widthAndHeight": \(
|
Chris@98
|
76 m = mat.constMatrix 2 { rows = 3, columns = 4 };
|
Chris@97
|
77 compare m.size { columns = mat.width m, rows = mat.height m }
|
Chris@97
|
78 ),
|
Chris@97
|
79
|
Chris@97
|
80 "equal": \(
|
Chris@98
|
81 m = mat.constMatrix 2 { rows = 3, columns = 4 };
|
Chris@97
|
82 m' = m;
|
Chris@98
|
83 p = mat.constMatrix 2 { rows = 4, columns = 3 };
|
Chris@98
|
84 q = mat.constMatrix 3 { rows = 3, columns = 4 };
|
Chris@97
|
85 mat.equal m m' and mat.equal m m and
|
Chris@97
|
86 not mat.equal m p and not mat.equal m q and not mat.equal p q
|
Chris@97
|
87 ),
|
Chris@97
|
88
|
Chris@97
|
89 "getAt": \(
|
Chris@97
|
90 generator row col = row * 10 + col;
|
Chris@98
|
91 m = mat.generate generator { rows = 2, columns = 3 };
|
Chris@97
|
92 all id
|
Chris@97
|
93 (map do row: all id
|
Chris@97
|
94 (map do col: m.getAt row col == generator row col done [0..2])
|
Chris@97
|
95 done [0..1])
|
Chris@97
|
96 ),
|
Chris@97
|
97
|
Chris@97
|
98 "setAt": \(
|
Chris@97
|
99 generator row col = row * 10 + col;
|
Chris@98
|
100 m = mat.generate generator { rows = 2, columns = 3 };
|
Chris@97
|
101 m.setAt 1 2 16;
|
Chris@97
|
102 compare (m.getAt 1 2) 16 and
|
Chris@97
|
103 compare (m.getAt 1 1) 11 and
|
Chris@97
|
104 compare (m.getAt 0 2) 2
|
Chris@97
|
105 ),
|
Chris@97
|
106
|
Chris@97
|
107 "copyOfEqual": \(
|
Chris@98
|
108 m = mat.constMatrix 2 { rows = 3, columns = 4 };
|
Chris@97
|
109 m'' = mat.copyOf m;
|
Chris@97
|
110 mat.equal m m''
|
Chris@97
|
111 ),
|
Chris@97
|
112
|
Chris@97
|
113 "copyOfAlias": \(
|
Chris@98
|
114 m = mat.constMatrix 2 { rows = 3, columns = 4 };
|
Chris@97
|
115 m' = m;
|
Chris@97
|
116 m'' = mat.copyOf m;
|
Chris@97
|
117 m.setAt 0 0 6;
|
Chris@97
|
118 mat.equal m m' and not mat.equal m m'';
|
Chris@97
|
119 ),
|
Chris@97
|
120
|
Chris@97
|
121 "transposedEmpty": \(
|
Chris@98
|
122 compare (mat.transposed (mat.constMatrix 2 { rows = 0, columns = 0 })).size { columns = 0, rows = 0 } and
|
Chris@98
|
123 compare (mat.transposed (mat.constMatrix 2 { rows = 0, columns = 4 })).size { columns = 0, rows = 0 } and
|
Chris@98
|
124 compare (mat.transposed (mat.constMatrix 2 { rows = 4, columns = 0 })).size { columns = 0, rows = 0 }
|
Chris@97
|
125 ),
|
Chris@97
|
126
|
Chris@97
|
127 "transposedSize": \(
|
Chris@98
|
128 compare (mat.transposed (mat.constMatrix 2 { rows = 3, columns = 4 })).size { columns = 3, rows = 4 }
|
Chris@97
|
129 ),
|
Chris@97
|
130
|
Chris@97
|
131 "transposed": \(
|
Chris@97
|
132 generator row col = row * 10 + col;
|
Chris@98
|
133 m = mat.generate generator { rows = 2, columns = 3 };
|
Chris@97
|
134 m' = mat.transposed m;
|
Chris@97
|
135 all id
|
Chris@97
|
136 (map do row: all id
|
Chris@97
|
137 // like getAt test, but with col/row flipped
|
Chris@97
|
138 (map do col: m'.getAt col row == generator row col done [0..2])
|
Chris@97
|
139 done [0..1])
|
Chris@97
|
140 ),
|
Chris@97
|
141
|
Chris@98
|
142 "scaled": \(
|
Chris@98
|
143 mat.equal
|
Chris@98
|
144 (mat.scaled 0.5 (mat.constMatrix 2 { rows = 3, columns = 4 }))
|
Chris@98
|
145 (mat.constMatrix 1 { rows = 3, columns = 4 }) and
|
Chris@98
|
146 mat.equal
|
Chris@98
|
147 (mat.scaled 0.5 (mat.constMatrix (-3) { rows = 3, columns = 4 }))
|
Chris@98
|
148 (mat.constMatrix (-1.5) { rows = 3, columns = 4 }) and
|
Chris@98
|
149 mat.equal
|
Chris@98
|
150 (mat.scaled 0.5 (mat.constMatrix 2 { rows = 0, columns = 2 }))
|
Chris@98
|
151 (mat.constMatrix 5 { rows = 0, columns = 0 })
|
Chris@98
|
152 ),
|
Chris@98
|
153
|
Chris@98
|
154 "sum": \(
|
Chris@98
|
155 mat.equal
|
Chris@98
|
156 (mat.sum (mat.constMatrix 2 { rows = 3, columns = 4 })
|
Chris@98
|
157 (mat.constMatrix 1 { rows = 3, columns = 4 }))
|
Chris@98
|
158 (mat.constMatrix 3 { rows = 3, columns = 4 })
|
Chris@98
|
159 ),
|
Chris@98
|
160
|
Chris@98
|
161 "sumFail": \(
|
Chris@98
|
162 try
|
Chris@98
|
163 \() (mat.sum (mat.constMatrix 2 { rows = 3, columns = 4 })
|
Chris@98
|
164 (mat.constMatrix 1 { rows = 3, columns = 5 }));
|
Chris@98
|
165 false;
|
Chris@98
|
166 catch FailureException e:
|
Chris@98
|
167 true
|
Chris@98
|
168 yrt
|
Chris@98
|
169 ),
|
Chris@98
|
170
|
Chris@98
|
171 "product": \(
|
Chris@98
|
172 mat.equal
|
Chris@98
|
173 (mat.product (mat.constMatrix 2 { rows = 4, columns = 2 })
|
Chris@98
|
174 (mat.constMatrix 3 { rows = 2, columns = 3 }))
|
Chris@98
|
175 (mat.constMatrix 12 { rows = 4, columns = 3 })
|
Chris@98
|
176 ),
|
Chris@98
|
177
|
Chris@97
|
178 ] is hash<string, () -> boolean>;
|
Chris@97
|
179
|