+
+ @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"));
+ }