annotate yetilab/matrix/test/test_matrix.yeti @ 100:4e52d04887a5

Fix flipped
author Chris Cannam
date Thu, 21 Mar 2013 17:13:09 +0000
parents 9832210dc42c
children b6db07468ed1
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@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@99 11 compareMatrices obtained expected =
Chris@99 12 if mat.equal obtained expected then
Chris@99 13 true;
Chris@99 14 else
Chris@99 15 println "** expected: \(expected.data)\n obtained: \(obtained.data)";
Chris@99 16 false;
Chris@99 17 fi;
Chris@99 18
Chris@99 19 makeTests name flipper =
Chris@99 20 (constMatrix n s = flipper (mat.constMatrix n s);
Chris@99 21 zeroMatrix s = flipper (mat.zeroMatrix s);
Chris@99 22 randomMatrix s = flipper (mat.randomMatrix s);
Chris@99 23 identityMatrix s = flipper (mat.identityMatrix s);
Chris@99 24 generate f s = flipper (mat.generate f s);
Chris@99 25 newMatrix t d = flipper (mat.newMatrix t d);
Chris@97 26 [
Chris@97 27
Chris@99 28 "constMatrixEmpty-\(name)": \(
Chris@99 29 m = constMatrix 2 { rows = 0, columns = 0 };
Chris@97 30 compare m.size { columns = 0, rows = 0 }
Chris@97 31 ),
Chris@97 32
Chris@99 33 "constMatrixEmpty2-\(name)": \(
Chris@99 34 compare (constMatrix 2 { rows = 0, columns = 4 }).size { columns = 0, rows = 0 } and
Chris@99 35 compare (constMatrix 2 { rows = 4, columns = 0 }).size { columns = 0, rows = 0 }
Chris@97 36 ),
Chris@97 37
Chris@99 38 "constMatrix-\(name)": \(
Chris@99 39 m = constMatrix 2 { rows = 3, columns = 4 };
Chris@97 40 compare m.size { columns = 4, rows = 3 } and
Chris@97 41 all id (map do row: compare (block.list (m.getRow row)) [2,2,2,2] done [0..2]) and
Chris@97 42 all id (map do col: compare (block.list (m.getColumn col)) [2,2,2] done [0..3])
Chris@97 43 ),
Chris@97 44
Chris@99 45 "randomMatrixEmpty-\(name)": \(
Chris@99 46 m = randomMatrix { rows = 0, columns = 0 };
Chris@97 47 compare m.size { columns = 0, rows = 0 }
Chris@97 48 ),
Chris@97 49
Chris@99 50 "randomMatrix-\(name)": \(
Chris@99 51 m = randomMatrix { rows = 3, columns = 4 };
Chris@97 52 compare m.size { columns = 4, rows = 3 }
Chris@97 53 ),
Chris@97 54
Chris@99 55 "zeroMatrixEmpty-\(name)": \(
Chris@99 56 m = zeroMatrix { rows = 0, columns = 0 };
Chris@97 57 compare m.size { columns = 0, rows = 0 }
Chris@97 58 ),
Chris@97 59
Chris@99 60 "zeroMatrix-\(name)": \(
Chris@99 61 m = zeroMatrix { rows = 3, columns = 4 };
Chris@97 62 compare m.size { columns = 4, rows = 3 } and
Chris@97 63 all id (map do row: compare (block.list (m.getRow row)) [0,0,0,0] done [0..2]) and
Chris@97 64 all id (map do col: compare (block.list (m.getColumn col)) [0,0,0] done [0..3])
Chris@97 65 ),
Chris@97 66
Chris@99 67 "identityMatrixEmpty-\(name)": \(
Chris@99 68 m = identityMatrix { rows = 0, columns = 0 };
Chris@97 69 compare m.size { columns = 0, rows = 0 }
Chris@97 70 ),
Chris@97 71
Chris@99 72 "identityMatrix-\(name)": \(
Chris@99 73 m = identityMatrix { rows = 3, columns = 4 };
Chris@97 74 compare m.size { columns = 4, rows = 3 } and
Chris@97 75 all id (map do row: compare (block.list (m.getRow row)) [1,1,1,1] done [0..2]) and
Chris@97 76 all id (map do col: compare (block.list (m.getColumn col)) [1,1,1] done [0..3])
Chris@97 77 ),
Chris@97 78
Chris@99 79 "generateEmpty-\(name)": \(
Chris@99 80 m = generate do row col: 0 done { rows = 0, columns = 0 };
Chris@97 81 compare m.size { columns = 0, rows = 0 }
Chris@97 82 ),
Chris@97 83
Chris@99 84 "generate-\(name)": \(
Chris@99 85 m = generate do row col: row * 10 + col done { rows = 2, columns = 3 };
Chris@97 86 compare (block.list (m.getRow 0)) [0,1,2] and
Chris@97 87 compare (block.list (m.getRow 1)) [10,11,12]
Chris@97 88 ),
Chris@97 89
Chris@99 90 "widthAndHeight-\(name)": \(
Chris@99 91 m = constMatrix 2 { rows = 3, columns = 4 };
Chris@97 92 compare m.size { columns = mat.width m, rows = mat.height m }
Chris@97 93 ),
Chris@97 94
Chris@99 95 "equal-\(name)": \(
Chris@100 96 m = newMatrix (ColumnMajor ()) [[1,4],[2,5],[3,6]];
Chris@100 97 n = m;
Chris@100 98 p = newMatrix (RowMajor ()) [[1,2,3],[4,5,6]];
Chris@100 99 q = newMatrix (ColumnMajor ()) [[1,2,3],[4,5,6]];
Chris@100 100 compareMatrices m n and
Chris@100 101 compareMatrices m p and
Chris@100 102 compareMatrices n p and
Chris@100 103 not mat.equal m q
Chris@97 104 ),
Chris@97 105
Chris@99 106 "getAt-\(name)": \(
Chris@97 107 generator row col = row * 10 + col;
Chris@99 108 m = generate generator { rows = 2, columns = 3 };
Chris@97 109 all id
Chris@97 110 (map do row: all id
Chris@97 111 (map do col: m.getAt row col == generator row col done [0..2])
Chris@97 112 done [0..1])
Chris@97 113 ),
Chris@97 114
Chris@99 115 "setAt-\(name)": \(
Chris@97 116 generator row col = row * 10 + col;
Chris@99 117 m = generate generator { rows = 2, columns = 3 };
Chris@97 118 m.setAt 1 2 16;
Chris@97 119 compare (m.getAt 1 2) 16 and
Chris@97 120 compare (m.getAt 1 1) 11 and
Chris@97 121 compare (m.getAt 0 2) 2
Chris@97 122 ),
Chris@97 123
Chris@99 124 "copyOfEqual-\(name)": \(
Chris@99 125 m = constMatrix 2 { rows = 3, columns = 4 };
Chris@97 126 m'' = mat.copyOf m;
Chris@99 127 compareMatrices m'' m
Chris@97 128 ),
Chris@97 129
Chris@99 130 "copyOfAlias-\(name)": \(
Chris@99 131 m = constMatrix 2 { rows = 3, columns = 4 };
Chris@97 132 m' = m;
Chris@97 133 m'' = mat.copyOf m;
Chris@97 134 m.setAt 0 0 6;
Chris@99 135 compareMatrices m' m and not mat.equal m m'';
Chris@97 136 ),
Chris@97 137
Chris@99 138 "transposedEmpty-\(name)": \(
Chris@99 139 compare (mat.transposed (constMatrix 2 { rows = 0, columns = 0 })).size { columns = 0, rows = 0 } and
Chris@99 140 compare (mat.transposed (constMatrix 2 { rows = 0, columns = 4 })).size { columns = 0, rows = 0 } and
Chris@99 141 compare (mat.transposed (constMatrix 2 { rows = 4, columns = 0 })).size { columns = 0, rows = 0 }
Chris@97 142 ),
Chris@97 143
Chris@99 144 "transposedSize-\(name)": \(
Chris@99 145 compare (mat.transposed (constMatrix 2 { rows = 3, columns = 4 })).size { columns = 3, rows = 4 }
Chris@97 146 ),
Chris@97 147
Chris@99 148 "transposed-\(name)": \(
Chris@97 149 generator row col = row * 10 + col;
Chris@99 150 m = generate generator { rows = 2, columns = 3 };
Chris@97 151 m' = mat.transposed m;
Chris@97 152 all id
Chris@97 153 (map do row: all id
Chris@97 154 // like getAt test, but with col/row flipped
Chris@97 155 (map do col: m'.getAt col row == generator row col done [0..2])
Chris@97 156 done [0..1])
Chris@97 157 ),
Chris@97 158
Chris@100 159 "transposed-back-\(name)": \(
Chris@100 160 m = newMatrix (ColumnMajor ()) [[1,4],[2,5],[3,6]];
Chris@100 161 compareMatrices m (mat.transposed (mat.transposed m)) and
Chris@100 162 not mat.equal m (mat.transposed m);
Chris@100 163 ),
Chris@100 164
Chris@100 165 "flipped-\(name)": \(
Chris@99 166 m = newMatrix (ColumnMajor ()) [[1,4],[2,5],[3,6]];
Chris@99 167 m' = mat.flipped m;
Chris@99 168 m'' = newMatrix (RowMajor ()) [[1,2,3],[4,5,6]];
Chris@100 169 compareMatrices m m' and compareMatrices m m'' and compareMatrices m' m'';
Chris@98 170 ),
Chris@98 171
Chris@100 172 "flipped-back-\(name)": \(
Chris@100 173 m = newMatrix (ColumnMajor ()) [[1,4],[2,5],[3,6]];
Chris@100 174 compareMatrices m (mat.flipped (mat.flipped m));
Chris@100 175 ),
Chris@100 176
Chris@100 177 "flipped-empty-\(name)": \(
Chris@99 178 m = constMatrix 2 { rows = 0, columns = 4 };
Chris@99 179 compareMatrices (mat.flipped m) (mat.flipped (constMatrix 0 { rows = 0, columns = 0 }));
Chris@98 180 ),
Chris@98 181
Chris@99 182 "scaled-\(name)": \(
Chris@99 183 compareMatrices
Chris@99 184 (mat.scaled 0.5 (constMatrix 2 { rows = 3, columns = 4 }))
Chris@99 185 (constMatrix 1 { rows = 3, columns = 4 }) and
Chris@99 186 compareMatrices
Chris@99 187 (mat.scaled 0.5 (constMatrix (-3) { rows = 3, columns = 4 }))
Chris@99 188 (constMatrix (-1.5) { rows = 3, columns = 4 }) and
Chris@99 189 compareMatrices
Chris@99 190 (mat.scaled 0.5 (constMatrix 2 { rows = 0, columns = 2 }))
Chris@99 191 (constMatrix 5 { rows = 0, columns = 0 })
Chris@99 192 ),
Chris@99 193
Chris@99 194 "sum-\(name)": \(
Chris@99 195 compareMatrices
Chris@99 196 (mat.sum (constMatrix 2 { rows = 3, columns = 4 })
Chris@99 197 (constMatrix 1 { rows = 3, columns = 4 }))
Chris@99 198 (constMatrix 3 { rows = 3, columns = 4 })
Chris@99 199 ),
Chris@99 200
Chris@99 201 "sumFail-\(name)": \(
Chris@98 202 try
Chris@99 203 \() (mat.sum (constMatrix 2 { rows = 3, columns = 4 })
Chris@99 204 (constMatrix 1 { rows = 3, columns = 5 }));
Chris@98 205 false;
Chris@98 206 catch FailureException e:
Chris@98 207 true
Chris@98 208 yrt
Chris@98 209 ),
Chris@98 210
Chris@99 211 "product-\(name)": \(
Chris@99 212 compareMatrices
Chris@99 213 (mat.product (constMatrix 2 { rows = 4, columns = 2 })
Chris@99 214 (constMatrix 3 { rows = 2, columns = 3 }))
Chris@99 215 (constMatrix 12 { rows = 4, columns = 3 }) and
Chris@99 216 compareMatrices
Chris@99 217 (mat.product (newMatrix (ColumnMajor ()) [[1,4],[2,5],[3,6]])
Chris@99 218 (newMatrix (ColumnMajor ()) [[7,9,11],[8,10,12]]))
Chris@99 219 (newMatrix (ColumnMajor ()) [[58,139],[64,154]])
Chris@98 220 ),
Chris@98 221
Chris@99 222 "productFail-\(name)": \(
Chris@99 223 try
Chris@99 224 \() (mat.product (constMatrix 2 { rows = 4, columns = 2 })
Chris@99 225 (constMatrix 3 { rows = 3, columns = 2 }));
Chris@99 226 false;
Chris@99 227 catch FailureException e:
Chris@99 228 true
Chris@99 229 yrt
Chris@99 230 ),
Chris@97 231
Chris@99 232 ]);
Chris@99 233
Chris@99 234 colhash = makeTests "column-major" id;
Chris@99 235 rowhash = makeTests "row-major" mat.flipped;
Chris@99 236
Chris@99 237 all = [:];
Chris@99 238 for (keys colhash) do k: all[k] := colhash[k] done;
Chris@99 239 for (keys rowhash) do k: all[k] := rowhash[k] done;
Chris@99 240
Chris@99 241 all is hash<string, () -> boolean>;
Chris@99 242
Chris@99 243