annotate yetilab/matrix/test/test_matrix.yeti @ 158:b6db07468ed1

Rework stream to support indefinite-length streams and handle multiple channels in framer. Make compile, but some tests fail (and others are still missing).
author Chris Cannam
date Wed, 01 May 2013 12:03:45 +0100
parents 4e52d04887a5
children a9d58d9c71ca
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@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@99 19 newMatrix t d = flipper (mat.newMatrix t d);
Chris@97 20 [
Chris@97 21
Chris@99 22 "constMatrixEmpty-\(name)": \(
Chris@99 23 m = constMatrix 2 { rows = 0, columns = 0 };
Chris@97 24 compare m.size { columns = 0, rows = 0 }
Chris@97 25 ),
Chris@97 26
Chris@99 27 "constMatrixEmpty2-\(name)": \(
Chris@99 28 compare (constMatrix 2 { rows = 0, columns = 4 }).size { columns = 0, rows = 0 } and
Chris@99 29 compare (constMatrix 2 { rows = 4, columns = 0 }).size { 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@97 34 compare m.size { columns = 4, rows = 3 } and
Chris@97 35 all id (map do row: compare (block.list (m.getRow row)) [2,2,2,2] done [0..2]) and
Chris@97 36 all id (map do col: compare (block.list (m.getColumn col)) [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@97 41 compare m.size { 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@97 46 compare m.size { 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@97 51 compare m.size { 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@97 56 compare m.size { columns = 4, rows = 3 } and
Chris@97 57 all id (map do row: compare (block.list (m.getRow row)) [0,0,0,0] done [0..2]) and
Chris@97 58 all id (map do col: compare (block.list (m.getColumn col)) [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@97 63 compare m.size { 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@97 68 compare m.size { columns = 4, rows = 3 } and
Chris@97 69 all id (map do row: compare (block.list (m.getRow row)) [1,1,1,1] done [0..2]) and
Chris@97 70 all id (map do col: compare (block.list (m.getColumn col)) [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@97 75 compare m.size { 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@97 80 compare (block.list (m.getRow 0)) [0,1,2] and
Chris@97 81 compare (block.list (m.getRow 1)) [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@97 86 compare m.size { 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@100 94 compareMatrices m n and
Chris@100 95 compareMatrices m p and
Chris@100 96 compareMatrices n p and
Chris@100 97 not mat.equal m q
Chris@97 98 ),
Chris@97 99
Chris@99 100 "getAt-\(name)": \(
Chris@97 101 generator row col = row * 10 + col;
Chris@99 102 m = generate generator { rows = 2, columns = 3 };
Chris@97 103 all id
Chris@97 104 (map do row: all id
Chris@97 105 (map do col: m.getAt row col == generator row col done [0..2])
Chris@97 106 done [0..1])
Chris@97 107 ),
Chris@97 108
Chris@99 109 "setAt-\(name)": \(
Chris@97 110 generator row col = row * 10 + col;
Chris@99 111 m = generate generator { rows = 2, columns = 3 };
Chris@97 112 m.setAt 1 2 16;
Chris@97 113 compare (m.getAt 1 2) 16 and
Chris@97 114 compare (m.getAt 1 1) 11 and
Chris@97 115 compare (m.getAt 0 2) 2
Chris@97 116 ),
Chris@97 117
Chris@99 118 "copyOfEqual-\(name)": \(
Chris@99 119 m = constMatrix 2 { rows = 3, columns = 4 };
Chris@97 120 m'' = mat.copyOf m;
Chris@99 121 compareMatrices m'' m
Chris@97 122 ),
Chris@97 123
Chris@99 124 "copyOfAlias-\(name)": \(
Chris@99 125 m = constMatrix 2 { rows = 3, columns = 4 };
Chris@97 126 m' = m;
Chris@97 127 m'' = mat.copyOf m;
Chris@97 128 m.setAt 0 0 6;
Chris@99 129 compareMatrices m' m and not mat.equal m m'';
Chris@97 130 ),
Chris@97 131
Chris@99 132 "transposedEmpty-\(name)": \(
Chris@99 133 compare (mat.transposed (constMatrix 2 { rows = 0, columns = 0 })).size { columns = 0, rows = 0 } and
Chris@99 134 compare (mat.transposed (constMatrix 2 { rows = 0, columns = 4 })).size { columns = 0, rows = 0 } and
Chris@99 135 compare (mat.transposed (constMatrix 2 { rows = 4, columns = 0 })).size { columns = 0, rows = 0 }
Chris@97 136 ),
Chris@97 137
Chris@99 138 "transposedSize-\(name)": \(
Chris@99 139 compare (mat.transposed (constMatrix 2 { rows = 3, columns = 4 })).size { columns = 3, rows = 4 }
Chris@97 140 ),
Chris@97 141
Chris@99 142 "transposed-\(name)": \(
Chris@97 143 generator row col = row * 10 + col;
Chris@99 144 m = generate generator { rows = 2, columns = 3 };
Chris@97 145 m' = mat.transposed m;
Chris@97 146 all id
Chris@97 147 (map do row: all id
Chris@97 148 // like getAt test, but with col/row flipped
Chris@97 149 (map do col: m'.getAt col row == generator row col done [0..2])
Chris@97 150 done [0..1])
Chris@97 151 ),
Chris@97 152
Chris@100 153 "transposed-back-\(name)": \(
Chris@100 154 m = newMatrix (ColumnMajor ()) [[1,4],[2,5],[3,6]];
Chris@100 155 compareMatrices m (mat.transposed (mat.transposed m)) and
Chris@100 156 not mat.equal m (mat.transposed m);
Chris@100 157 ),
Chris@100 158
Chris@100 159 "flipped-\(name)": \(
Chris@99 160 m = newMatrix (ColumnMajor ()) [[1,4],[2,5],[3,6]];
Chris@99 161 m' = mat.flipped m;
Chris@99 162 m'' = newMatrix (RowMajor ()) [[1,2,3],[4,5,6]];
Chris@100 163 compareMatrices m m' and compareMatrices m m'' and compareMatrices m' m'';
Chris@98 164 ),
Chris@98 165
Chris@100 166 "flipped-back-\(name)": \(
Chris@100 167 m = newMatrix (ColumnMajor ()) [[1,4],[2,5],[3,6]];
Chris@100 168 compareMatrices m (mat.flipped (mat.flipped m));
Chris@100 169 ),
Chris@100 170
Chris@100 171 "flipped-empty-\(name)": \(
Chris@99 172 m = constMatrix 2 { rows = 0, columns = 4 };
Chris@99 173 compareMatrices (mat.flipped m) (mat.flipped (constMatrix 0 { rows = 0, columns = 0 }));
Chris@98 174 ),
Chris@98 175
Chris@99 176 "scaled-\(name)": \(
Chris@99 177 compareMatrices
Chris@99 178 (mat.scaled 0.5 (constMatrix 2 { rows = 3, columns = 4 }))
Chris@99 179 (constMatrix 1 { rows = 3, columns = 4 }) and
Chris@99 180 compareMatrices
Chris@99 181 (mat.scaled 0.5 (constMatrix (-3) { rows = 3, columns = 4 }))
Chris@99 182 (constMatrix (-1.5) { rows = 3, columns = 4 }) and
Chris@99 183 compareMatrices
Chris@99 184 (mat.scaled 0.5 (constMatrix 2 { rows = 0, columns = 2 }))
Chris@99 185 (constMatrix 5 { rows = 0, columns = 0 })
Chris@99 186 ),
Chris@99 187
Chris@99 188 "sum-\(name)": \(
Chris@99 189 compareMatrices
Chris@99 190 (mat.sum (constMatrix 2 { rows = 3, columns = 4 })
Chris@99 191 (constMatrix 1 { rows = 3, columns = 4 }))
Chris@99 192 (constMatrix 3 { rows = 3, columns = 4 })
Chris@99 193 ),
Chris@99 194
Chris@99 195 "sumFail-\(name)": \(
Chris@98 196 try
Chris@99 197 \() (mat.sum (constMatrix 2 { rows = 3, columns = 4 })
Chris@99 198 (constMatrix 1 { rows = 3, columns = 5 }));
Chris@98 199 false;
Chris@98 200 catch FailureException e:
Chris@98 201 true
Chris@98 202 yrt
Chris@98 203 ),
Chris@98 204
Chris@99 205 "product-\(name)": \(
Chris@99 206 compareMatrices
Chris@99 207 (mat.product (constMatrix 2 { rows = 4, columns = 2 })
Chris@99 208 (constMatrix 3 { rows = 2, columns = 3 }))
Chris@99 209 (constMatrix 12 { rows = 4, columns = 3 }) and
Chris@99 210 compareMatrices
Chris@99 211 (mat.product (newMatrix (ColumnMajor ()) [[1,4],[2,5],[3,6]])
Chris@99 212 (newMatrix (ColumnMajor ()) [[7,9,11],[8,10,12]]))
Chris@99 213 (newMatrix (ColumnMajor ()) [[58,139],[64,154]])
Chris@98 214 ),
Chris@98 215
Chris@99 216 "productFail-\(name)": \(
Chris@99 217 try
Chris@99 218 \() (mat.product (constMatrix 2 { rows = 4, columns = 2 })
Chris@99 219 (constMatrix 3 { rows = 3, columns = 2 }));
Chris@99 220 false;
Chris@99 221 catch FailureException e:
Chris@99 222 true
Chris@99 223 yrt
Chris@99 224 ),
Chris@97 225
Chris@158 226 "resizedTo-\(name)": \(
Chris@158 227 compareMatrices
Chris@158 228 (mat.resizedTo { rows = 2, columns = 2 }
Chris@158 229 (newMatrix (ColumnMajor ()) [[1,4],[2,5],[3,6]]))
Chris@158 230 (newMatrix (ColumnMajor ()) [[1,4],[2,5],[3,6]]) and
Chris@158 231 compareMatrices
Chris@158 232 (mat.resizedTo { rows = 3, columns = 4 }
Chris@158 233 (newMatrix (ColumnMajor ()) [[1,4],[2,5],[3,6]]))
Chris@158 234 (newMatrix (ColumnMajor ()) [[1,4,0],[2,5,0],[3,6,0],[0,0,0]]) and
Chris@158 235 compareMatrices
Chris@158 236 (mat.resizedTo { rows = 1, columns = 1 }
Chris@158 237 (newMatrix (ColumnMajor ()) [[1,4],[2,5],[3,6]]))
Chris@158 238 (newMatrix (ColumnMajor ()) [[1]])
Chris@158 239 ),
Chris@158 240
Chris@158 241 "zeroSizeMatrix-\(name)": \(
Chris@158 242 compareMatrices
Chris@158 243 (mat.zeroSizeMatrix ())
Chris@158 244 (newMatrix (ColumnMajor ()) [])
Chris@158 245 ),
Chris@158 246
Chris@99 247 ]);
Chris@99 248
Chris@99 249 colhash = makeTests "column-major" id;
Chris@99 250 rowhash = makeTests "row-major" mat.flipped;
Chris@99 251
Chris@99 252 all = [:];
Chris@99 253 for (keys colhash) do k: all[k] := colhash[k] done;
Chris@99 254 for (keys rowhash) do k: all[k] := rowhash[k] done;
Chris@99 255
Chris@99 256 all is hash<string, () -> boolean>;
Chris@99 257
Chris@99 258