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@158: { compare, compareUsing } = load yetilab.test.test; Chris@97: Chris@158: compareMatrices = compareUsing mat.equal; Chris@99: Chris@99: makeTests name flipper = Chris@99: (constMatrix n s = flipper (mat.constMatrix n s); Chris@99: zeroMatrix s = flipper (mat.zeroMatrix s); Chris@99: randomMatrix s = flipper (mat.randomMatrix s); Chris@99: identityMatrix s = flipper (mat.identityMatrix s); Chris@99: generate f s = flipper (mat.generate f s); Chris@99: newMatrix t d = flipper (mat.newMatrix t d); Chris@97: [ Chris@97: Chris@99: "constMatrixEmpty-\(name)": \( Chris@99: m = constMatrix 2 { rows = 0, columns = 0 }; Chris@97: compare m.size { columns = 0, rows = 0 } Chris@97: ), Chris@97: Chris@99: "constMatrixEmpty2-\(name)": \( Chris@99: compare (constMatrix 2 { rows = 0, columns = 4 }).size { columns = 0, rows = 0 } and Chris@99: compare (constMatrix 2 { rows = 4, columns = 0 }).size { columns = 0, rows = 0 } Chris@97: ), Chris@97: Chris@99: "constMatrix-\(name)": \( Chris@99: m = 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@99: "randomMatrixEmpty-\(name)": \( Chris@99: m = randomMatrix { rows = 0, columns = 0 }; Chris@97: compare m.size { columns = 0, rows = 0 } Chris@97: ), Chris@97: Chris@99: "randomMatrix-\(name)": \( Chris@99: m = randomMatrix { rows = 3, columns = 4 }; Chris@97: compare m.size { columns = 4, rows = 3 } Chris@97: ), Chris@97: Chris@99: "zeroMatrixEmpty-\(name)": \( Chris@99: m = zeroMatrix { rows = 0, columns = 0 }; Chris@97: compare m.size { columns = 0, rows = 0 } Chris@97: ), Chris@97: Chris@99: "zeroMatrix-\(name)": \( Chris@99: m = 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@99: "identityMatrixEmpty-\(name)": \( Chris@99: m = identityMatrix { rows = 0, columns = 0 }; Chris@97: compare m.size { columns = 0, rows = 0 } Chris@97: ), Chris@97: Chris@99: "identityMatrix-\(name)": \( Chris@99: m = 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@99: "generateEmpty-\(name)": \( Chris@99: m = generate do row col: 0 done { rows = 0, columns = 0 }; Chris@97: compare m.size { columns = 0, rows = 0 } Chris@97: ), Chris@97: Chris@99: "generate-\(name)": \( Chris@99: m = 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@99: "widthAndHeight-\(name)": \( Chris@99: m = constMatrix 2 { rows = 3, columns = 4 }; Chris@97: compare m.size { columns = mat.width m, rows = mat.height m } Chris@97: ), Chris@97: Chris@99: "equal-\(name)": \( Chris@100: m = newMatrix (ColumnMajor ()) [[1,4],[2,5],[3,6]]; Chris@100: n = m; Chris@100: p = newMatrix (RowMajor ()) [[1,2,3],[4,5,6]]; Chris@100: q = newMatrix (ColumnMajor ()) [[1,2,3],[4,5,6]]; Chris@159: r = newMatrix (ColumnMajor ()) [[1,4],[2,5]]; Chris@100: compareMatrices m n and Chris@100: compareMatrices m p and Chris@100: compareMatrices n p and Chris@159: not mat.equal m q and Chris@159: not mat.equal m r Chris@97: ), Chris@97: Chris@99: "getAt-\(name)": \( Chris@97: generator row col = row * 10 + col; Chris@99: m = 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@99: "setAt-\(name)": \( Chris@97: generator row col = row * 10 + col; Chris@99: m = 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@99: "copyOfEqual-\(name)": \( Chris@99: m = constMatrix 2 { rows = 3, columns = 4 }; Chris@97: m'' = mat.copyOf m; Chris@99: compareMatrices m'' m Chris@97: ), Chris@97: Chris@99: "copyOfAlias-\(name)": \( Chris@99: m = constMatrix 2 { rows = 3, columns = 4 }; Chris@97: m' = m; Chris@97: m'' = mat.copyOf m; Chris@97: m.setAt 0 0 6; Chris@99: compareMatrices m' m and not mat.equal m m''; Chris@97: ), Chris@97: Chris@99: "transposedEmpty-\(name)": \( Chris@99: compare (mat.transposed (constMatrix 2 { rows = 0, columns = 0 })).size { columns = 0, rows = 0 } and Chris@99: compare (mat.transposed (constMatrix 2 { rows = 0, columns = 4 })).size { columns = 0, rows = 0 } and Chris@99: compare (mat.transposed (constMatrix 2 { rows = 4, columns = 0 })).size { columns = 0, rows = 0 } Chris@97: ), Chris@97: Chris@99: "transposedSize-\(name)": \( Chris@99: compare (mat.transposed (constMatrix 2 { rows = 3, columns = 4 })).size { columns = 3, rows = 4 } Chris@97: ), Chris@97: Chris@99: "transposed-\(name)": \( Chris@97: generator row col = row * 10 + col; Chris@99: m = 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@100: "transposed-back-\(name)": \( Chris@100: m = newMatrix (ColumnMajor ()) [[1,4],[2,5],[3,6]]; Chris@100: compareMatrices m (mat.transposed (mat.transposed m)) and Chris@100: not mat.equal m (mat.transposed m); Chris@100: ), Chris@100: Chris@100: "flipped-\(name)": \( Chris@99: m = newMatrix (ColumnMajor ()) [[1,4],[2,5],[3,6]]; Chris@99: m' = mat.flipped m; Chris@99: m'' = newMatrix (RowMajor ()) [[1,2,3],[4,5,6]]; Chris@100: compareMatrices m m' and compareMatrices m m'' and compareMatrices m' m''; Chris@98: ), Chris@98: Chris@100: "flipped-back-\(name)": \( Chris@100: m = newMatrix (ColumnMajor ()) [[1,4],[2,5],[3,6]]; Chris@100: compareMatrices m (mat.flipped (mat.flipped m)); Chris@100: ), Chris@100: Chris@100: "flipped-empty-\(name)": \( Chris@99: m = constMatrix 2 { rows = 0, columns = 4 }; Chris@99: compareMatrices (mat.flipped m) (mat.flipped (constMatrix 0 { rows = 0, columns = 0 })); Chris@98: ), Chris@98: Chris@161: "toRowMajor-\(name)": \( Chris@161: m = newMatrix (ColumnMajor ()) [[1,4],[2,5],[3,6]]; Chris@161: m' = mat.toRowMajor m; Chris@161: m'' = newMatrix (RowMajor ()) [[1,2,3],[4,5,6]]; Chris@161: m''' = mat.toRowMajor m''; Chris@161: compareMatrices m m' and compareMatrices m m'' and compareMatrices m' m'' Chris@161: and compareMatrices m m'''; Chris@161: ), Chris@161: Chris@161: "toColumnMajor-\(name)": \( Chris@161: m = newMatrix (RowMajor ()) [[1,4],[2,5],[3,6]]; Chris@161: m' = mat.toColumnMajor m; Chris@161: m'' = newMatrix (ColumnMajor ()) [[1,2,3],[4,5,6]]; Chris@161: m''' = mat.toColumnMajor m''; Chris@161: compareMatrices m m' and compareMatrices m m'' and compareMatrices m' m'' Chris@161: and compareMatrices m m'''; Chris@161: ), Chris@161: Chris@99: "scaled-\(name)": \( Chris@99: compareMatrices Chris@99: (mat.scaled 0.5 (constMatrix 2 { rows = 3, columns = 4 })) Chris@99: (constMatrix 1 { rows = 3, columns = 4 }) and Chris@99: compareMatrices Chris@99: (mat.scaled 0.5 (constMatrix (-3) { rows = 3, columns = 4 })) Chris@99: (constMatrix (-1.5) { rows = 3, columns = 4 }) and Chris@99: compareMatrices Chris@99: (mat.scaled 0.5 (constMatrix 2 { rows = 0, columns = 2 })) Chris@99: (constMatrix 5 { rows = 0, columns = 0 }) Chris@99: ), Chris@99: Chris@99: "sum-\(name)": \( Chris@99: compareMatrices Chris@99: (mat.sum (constMatrix 2 { rows = 3, columns = 4 }) Chris@99: (constMatrix 1 { rows = 3, columns = 4 })) Chris@99: (constMatrix 3 { rows = 3, columns = 4 }) Chris@99: ), Chris@99: Chris@99: "sumFail-\(name)": \( Chris@98: try Chris@99: \() (mat.sum (constMatrix 2 { rows = 3, columns = 4 }) Chris@99: (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@99: "product-\(name)": \( Chris@99: compareMatrices Chris@99: (mat.product (constMatrix 2 { rows = 4, columns = 2 }) Chris@99: (constMatrix 3 { rows = 2, columns = 3 })) Chris@99: (constMatrix 12 { rows = 4, columns = 3 }) and Chris@99: compareMatrices Chris@99: (mat.product (newMatrix (ColumnMajor ()) [[1,4],[2,5],[3,6]]) Chris@99: (newMatrix (ColumnMajor ()) [[7,9,11],[8,10,12]])) Chris@99: (newMatrix (ColumnMajor ()) [[58,139],[64,154]]) Chris@98: ), Chris@98: Chris@99: "productFail-\(name)": \( Chris@99: try Chris@99: \() (mat.product (constMatrix 2 { rows = 4, columns = 2 }) Chris@99: (constMatrix 3 { rows = 3, columns = 2 })); Chris@99: false; Chris@99: catch FailureException e: Chris@99: true Chris@99: yrt Chris@99: ), Chris@97: Chris@158: "resizedTo-\(name)": \( Chris@158: compareMatrices Chris@158: (mat.resizedTo { rows = 2, columns = 2 } Chris@158: (newMatrix (ColumnMajor ()) [[1,4],[2,5],[3,6]])) Chris@159: (newMatrix (ColumnMajor ()) [[1,4],[2,5]]) and Chris@158: compareMatrices Chris@158: (mat.resizedTo { rows = 3, columns = 4 } Chris@158: (newMatrix (ColumnMajor ()) [[1,4],[2,5],[3,6]])) Chris@158: (newMatrix (ColumnMajor ()) [[1,4,0],[2,5,0],[3,6,0],[0,0,0]]) and Chris@158: compareMatrices Chris@158: (mat.resizedTo { rows = 1, columns = 1 } Chris@158: (newMatrix (ColumnMajor ()) [[1,4],[2,5],[3,6]])) Chris@159: (newMatrix (RowMajor ()) [[1]]) Chris@158: ), Chris@158: Chris@158: "zeroSizeMatrix-\(name)": \( Chris@158: compareMatrices Chris@158: (mat.zeroSizeMatrix ()) Chris@158: (newMatrix (ColumnMajor ()) []) Chris@158: ), Chris@158: Chris@161: "asRows-\(name)": \( Chris@161: compare Chris@161: (mat.asRows (newMatrix (ColumnMajor ()) [[1,4],[2,5],[3,6]])) Chris@161: [[1,2,3],[4,5,6]]; Chris@161: ), Chris@161: Chris@161: "asColumns-\(name)": \( Chris@161: compare Chris@161: (mat.asColumns (newMatrix (ColumnMajor ()) [[1,4],[2,5],[3,6]])) Chris@161: [[1,4],[2,5],[3,6]]; Chris@161: ), Chris@161: Chris@99: ]); Chris@99: Chris@99: colhash = makeTests "column-major" id; Chris@99: rowhash = makeTests "row-major" mat.flipped; Chris@99: Chris@99: all = [:]; Chris@99: for (keys colhash) do k: all[k] := colhash[k] done; Chris@99: for (keys rowhash) do k: all[k] := rowhash[k] done; Chris@99: Chris@99: all is hash boolean>; Chris@99: Chris@99: