annotate yetilab/matrix/test/test_matrix.yeti @ 217:26111c11d8e4 matrix_opaque_immutable

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