Chris@97: Chris@97: module yetilab.matrix.test.test_matrix; Chris@97: Chris@97: mat = load yetilab.matrix.matrix; Chris@97: block = load yetilab.block.block; Chris@97: Chris@98: import yeti.lang: FailureException; Chris@98: Chris@97: { compare } = load yetilab.test.test; Chris@97: Chris@97: [ Chris@97: Chris@97: "constMatrixEmpty": \( Chris@98: m = mat.constMatrix 2 { rows = 0, columns = 0 }; Chris@97: compare m.size { columns = 0, rows = 0 } Chris@97: ), Chris@97: Chris@97: "constMatrixEmpty2": \( Chris@98: compare (mat.constMatrix 2 { rows = 0, columns = 4 }).size { columns = 0, rows = 0 } and Chris@98: compare (mat.constMatrix 2 { rows = 4, columns = 0 }).size { columns = 0, rows = 0 } Chris@97: ), Chris@97: Chris@97: "constMatrix": \( Chris@98: m = mat.constMatrix 2 { rows = 3, columns = 4 }; Chris@97: compare m.size { columns = 4, rows = 3 } and Chris@97: all id (map do row: compare (block.list (m.getRow row)) [2,2,2,2] done [0..2]) and Chris@97: all id (map do col: compare (block.list (m.getColumn col)) [2,2,2] done [0..3]) Chris@97: ), Chris@97: Chris@97: "randomMatrixEmpty": \( Chris@98: m = mat.randomMatrix { rows = 0, columns = 0 }; Chris@97: compare m.size { columns = 0, rows = 0 } Chris@97: ), Chris@97: Chris@97: "randomMatrix": \( Chris@98: m = mat.randomMatrix { rows = 3, columns = 4 }; Chris@97: compare m.size { columns = 4, rows = 3 } Chris@97: ), Chris@97: Chris@97: "zeroMatrixEmpty": \( Chris@98: m = mat.zeroMatrix { rows = 0, columns = 0 }; Chris@97: compare m.size { columns = 0, rows = 0 } Chris@97: ), Chris@97: Chris@97: "zeroMatrix": \( Chris@98: m = mat.zeroMatrix { rows = 3, columns = 4 }; Chris@97: compare m.size { columns = 4, rows = 3 } and Chris@97: all id (map do row: compare (block.list (m.getRow row)) [0,0,0,0] done [0..2]) and Chris@97: all id (map do col: compare (block.list (m.getColumn col)) [0,0,0] done [0..3]) Chris@97: ), Chris@97: Chris@97: "identityMatrixEmpty": \( Chris@98: m = mat.identityMatrix { rows = 0, columns = 0 }; Chris@97: compare m.size { columns = 0, rows = 0 } Chris@97: ), Chris@97: Chris@97: "identityMatrix": \( Chris@98: m = mat.identityMatrix { rows = 3, columns = 4 }; Chris@97: compare m.size { columns = 4, rows = 3 } and Chris@97: all id (map do row: compare (block.list (m.getRow row)) [1,1,1,1] done [0..2]) and Chris@97: all id (map do col: compare (block.list (m.getColumn col)) [1,1,1] done [0..3]) Chris@97: ), Chris@97: Chris@97: "generateEmpty": \( Chris@98: m = mat.generate do row col: 0 done { rows = 0, columns = 0 }; Chris@97: compare m.size { columns = 0, rows = 0 } Chris@97: ), Chris@97: Chris@97: "generate": \( Chris@98: m = mat.generate do row col: row * 10 + col done { rows = 2, columns = 3 }; Chris@97: compare (block.list (m.getRow 0)) [0,1,2] and Chris@97: compare (block.list (m.getRow 1)) [10,11,12] Chris@97: ), Chris@97: Chris@97: "widthAndHeight": \( Chris@98: m = mat.constMatrix 2 { rows = 3, columns = 4 }; Chris@97: compare m.size { columns = mat.width m, rows = mat.height m } Chris@97: ), Chris@97: Chris@97: "equal": \( Chris@98: m = mat.constMatrix 2 { rows = 3, columns = 4 }; Chris@97: m' = m; Chris@98: p = mat.constMatrix 2 { rows = 4, columns = 3 }; Chris@98: q = mat.constMatrix 3 { rows = 3, columns = 4 }; Chris@97: mat.equal m m' and mat.equal m m and Chris@97: not mat.equal m p and not mat.equal m q and not mat.equal p q Chris@97: ), Chris@97: Chris@97: "getAt": \( Chris@97: generator row col = row * 10 + col; Chris@98: m = mat.generate generator { rows = 2, columns = 3 }; Chris@97: all id Chris@97: (map do row: all id Chris@97: (map do col: m.getAt row col == generator row col done [0..2]) Chris@97: done [0..1]) Chris@97: ), Chris@97: Chris@97: "setAt": \( Chris@97: generator row col = row * 10 + col; Chris@98: m = mat.generate generator { rows = 2, columns = 3 }; Chris@97: m.setAt 1 2 16; Chris@97: compare (m.getAt 1 2) 16 and Chris@97: compare (m.getAt 1 1) 11 and Chris@97: compare (m.getAt 0 2) 2 Chris@97: ), Chris@97: Chris@97: "copyOfEqual": \( Chris@98: m = mat.constMatrix 2 { rows = 3, columns = 4 }; Chris@97: m'' = mat.copyOf m; Chris@97: mat.equal m m'' Chris@97: ), Chris@97: Chris@97: "copyOfAlias": \( Chris@98: m = mat.constMatrix 2 { rows = 3, columns = 4 }; Chris@97: m' = m; Chris@97: m'' = mat.copyOf m; Chris@97: m.setAt 0 0 6; Chris@97: mat.equal m m' and not mat.equal m m''; Chris@97: ), Chris@97: Chris@97: "transposedEmpty": \( Chris@98: compare (mat.transposed (mat.constMatrix 2 { rows = 0, columns = 0 })).size { columns = 0, rows = 0 } and Chris@98: compare (mat.transposed (mat.constMatrix 2 { rows = 0, columns = 4 })).size { columns = 0, rows = 0 } and Chris@98: compare (mat.transposed (mat.constMatrix 2 { rows = 4, columns = 0 })).size { columns = 0, rows = 0 } Chris@97: ), Chris@97: Chris@97: "transposedSize": \( Chris@98: compare (mat.transposed (mat.constMatrix 2 { rows = 3, columns = 4 })).size { columns = 3, rows = 4 } Chris@97: ), Chris@97: Chris@97: "transposed": \( Chris@97: generator row col = row * 10 + col; Chris@98: m = mat.generate generator { rows = 2, columns = 3 }; Chris@97: m' = mat.transposed m; Chris@97: all id Chris@97: (map do row: all id Chris@97: // like getAt test, but with col/row flipped Chris@97: (map do col: m'.getAt col row == generator row col done [0..2]) Chris@97: done [0..1]) Chris@97: ), Chris@97: Chris@98: "scaled": \( Chris@98: mat.equal Chris@98: (mat.scaled 0.5 (mat.constMatrix 2 { rows = 3, columns = 4 })) Chris@98: (mat.constMatrix 1 { rows = 3, columns = 4 }) and Chris@98: mat.equal Chris@98: (mat.scaled 0.5 (mat.constMatrix (-3) { rows = 3, columns = 4 })) Chris@98: (mat.constMatrix (-1.5) { rows = 3, columns = 4 }) and Chris@98: mat.equal Chris@98: (mat.scaled 0.5 (mat.constMatrix 2 { rows = 0, columns = 2 })) Chris@98: (mat.constMatrix 5 { rows = 0, columns = 0 }) Chris@98: ), Chris@98: Chris@98: "sum": \( Chris@98: mat.equal Chris@98: (mat.sum (mat.constMatrix 2 { rows = 3, columns = 4 }) Chris@98: (mat.constMatrix 1 { rows = 3, columns = 4 })) Chris@98: (mat.constMatrix 3 { rows = 3, columns = 4 }) Chris@98: ), Chris@98: Chris@98: "sumFail": \( Chris@98: try Chris@98: \() (mat.sum (mat.constMatrix 2 { rows = 3, columns = 4 }) Chris@98: (mat.constMatrix 1 { rows = 3, columns = 5 })); Chris@98: false; Chris@98: catch FailureException e: Chris@98: true Chris@98: yrt Chris@98: ), Chris@98: Chris@98: "product": \( Chris@98: mat.equal Chris@98: (mat.product (mat.constMatrix 2 { rows = 4, columns = 2 }) Chris@98: (mat.constMatrix 3 { rows = 2, columns = 3 })) Chris@98: (mat.constMatrix 12 { rows = 4, columns = 3 }) Chris@98: ), Chris@98: Chris@97: ] is hash boolean>; Chris@97: