Moved matrix equality tests to TestUtils.
git-svn-id: https://svn.apache.org/repos/asf/commons/proper/math/trunk@742120 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
94fcce51cd
commit
2f227a6314
|
@ -28,6 +28,7 @@ import junit.framework.AssertionFailedError;
|
||||||
|
|
||||||
import org.apache.commons.math.complex.Complex;
|
import org.apache.commons.math.complex.Complex;
|
||||||
import org.apache.commons.math.complex.ComplexFormat;
|
import org.apache.commons.math.complex.ComplexFormat;
|
||||||
|
import org.apache.commons.math.linear.RealMatrix;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @version $Revision$ $Date$
|
* @version $Revision$ $Date$
|
||||||
|
@ -252,4 +253,45 @@ public class TestUtils {
|
||||||
assertContains(null, values, x, epsilon);
|
assertContains(null, values, x, epsilon);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** verifies that two matrices are close (1-norm) */
|
||||||
|
public static void assertEquals(String msg, RealMatrix expected, RealMatrix observed,
|
||||||
|
double tolerance) {
|
||||||
|
|
||||||
|
if (observed == null) {
|
||||||
|
Assert.fail(msg + "\nObserved is null");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (expected.getColumnDimension() != observed.getColumnDimension() ||
|
||||||
|
expected.getRowDimension() != observed.getRowDimension()) {
|
||||||
|
StringBuffer messageBuffer = new StringBuffer(msg);
|
||||||
|
messageBuffer.append("\nObserved has incorrect dimensions.");
|
||||||
|
messageBuffer.append("\nobserved is " + observed.getRowDimension() +
|
||||||
|
" x " + observed.getColumnDimension());
|
||||||
|
messageBuffer.append("\nexpected " + expected.getRowDimension() +
|
||||||
|
" x " + expected.getColumnDimension());
|
||||||
|
Assert.fail(messageBuffer.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
RealMatrix delta = expected.subtract(observed);
|
||||||
|
if (delta.getNorm() >= tolerance) {
|
||||||
|
StringBuffer messageBuffer = new StringBuffer(msg);
|
||||||
|
messageBuffer.append("\nExpected: " + expected);
|
||||||
|
messageBuffer.append("\nObserved: " + observed);
|
||||||
|
messageBuffer.append("\nexpected - observed: " + delta);
|
||||||
|
Assert.fail(messageBuffer.toString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** verifies that two arrays are close (sup norm) */
|
||||||
|
public static void assertEquals(String msg, double[] m, double[] n,
|
||||||
|
double tolerance) {
|
||||||
|
if (m.length != n.length) {
|
||||||
|
Assert.fail("vectors not same length");
|
||||||
|
}
|
||||||
|
for (int i = 0; i < m.length; i++) {
|
||||||
|
Assert.assertEquals(msg + " " + i + " elements differ",
|
||||||
|
m[i],n[i],tolerance);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,6 +20,8 @@ import junit.framework.Test;
|
||||||
import junit.framework.TestCase;
|
import junit.framework.TestCase;
|
||||||
import junit.framework.TestSuite;
|
import junit.framework.TestSuite;
|
||||||
|
|
||||||
|
import org.apache.commons.math.TestUtils;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Test cases for the {@link RealMatrixImpl} class.
|
* Test cases for the {@link RealMatrixImpl} class.
|
||||||
*
|
*
|
||||||
|
@ -171,7 +173,7 @@ public final class RealMatrixImplTest extends TestCase {
|
||||||
public void testPlusMinus() {
|
public void testPlusMinus() {
|
||||||
RealMatrixImpl m = new RealMatrixImpl(testData);
|
RealMatrixImpl m = new RealMatrixImpl(testData);
|
||||||
RealMatrixImpl m2 = new RealMatrixImpl(testDataInv);
|
RealMatrixImpl m2 = new RealMatrixImpl(testDataInv);
|
||||||
assertClose("m-n = m + -n",m.subtract(m2),
|
TestUtils.assertEquals("m-n = m + -n",m.subtract(m2),
|
||||||
m2.scalarMultiply(-1d).add(m),entryTolerance);
|
m2.scalarMultiply(-1d).add(m),entryTolerance);
|
||||||
try {
|
try {
|
||||||
m.subtract(new RealMatrixImpl(testData2));
|
m.subtract(new RealMatrixImpl(testData2));
|
||||||
|
@ -187,15 +189,15 @@ public final class RealMatrixImplTest extends TestCase {
|
||||||
RealMatrixImpl mInv = new RealMatrixImpl(testDataInv);
|
RealMatrixImpl mInv = new RealMatrixImpl(testDataInv);
|
||||||
RealMatrixImpl identity = new RealMatrixImpl(id);
|
RealMatrixImpl identity = new RealMatrixImpl(id);
|
||||||
RealMatrixImpl m2 = new RealMatrixImpl(testData2);
|
RealMatrixImpl m2 = new RealMatrixImpl(testData2);
|
||||||
assertClose("inverse multiply",m.multiply(mInv),
|
TestUtils.assertEquals("inverse multiply",m.multiply(mInv),
|
||||||
identity,entryTolerance);
|
identity,entryTolerance);
|
||||||
assertClose("inverse multiply",mInv.multiply(m),
|
TestUtils.assertEquals("inverse multiply",mInv.multiply(m),
|
||||||
identity,entryTolerance);
|
identity,entryTolerance);
|
||||||
assertClose("identity multiply",m.multiply(identity),
|
TestUtils.assertEquals("identity multiply",m.multiply(identity),
|
||||||
m,entryTolerance);
|
m,entryTolerance);
|
||||||
assertClose("identity multiply",identity.multiply(mInv),
|
TestUtils.assertEquals("identity multiply",identity.multiply(mInv),
|
||||||
mInv,entryTolerance);
|
mInv,entryTolerance);
|
||||||
assertClose("identity multiply",m2.multiply(identity),
|
TestUtils.assertEquals("identity multiply",m2.multiply(identity),
|
||||||
m2,entryTolerance);
|
m2,entryTolerance);
|
||||||
try {
|
try {
|
||||||
m.multiply(new RealMatrixImpl(bigSingular));
|
m.multiply(new RealMatrixImpl(bigSingular));
|
||||||
|
@ -215,7 +217,7 @@ public final class RealMatrixImplTest extends TestCase {
|
||||||
RealMatrix m3 = new RealMatrixImpl(d3);
|
RealMatrix m3 = new RealMatrixImpl(d3);
|
||||||
RealMatrix m4 = new RealMatrixImpl(d4);
|
RealMatrix m4 = new RealMatrixImpl(d4);
|
||||||
RealMatrix m5 = new RealMatrixImpl(d5);
|
RealMatrix m5 = new RealMatrixImpl(d5);
|
||||||
assertClose("m3*m4=m5", m3.multiply(m4), m5, entryTolerance);
|
TestUtils.assertEquals("m3*m4=m5", m3.multiply(m4), m5, entryTolerance);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** test trace */
|
/** test trace */
|
||||||
|
@ -234,16 +236,16 @@ public final class RealMatrixImplTest extends TestCase {
|
||||||
/** test sclarAdd */
|
/** test sclarAdd */
|
||||||
public void testScalarAdd() {
|
public void testScalarAdd() {
|
||||||
RealMatrix m = new RealMatrixImpl(testData);
|
RealMatrix m = new RealMatrixImpl(testData);
|
||||||
assertClose("scalar add",new RealMatrixImpl(testDataPlus2),
|
TestUtils.assertEquals("scalar add",new RealMatrixImpl(testDataPlus2),
|
||||||
m.scalarAdd(2d),entryTolerance);
|
m.scalarAdd(2d),entryTolerance);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** test operate */
|
/** test operate */
|
||||||
public void testOperate() {
|
public void testOperate() {
|
||||||
RealMatrix m = new RealMatrixImpl(id);
|
RealMatrix m = new RealMatrixImpl(id);
|
||||||
assertClose("identity operate", testVector,
|
TestUtils.assertEquals("identity operate", testVector,
|
||||||
m.operate(testVector), entryTolerance);
|
m.operate(testVector), entryTolerance);
|
||||||
assertClose("identity operate", testVector,
|
TestUtils.assertEquals("identity operate", testVector,
|
||||||
m.operate(new RealVectorImpl(testVector)).getData(), entryTolerance);
|
m.operate(new RealVectorImpl(testVector)).getData(), entryTolerance);
|
||||||
m = new RealMatrixImpl(bigSingular);
|
m = new RealMatrixImpl(bigSingular);
|
||||||
try {
|
try {
|
||||||
|
@ -271,18 +273,18 @@ public final class RealMatrixImplTest extends TestCase {
|
||||||
RealMatrix m = new RealMatrixImpl(testData);
|
RealMatrix m = new RealMatrixImpl(testData);
|
||||||
RealMatrix mIT = new LUDecompositionImpl(m).getSolver().getInverse().transpose();
|
RealMatrix mIT = new LUDecompositionImpl(m).getSolver().getInverse().transpose();
|
||||||
RealMatrix mTI = new LUDecompositionImpl(m.transpose()).getSolver().getInverse();
|
RealMatrix mTI = new LUDecompositionImpl(m.transpose()).getSolver().getInverse();
|
||||||
assertClose("inverse-transpose", mIT, mTI, normTolerance);
|
TestUtils.assertEquals("inverse-transpose", mIT, mTI, normTolerance);
|
||||||
m = new RealMatrixImpl(testData2);
|
m = new RealMatrixImpl(testData2);
|
||||||
RealMatrix mt = new RealMatrixImpl(testData2T);
|
RealMatrix mt = new RealMatrixImpl(testData2T);
|
||||||
assertClose("transpose",mt,m.transpose(),normTolerance);
|
TestUtils.assertEquals("transpose",mt,m.transpose(),normTolerance);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** test preMultiply by vector */
|
/** test preMultiply by vector */
|
||||||
public void testPremultiplyVector() {
|
public void testPremultiplyVector() {
|
||||||
RealMatrix m = new RealMatrixImpl(testData);
|
RealMatrix m = new RealMatrixImpl(testData);
|
||||||
assertClose("premultiply", m.preMultiply(testVector),
|
TestUtils.assertEquals("premultiply", m.preMultiply(testVector),
|
||||||
preMultTest, normTolerance);
|
preMultTest, normTolerance);
|
||||||
assertClose("premultiply", m.preMultiply(new RealVectorImpl(testVector).getData()),
|
TestUtils.assertEquals("premultiply", m.preMultiply(new RealVectorImpl(testVector).getData()),
|
||||||
preMultTest, normTolerance);
|
preMultTest, normTolerance);
|
||||||
m = new RealMatrixImpl(bigSingular);
|
m = new RealMatrixImpl(bigSingular);
|
||||||
try {
|
try {
|
||||||
|
@ -297,18 +299,18 @@ public final class RealMatrixImplTest extends TestCase {
|
||||||
RealMatrix m3 = new RealMatrixImpl(d3);
|
RealMatrix m3 = new RealMatrixImpl(d3);
|
||||||
RealMatrix m4 = new RealMatrixImpl(d4);
|
RealMatrix m4 = new RealMatrixImpl(d4);
|
||||||
RealMatrix m5 = new RealMatrixImpl(d5);
|
RealMatrix m5 = new RealMatrixImpl(d5);
|
||||||
assertClose("m3*m4=m5", m4.preMultiply(m3), m5, entryTolerance);
|
TestUtils.assertEquals("m3*m4=m5", m4.preMultiply(m3), m5, entryTolerance);
|
||||||
|
|
||||||
RealMatrixImpl m = new RealMatrixImpl(testData);
|
RealMatrixImpl m = new RealMatrixImpl(testData);
|
||||||
RealMatrixImpl mInv = new RealMatrixImpl(testDataInv);
|
RealMatrixImpl mInv = new RealMatrixImpl(testDataInv);
|
||||||
RealMatrixImpl identity = new RealMatrixImpl(id);
|
RealMatrixImpl identity = new RealMatrixImpl(id);
|
||||||
assertClose("inverse multiply",m.preMultiply(mInv),
|
TestUtils.assertEquals("inverse multiply",m.preMultiply(mInv),
|
||||||
identity,entryTolerance);
|
identity,entryTolerance);
|
||||||
assertClose("inverse multiply",mInv.preMultiply(m),
|
TestUtils.assertEquals("inverse multiply",mInv.preMultiply(m),
|
||||||
identity,entryTolerance);
|
identity,entryTolerance);
|
||||||
assertClose("identity multiply",m.preMultiply(identity),
|
TestUtils.assertEquals("identity multiply",m.preMultiply(identity),
|
||||||
m,entryTolerance);
|
m,entryTolerance);
|
||||||
assertClose("identity multiply",identity.preMultiply(mInv),
|
TestUtils.assertEquals("identity multiply",identity.preMultiply(mInv),
|
||||||
mInv,entryTolerance);
|
mInv,entryTolerance);
|
||||||
try {
|
try {
|
||||||
m.preMultiply(new RealMatrixImpl(bigSingular));
|
m.preMultiply(new RealMatrixImpl(bigSingular));
|
||||||
|
@ -320,8 +322,8 @@ public final class RealMatrixImplTest extends TestCase {
|
||||||
|
|
||||||
public void testGetVectors() {
|
public void testGetVectors() {
|
||||||
RealMatrix m = new RealMatrixImpl(testData);
|
RealMatrix m = new RealMatrixImpl(testData);
|
||||||
assertClose("get row",m.getRow(0),testDataRow1,entryTolerance);
|
TestUtils.assertEquals("get row",m.getRow(0),testDataRow1,entryTolerance);
|
||||||
assertClose("get col",m.getColumn(2),testDataCol3,entryTolerance);
|
TestUtils.assertEquals("get col",m.getColumn(2),testDataCol3,entryTolerance);
|
||||||
try {
|
try {
|
||||||
m.getRow(10);
|
m.getRow(10);
|
||||||
fail("expecting MatrixIndexException");
|
fail("expecting MatrixIndexException");
|
||||||
|
@ -954,24 +956,6 @@ public final class RealMatrixImplTest extends TestCase {
|
||||||
};
|
};
|
||||||
|
|
||||||
//--------------- -----------------Protected methods
|
//--------------- -----------------Protected methods
|
||||||
|
|
||||||
/** verifies that two matrices are close (1-norm) */
|
|
||||||
protected void assertClose(String msg, RealMatrix m, RealMatrix n,
|
|
||||||
double tolerance) {
|
|
||||||
assertTrue(msg,m.subtract(n).getNorm() < tolerance);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** verifies that two vectors are close (sup norm) */
|
|
||||||
protected void assertClose(String msg, double[] m, double[] n,
|
|
||||||
double tolerance) {
|
|
||||||
if (m.length != n.length) {
|
|
||||||
fail("vectors not same length");
|
|
||||||
}
|
|
||||||
for (int i = 0; i < m.length; i++) {
|
|
||||||
assertEquals(msg + " " + i + " elements differ",
|
|
||||||
m[i],n[i],tolerance);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/** extracts the l and u matrices from compact lu representation */
|
/** extracts the l and u matrices from compact lu representation */
|
||||||
protected void splitLU(RealMatrix lu, double[][] lowerData, double[][] upperData) throws InvalidMatrixException {
|
protected void splitLU(RealMatrix lu, double[][] lowerData, double[][] upperData) throws InvalidMatrixException {
|
||||||
|
|
Loading…
Reference in New Issue