### Question:
DataUtilities { public static double[][] clone(double[][] source) { if (source == null) { throw new IllegalArgumentException("Null 'source' argument."); } double[][] clone = new double[source.length][]; for (int i = 0; i < source.length; i++) { if (source[i] != null) { double[] row = new double[source[i].length]; System.arraycopy(source[i], 0, row, 0, source[i].length); clone[i] = row; } } return clone; }  static boolean equal(double[][] a, double[][] b); static double[][] clone(double[][] source); static double calculateColumnTotal(Values2D data, int column); static double calculateColumnTotal(Values2D data, int column,
             int[] validRows); static double calculateRowTotal(Values2D data, int row); static double calculateRowTotal(Values2D data, int row,
             int[] validCols); static Number[] createNumberArray(double[] data); static Number[][] createNumberArray2D(double[][] data); static KeyedValues getCumulativePercentages(KeyedValues data);  }### Answer:
@Test public void testClone() { double[][] a = new double[1][]; double[][] b = DataUtilities.clone(a); assertTrue(DataUtilities.equal(a, b)); a[0] = new double[] { 3.0, 4.0 }; assertFalse(DataUtilities.equal(a, b)); b[0] = new double[] { 3.0, 4.0 }; assertTrue(DataUtilities.equal(a, b)); a = new double[2][3]; a[0][0] = 1.23; a[1][1] = Double.NaN; b = DataUtilities.clone(a); assertTrue(DataUtilities.equal(a, b)); a[0][0] = 99.9; assertFalse(DataUtilities.equal(a, b)); b[0][0] = 99.9; assertTrue(DataUtilities.equal(a, b)); }