annotate yetilab/matrix/test/test_matrix.yeti @ 222:77c6a81c577f matrix_opaque_immutable

Move block directory -> vector
author Chris Cannam
date Sat, 11 May 2013 15:58:36 +0100
parents 937f908cae52
children ac1373067054
rev   line source
Chris@97 1
Chris@97 2 module yetilab.matrix.test.test_matrix;
Chris@97 3
Chris@97 4 mat = load yetilab.matrix.matrix;
Chris@222 5 vec = load yetilab.vector.vector;
Chris@97 6
Chris@222 7 load yetilab.vector.vectortype;
Chris@220 8 load yetilab.matrix.matrixtype;
Chris@220 9
Chris@98 10 import yeti.lang: FailureException;
Chris@98 11
Chris@158 12 { compare, compareUsing } = load yetilab.test.test;
Chris@97 13
Chris@158 14 compareMatrices = compareUsing mat.equal;
Chris@99 15
Chris@99 16 makeTests name flipper =
Chris@99 17 (constMatrix n s = flipper (mat.constMatrix n s);
Chris@99 18 zeroMatrix s = flipper (mat.zeroMatrix s);
Chris@99 19 randomMatrix s = flipper (mat.randomMatrix s);
Chris@99 20 identityMatrix s = flipper (mat.identityMatrix s);
Chris@99 21 generate f s = flipper (mat.generate f s);
Chris@218 22 newMatrix t d = flipper (mat.newMatrix t (map vec.fromList d));
Chris@97 23 [
Chris@97 24
Chris@99 25 "constMatrixEmpty-\(name)": \(
Chris@99 26 m = constMatrix 2 { rows = 0, columns = 0 };
Chris@210 27 compare (mat.size m) { columns = 0, rows = 0 }
Chris@97 28 ),
Chris@97 29
Chris@99 30 "constMatrixEmpty2-\(name)": \(
Chris@210 31 compare (mat.size (constMatrix 2 { rows = 0, columns = 4 })) { columns = 0, rows = 0 } and
Chris@210 32 compare (mat.size (constMatrix 2 { rows = 4, columns = 0 })) { columns = 0, rows = 0 }
Chris@97 33 ),
Chris@97 34
Chris@99 35 "constMatrix-\(name)": \(
Chris@99 36 m = constMatrix 2 { rows = 3, columns = 4 };
Chris@210 37 compare (mat.size m) { columns = 4, rows = 3 } and
Chris@218 38 all id (map do row: compare (vec.list (mat.getRow row m)) [2,2,2,2] done [0..2]) and
Chris@218 39 all id (map do col: compare (vec.list (mat.getColumn col m)) [2,2,2] done [0..3])
Chris@97 40 ),
Chris@97 41
Chris@99 42 "randomMatrixEmpty-\(name)": \(
Chris@99 43 m = randomMatrix { rows = 0, columns = 0 };
Chris@210 44 compare (mat.size m) { columns = 0, rows = 0 }
Chris@97 45 ),
Chris@97 46
Chris@99 47 "randomMatrix-\(name)": \(
Chris@99 48 m = randomMatrix { rows = 3, columns = 4 };
Chris@210 49 compare (mat.size m) { columns = 4, rows = 3 }
Chris@97 50 ),
Chris@97 51
Chris@99 52 "zeroMatrixEmpty-\(name)": \(
Chris@99 53 m = zeroMatrix { rows = 0, columns = 0 };
Chris@210 54 compare (mat.size m) { columns = 0, rows = 0 }
Chris@97 55 ),
Chris@97 56
Chris@99 57 "zeroMatrix-\(name)": \(
Chris@99 58 m = zeroMatrix { rows = 3, columns = 4 };
Chris@210 59 compare (mat.size m) { columns = 4, rows = 3 } and
Chris@218 60 all id (map do row: compare (vec.list (mat.getRow row m)) [0,0,0,0] done [0..2]) and
Chris@218 61 all id (map do col: compare (vec.list (mat.getColumn col m)) [0,0,0] done [0..3])
Chris@97 62 ),
Chris@97 63
Chris@99 64 "identityMatrixEmpty-\(name)": \(
Chris@99 65 m = identityMatrix { rows = 0, columns = 0 };
Chris@210 66 compare (mat.size m) { columns = 0, rows = 0 }
Chris@97 67 ),
Chris@97 68
Chris@99 69 "identityMatrix-\(name)": \(
Chris@99 70 m = identityMatrix { rows = 3, columns = 4 };
Chris@210 71 compare (mat.size m) { columns = 4, rows = 3 } and
Chris@218 72 all id (map do row: compare (vec.list (mat.getRow row m)) [1,1,1,1] done [0..2]) and
Chris@218 73 all id (map do col: compare (vec.list (mat.getColumn col m)) [1,1,1] done [0..3])
Chris@97 74 ),
Chris@97 75
Chris@99 76 "generateEmpty-\(name)": \(
Chris@99 77 m = generate do row col: 0 done { rows = 0, columns = 0 };
Chris@210 78 compare (mat.size m) { columns = 0, rows = 0 }
Chris@97 79 ),
Chris@97 80
Chris@99 81 "generate-\(name)": \(
Chris@99 82 m = generate do row col: row * 10 + col done { rows = 2, columns = 3 };
Chris@218 83 compare (vec.list (mat.getRow 0 m)) [0,1,2] and
Chris@218 84 compare (vec.list (mat.getRow 1 m)) [10,11,12]
Chris@97 85 ),
Chris@97 86
Chris@99 87 "widthAndHeight-\(name)": \(
Chris@99 88 m = constMatrix 2 { rows = 3, columns = 4 };
Chris@210 89 compare (mat.size m) { columns = mat.width m, rows = mat.height m }
Chris@97 90 ),
Chris@97 91
Chris@99 92 "equal-\(name)": \(
Chris@100 93 m = newMatrix (ColumnMajor ()) [[1,4],[2,5],[3,6]];
Chris@100 94 n = m;
Chris@100 95 p = newMatrix (RowMajor ()) [[1,2,3],[4,5,6]];
Chris@100 96 q = newMatrix (ColumnMajor ()) [[1,2,3],[4,5,6]];
Chris@159 97 r = newMatrix (ColumnMajor ()) [[1,4],[2,5]];
Chris@100 98 compareMatrices m n and
Chris@100 99 compareMatrices m p and
Chris@100 100 compareMatrices n p and
Chris@159 101 not mat.equal m q and
Chris@159 102 not mat.equal m r
Chris@97 103 ),
Chris@97 104
Chris@99 105 "getAt-\(name)": \(
Chris@97 106 generator row col = row * 10 + col;
Chris@99 107 m = generate generator { rows = 2, columns = 3 };
Chris@97 108 all id
Chris@97 109 (map do row: all id
Chris@210 110 (map do col: mat.getAt row col m == generator row col done [0..2])
Chris@97 111 done [0..1])
Chris@97 112 ),
Chris@220 113 /*!!!
Chris@99 114 "setAt-\(name)": \(
Chris@97 115 generator row col = row * 10 + col;
Chris@99 116 m = generate generator { rows = 2, columns = 3 };
Chris@210 117 mat.setAt 1 2 16 m;
Chris@210 118 compare (mat.getAt 1 2 m) 16 and
Chris@210 119 compare (mat.getAt 1 1 m) 11 and
Chris@210 120 compare (mat.getAt 0 2 m) 2
Chris@97 121 ),
Chris@97 122
Chris@99 123 "copyOfEqual-\(name)": \(
Chris@99 124 m = constMatrix 2 { rows = 3, columns = 4 };
Chris@97 125 m'' = mat.copyOf m;
Chris@99 126 compareMatrices m'' m
Chris@97 127 ),
Chris@97 128
Chris@99 129 "copyOfAlias-\(name)": \(
Chris@99 130 m = constMatrix 2 { rows = 3, columns = 4 };
Chris@97 131 m' = m;
Chris@97 132 m'' = mat.copyOf m;
Chris@210 133 mat.setAt 0 0 6 m;
Chris@99 134 compareMatrices m' m and not mat.equal m m'';
Chris@97 135 ),
Chris@220 136 */
Chris@99 137 "transposedEmpty-\(name)": \(
Chris@210 138 compare (mat.size (mat.transposed (constMatrix 2 { rows = 0, columns = 0 }))) { columns = 0, rows = 0 } and
Chris@210 139 compare (mat.size (mat.transposed (constMatrix 2 { rows = 0, columns = 4 }))) { columns = 0, rows = 0 } and
Chris@210 140 compare (mat.size (mat.transposed (constMatrix 2 { rows = 4, columns = 0 }))) { columns = 0, rows = 0 }
Chris@97 141 ),
Chris@97 142
Chris@99 143 "transposedSize-\(name)": \(
Chris@210 144 compare (mat.size (mat.transposed (constMatrix 2 { rows = 3, columns = 4 }))) { columns = 3, rows = 4 }
Chris@97 145 ),
Chris@97 146
Chris@99 147 "transposed-\(name)": \(
Chris@97 148 generator row col = row * 10 + col;
Chris@99 149 m = generate generator { rows = 2, columns = 3 };
Chris@97 150 m' = mat.transposed m;
Chris@97 151 all id
Chris@97 152 (map do row: all id
Chris@97 153 // like getAt test, but with col/row flipped
Chris@210 154 (map do col: mat.getAt col row m' == generator row col done [0..2])
Chris@97 155 done [0..1])
Chris@97 156 ),
Chris@97 157
Chris@100 158 "transposed-back-\(name)": \(
Chris@100 159 m = newMatrix (ColumnMajor ()) [[1,4],[2,5],[3,6]];
Chris@100 160 compareMatrices m (mat.transposed (mat.transposed m)) and
Chris@100 161 not mat.equal m (mat.transposed m);
Chris@100 162 ),
Chris@100 163
Chris@100 164 "flipped-\(name)": \(
Chris@99 165 m = newMatrix (ColumnMajor ()) [[1,4],[2,5],[3,6]];
Chris@99 166 m' = mat.flipped m;
Chris@99 167 m'' = newMatrix (RowMajor ()) [[1,2,3],[4,5,6]];
Chris@100 168 compareMatrices m m' and compareMatrices m m'' and compareMatrices m' m'';
Chris@98 169 ),
Chris@98 170
Chris@100 171 "flipped-back-\(name)": \(
Chris@100 172 m = newMatrix (ColumnMajor ()) [[1,4],[2,5],[3,6]];
Chris@100 173 compareMatrices m (mat.flipped (mat.flipped m));
Chris@100 174 ),
Chris@100 175
Chris@100 176 "flipped-empty-\(name)": \(
Chris@99 177 m = constMatrix 2 { rows = 0, columns = 4 };
Chris@99 178 compareMatrices (mat.flipped m) (mat.flipped (constMatrix 0 { rows = 0, columns = 0 }));
Chris@98 179 ),
Chris@98 180
Chris@161 181 "toRowMajor-\(name)": \(
Chris@161 182 m = newMatrix (ColumnMajor ()) [[1,4],[2,5],[3,6]];
Chris@161 183 m' = mat.toRowMajor m;
Chris@161 184 m'' = newMatrix (RowMajor ()) [[1,2,3],[4,5,6]];
Chris@161 185 m''' = mat.toRowMajor m'';
Chris@161 186 compareMatrices m m' and compareMatrices m m'' and compareMatrices m' m''
Chris@161 187 and compareMatrices m m''';
Chris@161 188 ),
Chris@161 189
Chris@161 190 "toColumnMajor-\(name)": \(
Chris@161 191 m = newMatrix (RowMajor ()) [[1,4],[2,5],[3,6]];
Chris@161 192 m' = mat.toColumnMajor m;
Chris@161 193 m'' = newMatrix (ColumnMajor ()) [[1,2,3],[4,5,6]];
Chris@161 194 m''' = mat.toColumnMajor m'';
Chris@161 195 compareMatrices m m' and compareMatrices m m'' and compareMatrices m' m''
Chris@161 196 and compareMatrices m m''';
Chris@161 197 ),
Chris@161 198
Chris@99 199 "scaled-\(name)": \(
Chris@99 200 compareMatrices
Chris@99 201 (mat.scaled 0.5 (constMatrix 2 { rows = 3, columns = 4 }))
Chris@99 202 (constMatrix 1 { rows = 3, columns = 4 }) and
Chris@99 203 compareMatrices
Chris@99 204 (mat.scaled 0.5 (constMatrix (-3) { rows = 3, columns = 4 }))
Chris@99 205 (constMatrix (-1.5) { rows = 3, columns = 4 }) and
Chris@99 206 compareMatrices
Chris@99 207 (mat.scaled 0.5 (constMatrix 2 { rows = 0, columns = 2 }))
Chris@99 208 (constMatrix 5 { rows = 0, columns = 0 })
Chris@99 209 ),
Chris@99 210
Chris@99 211 "sum-\(name)": \(
Chris@99 212 compareMatrices
Chris@99 213 (mat.sum (constMatrix 2 { rows = 3, columns = 4 })
Chris@99 214 (constMatrix 1 { rows = 3, columns = 4 }))
Chris@99 215 (constMatrix 3 { rows = 3, columns = 4 })
Chris@99 216 ),
Chris@99 217
Chris@99 218 "sumFail-\(name)": \(
Chris@98 219 try
Chris@99 220 \() (mat.sum (constMatrix 2 { rows = 3, columns = 4 })
Chris@99 221 (constMatrix 1 { rows = 3, columns = 5 }));
Chris@98 222 false;
Chris@98 223 catch FailureException e:
Chris@98 224 true
Chris@98 225 yrt
Chris@98 226 ),
Chris@98 227
Chris@99 228 "product-\(name)": \(
Chris@99 229 compareMatrices
Chris@99 230 (mat.product (constMatrix 2 { rows = 4, columns = 2 })
Chris@99 231 (constMatrix 3 { rows = 2, columns = 3 }))
Chris@99 232 (constMatrix 12 { rows = 4, columns = 3 }) and
Chris@99 233 compareMatrices
Chris@99 234 (mat.product (newMatrix (ColumnMajor ()) [[1,4],[2,5],[3,6]])
Chris@99 235 (newMatrix (ColumnMajor ()) [[7,9,11],[8,10,12]]))
Chris@99 236 (newMatrix (ColumnMajor ()) [[58,139],[64,154]])
Chris@98 237 ),
Chris@98 238
Chris@99 239 "productFail-\(name)": \(
Chris@99 240 try
Chris@99 241 \() (mat.product (constMatrix 2 { rows = 4, columns = 2 })
Chris@99 242 (constMatrix 3 { rows = 3, columns = 2 }));
Chris@99 243 false;
Chris@99 244 catch FailureException e:
Chris@99 245 true
Chris@99 246 yrt
Chris@99 247 ),
Chris@97 248
Chris@158 249 "resizedTo-\(name)": \(
Chris@158 250 compareMatrices
Chris@158 251 (mat.resizedTo { rows = 2, columns = 2 }
Chris@158 252 (newMatrix (ColumnMajor ()) [[1,4],[2,5],[3,6]]))
Chris@159 253 (newMatrix (ColumnMajor ()) [[1,4],[2,5]]) and
Chris@158 254 compareMatrices
Chris@158 255 (mat.resizedTo { rows = 3, columns = 4 }
Chris@158 256 (newMatrix (ColumnMajor ()) [[1,4],[2,5],[3,6]]))
Chris@158 257 (newMatrix (ColumnMajor ()) [[1,4,0],[2,5,0],[3,6,0],[0,0,0]]) and
Chris@158 258 compareMatrices
Chris@158 259 (mat.resizedTo { rows = 1, columns = 1 }
Chris@158 260 (newMatrix (ColumnMajor ()) [[1,4],[2,5],[3,6]]))
Chris@202 261 (newMatrix (RowMajor ()) [[1]]) and
Chris@202 262 compareMatrices
Chris@202 263 (mat.resizedTo { rows = 2, columns = 3 }
Chris@202 264 (mat.zeroSizeMatrix ()))
Chris@202 265 (newMatrix (RowMajor ()) [[0,0,0],[0,0,0]])
Chris@158 266 ),
Chris@158 267
Chris@158 268 "zeroSizeMatrix-\(name)": \(
Chris@158 269 compareMatrices
Chris@158 270 (mat.zeroSizeMatrix ())
Chris@158 271 (newMatrix (ColumnMajor ()) [])
Chris@158 272 ),
Chris@158 273
Chris@161 274 "asRows-\(name)": \(
Chris@161 275 compare
Chris@218 276 (map vec.list
Chris@171 277 (mat.asRows (newMatrix (ColumnMajor ()) [[1,4],[2,5],[3,6]])))
Chris@161 278 [[1,2,3],[4,5,6]];
Chris@161 279 ),
Chris@161 280
Chris@161 281 "asColumns-\(name)": \(
Chris@161 282 compare
Chris@218 283 (map vec.list
Chris@171 284 (mat.asColumns (newMatrix (ColumnMajor ()) [[1,4],[2,5],[3,6]])))
Chris@161 285 [[1,4],[2,5],[3,6]];
Chris@161 286 ),
Chris@161 287
Chris@178 288 "concat-horiz-\(name)": \(
Chris@177 289 compareMatrices
Chris@177 290 (mat.concat (Horizontal ())
Chris@177 291 [(newMatrix (ColumnMajor ()) [[1,4],[2,5]]),
Chris@177 292 (newMatrix (RowMajor ()) [[3],[6]])])
Chris@177 293 (newMatrix (ColumnMajor ()) [[1,4],[2,5],[3,6]])
Chris@177 294 ),
Chris@177 295
Chris@178 296 "concatFail-horiz-\(name)": \(
Chris@178 297 try
Chris@178 298 \() (mat.concat (Horizontal ())
Chris@178 299 [(newMatrix (ColumnMajor ()) [[1,4],[2,5]]),
Chris@178 300 (newMatrix (ColumnMajor ()) [[3],[6]])]);
Chris@178 301 false
Chris@178 302 catch FailureException e:
Chris@178 303 true
Chris@178 304 yrt
Chris@178 305 ),
Chris@178 306
Chris@178 307 "concat-vert-\(name)": \(
Chris@178 308 compareMatrices
Chris@178 309 (mat.concat (Vertical ())
Chris@178 310 [(newMatrix (ColumnMajor ()) [[1,4],[2,5]]),
Chris@178 311 (newMatrix (RowMajor ()) [[3,6]])])
Chris@178 312 (newMatrix (ColumnMajor ()) [[1,4,3],[2,5,6]])
Chris@178 313 ),
Chris@178 314
Chris@178 315 "concatFail-vert-\(name)": \(
Chris@178 316 try
Chris@178 317 \() (mat.concat (Vertical ())
Chris@178 318 [(newMatrix (ColumnMajor ()) [[1,4],[2,5]]),
Chris@178 319 (newMatrix (RowMajor ()) [[3],[6]])]);
Chris@178 320 false
Chris@178 321 catch FailureException e:
Chris@178 322 true
Chris@178 323 yrt
Chris@178 324 ),
Chris@178 325
Chris@187 326 "rowSlice-\(name)": \(
Chris@187 327 compareMatrices
Chris@187 328 (mat.rowSlice 1 2 (newMatrix (RowMajor ()) [[1,2],[3,4],[5,6],[7,8]]))
Chris@187 329 (newMatrix (RowMajor ()) [[3,4],[5,6]])
Chris@187 330 ),
Chris@187 331
Chris@187 332 "columnSlice-\(name)": \(
Chris@187 333 compareMatrices
Chris@187 334 (mat.columnSlice 1 2 (newMatrix (RowMajor ()) [[1,2,3,4],[5,6,7,8]]))
Chris@187 335 (newMatrix (RowMajor ()) [[2,3],[6,7]])
Chris@187 336 ),
Chris@187 337
Chris@99 338 ]);
Chris@99 339
Chris@99 340 colhash = makeTests "column-major" id;
Chris@99 341 rowhash = makeTests "row-major" mat.flipped;
Chris@99 342
Chris@99 343 all = [:];
Chris@99 344 for (keys colhash) do k: all[k] := colhash[k] done;
Chris@99 345 for (keys rowhash) do k: all[k] := rowhash[k] done;
Chris@99 346
Chris@99 347 all is hash<string, () -> boolean>;
Chris@99 348
Chris@99 349