X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=test%2Fjalview%2Fmath%2FMatrixTest.java;h=8af10b0f248c0d1a2c152dbc89105de6f1e88cdb;hb=d90895bf6eed41ff1b2d413306afae3cac458756;hp=bd4108c231511eff1953656e0a5a853aafb99537;hpb=eb0d71ed66dcd7d8519eae1f084b76d60b374142;p=jalview.git diff --git a/test/jalview/math/MatrixTest.java b/test/jalview/math/MatrixTest.java index bd4108c..8af10b0 100644 --- a/test/jalview/math/MatrixTest.java +++ b/test/jalview/math/MatrixTest.java @@ -1,6 +1,9 @@ package jalview.math; import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertFalse; +import static org.testng.Assert.assertNotEquals; +import static org.testng.Assert.assertNotSame; import static org.testng.Assert.assertNull; import static org.testng.Assert.assertTrue; import static org.testng.Assert.fail; @@ -187,8 +190,23 @@ public class MatrixTest } } Matrix m1 = new Matrix(in); + Matrix m2 = (Matrix) m1.copy(); + assertNotSame(m1, m2); assertTrue(matrixEquals(m1, m2)); + assertNull(m2.d); + assertNull(m2.e); + + /* + * now add d and e vectors and recopy + */ + m1.d = Arrays.copyOf(in[2], in[2].length); + m1.e = Arrays.copyOf(in[4], in[4].length); + m2 = (Matrix) m1.copy(); + assertNotSame(m2.d, m1.d); + assertNotSame(m2.e, m1.e); + assertEquals(m2.d, m1.d); + assertEquals(m2.e, m1.e); } /** @@ -354,7 +372,7 @@ public class MatrixTest assertMatricesMatch(m1, m2); } - private void assertMatricesMatch(MatrixI m1, MatrixI m2) + public static void assertMatricesMatch(MatrixI m1, MatrixI m2) { if (m1.height() != m2.height()) { @@ -376,8 +394,10 @@ public class MatrixTest } } } - ArrayAsserts.assertArrayEquals(m1.getD(), m2.getD(), 0.00001d); - ArrayAsserts.assertArrayEquals(m1.getE(), m2.getE(), 0.00001d); + ArrayAsserts.assertArrayEquals("D vector", m1.getD(), m2.getD(), + 0.00001d); + ArrayAsserts.assertArrayEquals("E vector", m1.getE(), m2.getE(), + 0.00001d); } @Test(groups = "Functional") @@ -514,4 +534,49 @@ public class MatrixTest assertEquals(m.getValue(1, 1), 8d, DELTA); assertEquals(m.getValue(1, 2), 30d, DELTA); } + + @Test(groups = "Functional") + public void testConstructor() + { + double[][] values = new double[][] { { 1, 2, 3 }, { 4, 5, 6 } }; + Matrix m = new Matrix(values); + assertEquals(m.getValue(0, 0), 1d, DELTA); + + /* + * verify the matrix has a copy of the original array + */ + assertNotSame(values[0], m.getRow(0)); + values[0][0] = -1d; + assertEquals(m.getValue(0, 0), 1d, DELTA); // unchanged + } + + @Test(groups = "Functional") + public void testEquals_hashCode() + { + double[][] values = new double[][] { { 1, 2, 3 }, { 4, 5, 6 } }; + Matrix m1 = new Matrix(values); + double[][] values2 = new double[][] { { 1, 2, 3 }, { 4, 5, 6 } }; + Matrix m2 = new Matrix(values2); + + assertTrue(m1.equals(m1)); + assertTrue(m1.equals(m2)); + assertTrue(m2.equals(m1)); + // equal objects should have same hashCode + assertEquals(m1.hashCode(), m2.hashCode()); + + double[][] values3 = new double[][] { { 1, 2, 3 }, { 4, 5, 7 } }; + m2 = new Matrix(values3); + assertFalse(m1.equals(m2)); + assertFalse(m2.equals(m1)); + assertNotEquals(m1.hashCode(), m2.hashCode()); + + // same hashCode doesn't always mean equal + values2 = new double[][] { { 1, 2, 3 }, { 4, 6, 5 } }; + m2 = new Matrix(values2); + assertFalse(m2.equals(m1)); + assertEquals(m1.hashCode(), m2.hashCode()); + + assertFalse(m1.equals(null)); + assertFalse(m1.equals("foo")); + } }