📄 testmatrix.java
字号:
package Jama.test;import Jama.*;import java.io.*;import java.util.zip.GZIPInputStream;import java.text.DecimalFormat;import java.text.DecimalFormatSymbols;import java.util.Locale;/** TestMatrix tests the functionality of the Jama Matrix class and associated decompositions.<P>Run the test from the command line using<BLOCKQUOTE><PRE><CODE> java Jama.test.TestMatrix </CODE></PRE></BLOCKQUOTE>Detailed output is provided indicating the functionality being testedand whether the functionality is correctly implemented. Exception handlingis also tested. <P>The test is designed to run to completion and give a summary of any implementation errorsencountered. The final output should be:<BLOCKQUOTE><PRE><CODE> TestMatrix completed. Total errors reported: n1 Total warning reported: n2</CODE></PRE></BLOCKQUOTE>If the test does not run to completion, this indicates that there is a substantial problem within the implementation that was not anticipated in the test design. The stopping point should give an indication of where the problem exists.**/public class TestMatrix { public static void main (String argv[]) { Matrix A,B,C,Z,O,I,R,S,X,SUB,M,T,SQ,DEF,SOL; // Uncomment this to test IO in a different locale. // Locale.setDefault(Locale.GERMAN); int errorCount=0; int warningCount=0; double tmp, s; double[] columnwise = {1.,2.,3.,4.,5.,6.,7.,8.,9.,10.,11.,12.}; double[] rowwise = {1.,4.,7.,10.,2.,5.,8.,11.,3.,6.,9.,12.}; double[][] avals = {{1.,4.,7.,10.},{2.,5.,8.,11.},{3.,6.,9.,12.}}; double[][] rankdef = avals; double[][] tvals = {{1.,2.,3.},{4.,5.,6.},{7.,8.,9.},{10.,11.,12.}}; double[][] subavals = {{5.,8.,11.},{6.,9.,12.}}; double[][] rvals = {{1.,4.,7.},{2.,5.,8.,11.},{3.,6.,9.,12.}}; double[][] pvals = {{1.,1.,1.},{1.,2.,3.},{1.,3.,6.}}; double[][] ivals = {{1.,0.,0.,0.},{0.,1.,0.,0.},{0.,0.,1.,0.}}; double[][] evals = {{0.,1.,0.,0.},{1.,0.,2.e-7,0.},{0.,-2.e-7,0.,1.},{0.,0.,1.,0.}}; double[][] square = {{166.,188.,210.},{188.,214.,240.},{210.,240.,270.}}; double[][] sqSolution = {{13.},{15.}}; double[][] condmat = {{1.,3.},{7.,9.}}; int rows=3,cols=4; int invalidld=5;/* should trigger bad shape for construction with val */ int raggedr=0; /* (raggedr,raggedc) should be out of bounds in ragged array */ int raggedc=4; int validld=3; /* leading dimension of intended test Matrices */ int nonconformld=4; /* leading dimension which is valid, but nonconforming */ int ib=1,ie=2,jb=1,je=3; /* index ranges for sub Matrix */ int[] rowindexset = {1,2}; int[] badrowindexset = {1,3}; int[] columnindexset = {1,2,3}; int[] badcolumnindexset = {1,2,4}; double columnsummax = 33.; double rowsummax = 30.; double sumofdiagonals = 15; double sumofsquares = 650;/** Constructors and constructor-like methods: double[], int double[][] int, int int, int, double int, int, double[][] constructWithCopy(double[][]) random(int,int) identity(int)**/ print("\nTesting constructors and constructor-like methods...\n"); try{ /** check that exception is thrown in packed constructor with invalid length **/ A = new Matrix(columnwise,invalidld); errorCount = try_failure(errorCount,"Catch invalid length in packed constructor... ", "exception not thrown for invalid input"); } catch ( IllegalArgumentException e ) { try_success("Catch invalid length in packed constructor... ", e.getMessage()); } try{ /** check that exception is thrown in default constructor if input array is 'ragged' **/ A = new Matrix(rvals); tmp = A.get(raggedr,raggedc); } catch ( IllegalArgumentException e ) { try_success("Catch ragged input to default constructor... ", e.getMessage()); } catch ( java.lang.ArrayIndexOutOfBoundsException e ) { errorCount = try_failure(errorCount,"Catch ragged input to constructor... ", "exception not thrown in construction...ArrayIndexOutOfBoundsException thrown later"); } try{ /** check that exception is thrown in constructWithCopy if input array is 'ragged' **/ A = Matrix.constructWithCopy(rvals); tmp = A.get(raggedr,raggedc); } catch ( IllegalArgumentException e ) { try_success("Catch ragged input to constructWithCopy... ",e.getMessage()); } catch ( java.lang.ArrayIndexOutOfBoundsException e ) { errorCount = try_failure(errorCount,"Catch ragged input to constructWithCopy... ","exception not thrown in construction...ArrayIndexOutOfBoundsException thrown later"); } A = new Matrix(columnwise,validld); B = new Matrix(avals); tmp = B.get(0,0); avals[0][0] = 0.0; C = B.minus(A); avals[0][0] = tmp; B = Matrix.constructWithCopy(avals); tmp = B.get(0,0); avals[0][0] = 0.0; if ( ( tmp - B.get(0,0) ) != 0.0 ) { /** check that constructWithCopy behaves properly **/ errorCount = try_failure(errorCount,"constructWithCopy... ","copy not effected... data visible outside"); } else { try_success("constructWithCopy... ",""); } avals[0][0] = columnwise[0]; I = new Matrix(ivals); try { check(I,Matrix.identity(3,4)); try_success("identity... ",""); } catch ( java.lang.RuntimeException e ) { errorCount = try_failure(errorCount,"identity... ","identity Matrix not successfully created"); } /** Access Methods: getColumnDimension() getRowDimension() getArray() getArrayCopy() getColumnPackedCopy() getRowPackedCopy() get(int,int) getMatrix(int,int,int,int) getMatrix(int,int,int[]) getMatrix(int[],int,int) getMatrix(int[],int[]) set(int,int,double) setMatrix(int,int,int,int,Matrix) setMatrix(int,int,int[],Matrix) setMatrix(int[],int,int,Matrix) setMatrix(int[],int[],Matrix)**/ print("\nTesting access methods...\n");/** Various get methods:**/ B = new Matrix(avals); if (B.getRowDimension() != rows) { errorCount = try_failure(errorCount,"getRowDimension... ",""); } else { try_success("getRowDimension... ",""); } if (B.getColumnDimension() != cols) { errorCount = try_failure(errorCount,"getColumnDimension... ",""); } else { try_success("getColumnDimension... ",""); } B = new Matrix(avals); double[][] barray = B.getArray(); if ( barray != avals ) { errorCount = try_failure(errorCount,"getArray... ",""); } else { try_success("getArray... ",""); } barray = B.getArrayCopy(); if ( barray == avals ) { errorCount = try_failure(errorCount,"getArrayCopy... ","data not (deep) copied"); } try { check(barray,avals); try_success("getArrayCopy... ",""); } catch ( java.lang.RuntimeException e ) { errorCount = try_failure(errorCount,"getArrayCopy... ","data not successfully (deep) copied"); } double[] bpacked = B.getColumnPackedCopy(); try { check(bpacked,columnwise); try_success("getColumnPackedCopy... ",""); } catch ( java.lang.RuntimeException e ) { errorCount = try_failure(errorCount,"getColumnPackedCopy... ","data not successfully (deep) copied by columns"); } bpacked = B.getRowPackedCopy(); try { check(bpacked,rowwise); try_success("getRowPackedCopy... ",""); } catch ( java.lang.RuntimeException e ) { errorCount = try_failure(errorCount,"getRowPackedCopy... ","data not successfully (deep) copied by rows"); } try { tmp = B.get(B.getRowDimension(),B.getColumnDimension()-1); errorCount = try_failure(errorCount,"get(int,int)... ","OutOfBoundsException expected but not thrown"); } catch ( java.lang.ArrayIndexOutOfBoundsException e ) { try { tmp = B.get(B.getRowDimension()-1,B.getColumnDimension()); errorCount = try_failure(errorCount,"get(int,int)... ","OutOfBoundsException expected but not thrown"); } catch ( java.lang.ArrayIndexOutOfBoundsException e1 ) { try_success("get(int,int)... OutofBoundsException... ",""); } } catch ( java.lang.IllegalArgumentException e1 ) { errorCount = try_failure(errorCount,"get(int,int)... ","OutOfBoundsException expected but not thrown"); } try { if (B.get(B.getRowDimension()-1,B.getColumnDimension()-1) != avals[B.getRowDimension()-1][B.getColumnDimension()-1] ) { errorCount = try_failure(errorCount,"get(int,int)... ","Matrix entry (i,j) not successfully retreived"); } else { try_success("get(int,int)... ",""); } } catch ( java.lang.ArrayIndexOutOfBoundsException e ) { errorCount = try_failure(errorCount,"get(int,int)... ","Unexpected ArrayIndexOutOfBoundsException"); } SUB = new Matrix(subavals); try { M = B.getMatrix(ib,ie+B.getRowDimension()+1,jb,je); errorCount = try_failure(errorCount,"getMatrix(int,int,int,int)... ","ArrayIndexOutOfBoundsException expected but not thrown"); } catch ( java.lang.ArrayIndexOutOfBoundsException e ) { try { M = B.getMatrix(ib,ie,jb,je+B.getColumnDimension()+1); errorCount = try_failure(errorCount,"getMatrix(int,int,int,int)... ","ArrayIndexOutOfBoundsException expected but not thrown"); } catch ( java.lang.ArrayIndexOutOfBoundsException e1 ) { try_success("getMatrix(int,int,int,int)... ArrayIndexOutOfBoundsException... ",""); } } catch ( java.lang.IllegalArgumentException e1 ) { errorCount = try_failure(errorCount,"getMatrix(int,int,int,int)... ","ArrayIndexOutOfBoundsException expected but not thrown"); } try { M = B.getMatrix(ib,ie,jb,je); try { check(SUB,M); try_success("getMatrix(int,int,int,int)... ",""); } catch ( java.lang.RuntimeException e ) { errorCount = try_failure(errorCount,"getMatrix(int,int,int,int)... ","submatrix not successfully retreived"); } } catch ( java.lang.ArrayIndexOutOfBoundsException e ) { errorCount = try_failure(errorCount,"getMatrix(int,int,int,int)... ","Unexpected ArrayIndexOutOfBoundsException"); } try { M = B.getMatrix(ib,ie,badcolumnindexset); errorCount = try_failure(errorCount,"getMatrix(int,int,int[])... ","ArrayIndexOutOfBoundsException expected but not thrown"); } catch ( java.lang.ArrayIndexOutOfBoundsException e ) { try { M = B.getMatrix(ib,ie+B.getRowDimension()+1,columnindexset); errorCount = try_failure(errorCount,"getMatrix(int,int,int[])... ","ArrayIndexOutOfBoundsException expected but not thrown"); } catch ( java.lang.ArrayIndexOutOfBoundsException e1 ) { try_success("getMatrix(int,int,int[])... ArrayIndexOutOfBoundsException... ",""); } } catch ( java.lang.IllegalArgumentException e1 ) { errorCount = try_failure(errorCount,"getMatrix(int,int,int[])... ","ArrayIndexOutOfBoundsException expected but not thrown"); } try { M = B.getMatrix(ib,ie,columnindexset); try { check(SUB,M); try_success("getMatrix(int,int,int[])... ",""); } catch ( java.lang.RuntimeException e ) { errorCount = try_failure(errorCount,"getMatrix(int,int,int[])... ","submatrix not successfully retreived"); } } catch ( java.lang.ArrayIndexOutOfBoundsException e ) { errorCount = try_failure(errorCount,"getMatrix(int,int,int[])... ","Unexpected ArrayIndexOutOfBoundsException"); } try { M = B.getMatrix(badrowindexset,jb,je); errorCount = try_failure(errorCount,"getMatrix(int[],int,int)... ","ArrayIndexOutOfBoundsException expected but not thrown"); } catch ( java.lang.ArrayIndexOutOfBoundsException e ) { try { M = B.getMatrix(rowindexset,jb,je+B.getColumnDimension()+1); errorCount = try_failure(errorCount,"getMatrix(int[],int,int)... ","ArrayIndexOutOfBoundsException expected but not thrown"); } catch ( java.lang.ArrayIndexOutOfBoundsException e1 ) { try_success("getMatrix(int[],int,int)... ArrayIndexOutOfBoundsException... ",""); } } catch ( java.lang.IllegalArgumentException e1 ) { errorCount = try_failure(errorCount,"getMatrix(int[],int,int)... ","ArrayIndexOutOfBoundsException expected but not thrown"); } try { M = B.getMatrix(rowindexset,jb,je); try { check(SUB,M); try_success("getMatrix(int[],int,int)... ",""); } catch ( java.lang.RuntimeException e ) { errorCount = try_failure(errorCount,"getMatrix(int[],int,int)... ","submatrix not successfully retreived"); } } catch ( java.lang.ArrayIndexOutOfBoundsException e ) { errorCount = try_failure(errorCount,"getMatrix(int[],int,int)... ","Unexpected ArrayIndexOutOfBoundsException"); } try { M = B.getMatrix(badrowindexset,columnindexset); errorCount = try_failure(errorCount,"getMatrix(int[],int[])... ","ArrayIndexOutOfBoundsException expected but not thrown"); } catch ( java.lang.ArrayIndexOutOfBoundsException e ) { try { M = B.getMatrix(rowindexset,badcolumnindexset); errorCount = try_failure(errorCount,"getMatrix(int[],int[])... ","ArrayIndexOutOfBoundsException expected but not thrown"); } catch ( java.lang.ArrayIndexOutOfBoundsException e1 ) { try_success("getMatrix(int[],int[])... ArrayIndexOutOfBoundsException... ",""); } } catch ( java.lang.IllegalArgumentException e1 ) { errorCount = try_failure(errorCount,"getMatrix(int[],int[])... ","ArrayIndexOutOfBoundsException expected but not thrown"); } try {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -