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@97
|
7 { compare } = load yetilab.test.test;
|
Chris@97
|
8
|
Chris@97
|
9 [
|
Chris@97
|
10
|
Chris@97
|
11 "constMatrixEmpty": \(
|
Chris@97
|
12 m = mat.constMatrix 2 0 0;
|
Chris@97
|
13 compare m.size { columns = 0, rows = 0 }
|
Chris@97
|
14 ),
|
Chris@97
|
15
|
Chris@97
|
16 "constMatrixEmpty2": \(
|
Chris@97
|
17 compare (mat.constMatrix 2 0 4).size { columns = 0, rows = 0 } and
|
Chris@97
|
18 compare (mat.constMatrix 2 4 0).size { columns = 0, rows = 0 }
|
Chris@97
|
19 ),
|
Chris@97
|
20
|
Chris@97
|
21 "constMatrix": \(
|
Chris@97
|
22 m = mat.constMatrix 2 3 4;
|
Chris@97
|
23 compare m.size { columns = 4, rows = 3 } and
|
Chris@97
|
24 all id (map do row: compare (block.list (m.getRow row)) [2,2,2,2] done [0..2]) and
|
Chris@97
|
25 all id (map do col: compare (block.list (m.getColumn col)) [2,2,2] done [0..3])
|
Chris@97
|
26 ),
|
Chris@97
|
27
|
Chris@97
|
28 "randomMatrixEmpty": \(
|
Chris@97
|
29 m = mat.randomMatrix 0 0;
|
Chris@97
|
30 compare m.size { columns = 0, rows = 0 }
|
Chris@97
|
31 ),
|
Chris@97
|
32
|
Chris@97
|
33 "randomMatrix": \(
|
Chris@97
|
34 m = mat.randomMatrix 3 4;
|
Chris@97
|
35 compare m.size { columns = 4, rows = 3 }
|
Chris@97
|
36 ),
|
Chris@97
|
37
|
Chris@97
|
38 "zeroMatrixEmpty": \(
|
Chris@97
|
39 m = mat.zeroMatrix 0 0;
|
Chris@97
|
40 compare m.size { columns = 0, rows = 0 }
|
Chris@97
|
41 ),
|
Chris@97
|
42
|
Chris@97
|
43 "zeroMatrix": \(
|
Chris@97
|
44 m = mat.zeroMatrix 3 4;
|
Chris@97
|
45 compare m.size { columns = 4, rows = 3 } and
|
Chris@97
|
46 all id (map do row: compare (block.list (m.getRow row)) [0,0,0,0] done [0..2]) and
|
Chris@97
|
47 all id (map do col: compare (block.list (m.getColumn col)) [0,0,0] done [0..3])
|
Chris@97
|
48 ),
|
Chris@97
|
49
|
Chris@97
|
50 "identityMatrixEmpty": \(
|
Chris@97
|
51 m = mat.identityMatrix 0 0;
|
Chris@97
|
52 compare m.size { columns = 0, rows = 0 }
|
Chris@97
|
53 ),
|
Chris@97
|
54
|
Chris@97
|
55 "identityMatrix": \(
|
Chris@97
|
56 m = mat.identityMatrix 3 4;
|
Chris@97
|
57 compare m.size { columns = 4, rows = 3 } and
|
Chris@97
|
58 all id (map do row: compare (block.list (m.getRow row)) [1,1,1,1] done [0..2]) and
|
Chris@97
|
59 all id (map do col: compare (block.list (m.getColumn col)) [1,1,1] done [0..3])
|
Chris@97
|
60 ),
|
Chris@97
|
61
|
Chris@97
|
62 "generateEmpty": \(
|
Chris@97
|
63 m = mat.generate do row col: 0 done 0 0;
|
Chris@97
|
64 compare m.size { columns = 0, rows = 0 }
|
Chris@97
|
65 ),
|
Chris@97
|
66
|
Chris@97
|
67 "generate": \(
|
Chris@97
|
68 m = mat.generate do row col: row * 10 + col done 2 3;
|
Chris@97
|
69 compare (block.list (m.getRow 0)) [0,1,2] and
|
Chris@97
|
70 compare (block.list (m.getRow 1)) [10,11,12]
|
Chris@97
|
71 ),
|
Chris@97
|
72
|
Chris@97
|
73 "widthAndHeight": \(
|
Chris@97
|
74 m = mat.constMatrix 2 3 4;
|
Chris@97
|
75 compare m.size { columns = mat.width m, rows = mat.height m }
|
Chris@97
|
76 ),
|
Chris@97
|
77
|
Chris@97
|
78 "equal": \(
|
Chris@97
|
79 m = mat.constMatrix 2 3 4;
|
Chris@97
|
80 m' = m;
|
Chris@97
|
81 p = mat.constMatrix 2 4 3;
|
Chris@97
|
82 q = mat.constMatrix 3 3 4;
|
Chris@97
|
83 mat.equal m m' and mat.equal m m and
|
Chris@97
|
84 not mat.equal m p and not mat.equal m q and not mat.equal p q
|
Chris@97
|
85 ),
|
Chris@97
|
86
|
Chris@97
|
87 "getAt": \(
|
Chris@97
|
88 generator row col = row * 10 + col;
|
Chris@97
|
89 m = mat.generate generator 2 3;
|
Chris@97
|
90 all id
|
Chris@97
|
91 (map do row: all id
|
Chris@97
|
92 (map do col: m.getAt row col == generator row col done [0..2])
|
Chris@97
|
93 done [0..1])
|
Chris@97
|
94 ),
|
Chris@97
|
95
|
Chris@97
|
96 "setAt": \(
|
Chris@97
|
97 generator row col = row * 10 + col;
|
Chris@97
|
98 m = mat.generate generator 2 3;
|
Chris@97
|
99 m.setAt 1 2 16;
|
Chris@97
|
100 compare (m.getAt 1 2) 16 and
|
Chris@97
|
101 compare (m.getAt 1 1) 11 and
|
Chris@97
|
102 compare (m.getAt 0 2) 2
|
Chris@97
|
103 ),
|
Chris@97
|
104
|
Chris@97
|
105 "copyOfEqual": \(
|
Chris@97
|
106 m = mat.constMatrix 2 3 4;
|
Chris@97
|
107 m'' = mat.copyOf m;
|
Chris@97
|
108 mat.equal m m''
|
Chris@97
|
109 ),
|
Chris@97
|
110
|
Chris@97
|
111 "copyOfAlias": \(
|
Chris@97
|
112 m = mat.constMatrix 2 3 4;
|
Chris@97
|
113 m' = m;
|
Chris@97
|
114 m'' = mat.copyOf m;
|
Chris@97
|
115 m.setAt 0 0 6;
|
Chris@97
|
116 mat.equal m m' and not mat.equal m m'';
|
Chris@97
|
117 ),
|
Chris@97
|
118
|
Chris@97
|
119 "transposedEmpty": \(
|
Chris@97
|
120 compare (mat.transposed (mat.constMatrix 2 0 0)).size { columns = 0, rows = 0 } and
|
Chris@97
|
121 compare (mat.transposed (mat.constMatrix 2 0 4)).size { columns = 0, rows = 0 } and
|
Chris@97
|
122 compare (mat.transposed (mat.constMatrix 2 4 0)).size { columns = 0, rows = 0 }
|
Chris@97
|
123 ),
|
Chris@97
|
124
|
Chris@97
|
125 "transposedSize": \(
|
Chris@97
|
126 compare (mat.transposed (mat.constMatrix 2 3 4)).size { columns = 3, rows = 4 }
|
Chris@97
|
127 ),
|
Chris@97
|
128
|
Chris@97
|
129 "transposed": \(
|
Chris@97
|
130 generator row col = row * 10 + col;
|
Chris@97
|
131 m = mat.generate generator 2 3;
|
Chris@97
|
132 m' = mat.transposed m;
|
Chris@97
|
133 all id
|
Chris@97
|
134 (map do row: all id
|
Chris@97
|
135 // like getAt test, but with col/row flipped
|
Chris@97
|
136 (map do col: m'.getAt col row == generator row col done [0..2])
|
Chris@97
|
137 done [0..1])
|
Chris@97
|
138 ),
|
Chris@97
|
139
|
Chris@97
|
140 ] is hash<string, () -> boolean>;
|
Chris@97
|
141
|