annotate yetilab/matrix/test/test_matrix.yeti @ 98:bd135a950af7

Scaled, sum, product
author Chris Cannam
date Thu, 21 Mar 2013 10:18:18 +0000
parents d5fc902dcc3f
children 9832210dc42c
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@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