package mikera.matrixx.algo; import mikera.matrixx.Matrix; import mikera.matrixx.Matrix22; import mikera.matrixx.decompose.ISVDResult; import mikera.matrixx.decompose.SVD; import mikera.matrixx.impl.ZeroMatrix; import org.junit.Test; import static org.junit.Assert.assertEquals; public class TestRank { @Test public void testRank() { // Test 1 Matrix A = Matrix.create(new double[][] {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}); assertEquals(Rank.compute(A),2); // Test 2 Matrix B = Matrix.create(new double[][] {{1, 2, 3, 4}, {4, 5, 6, 7}, {7, 8, 9, 10}}); assertEquals(Rank.compute(B),2); } @Test public void testRankWithThreshold() { // Test 1 Matrix A = Matrix.create(new double[][] {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}); assertEquals(Rank.compute(A, 10e-20),3); // Test 2 Matrix B = Matrix.create(new double[][] {{1, 2, 3, 4}, {4, 5, 6, 7}, {7, 8, 9, 10}}); assertEquals(Rank.compute(B,10e-20),3); } @Test public void testRankUsingResult() { // Test 1 Matrix A = Matrix.create(new double[][] {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}); ISVDResult result = SVD.decompose(A); assertEquals(Rank.compute(result),2); // Test 2 Matrix B = Matrix.create(new double[][] {{1, 2, 3, 4}, {4, 5, 6, 7}, {7, 8, 9, 10}}); result = SVD.decompose(B); assertEquals(Rank.compute(result),2); } @Test public void testRankWithThresholdUsingResult() { // Test 1 Matrix A = Matrix.create(new double[][] {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}); ISVDResult result = SVD.decompose(A); assertEquals(Rank.compute(result, 10e-20),3); // Test 2 Matrix B = Matrix.create(new double[][] {{1, 2, 3, 4}, {4, 5, 6, 7}, {7, 8, 9, 10}}); result = SVD.decompose(B); assertEquals(Rank.compute(result, 10e-20),3); } @Test public void testZeroRank() { assertEquals(0,Rank.compute(ZeroMatrix.create(3, 4))); assertEquals(0,Rank.compute(ZeroMatrix.create(4, 3))); assertEquals(0,Rank.compute(ZeroMatrix.create(2, 2))); } @Test public void testPartialRank() { assertEquals(1,Rank.compute(Matrix22.create(2, 4, 1, 2))); assertEquals(1,Rank.compute(Matrix22.create(2, 4, 2, 4))); } }