### Question:
Cloneables { public static <T extends JCloneable<T>> T[] deepClone(@Nonnull T[] array) { return deepArrayCloning(array); } protected  Cloneables(); @Nonnull static List<T> cloneList(@Nonnull List<T> source); @Nonnull static List<T> cloneList(@Nonnull List<T> source,
															  @Nonnull List<T> destination); @Nonnull static List<T> deepListCloning(@Nonnull List<T> source); @Nonnull static List<T> deepListCloning(@Nonnull List<T> source,
																	@Nonnull List<T> destination); @Nonnull static Map<K, V> cloneMap(@Nonnull Map<K, V> source); @Nonnull static Map<K, V> cloneMap(@Nonnull Map<K, V> source, @Nonnull Map<K, V> destination); @Nonnull static Map<K, V> cloneMapWithKeys(@Nonnull Map<K, V> source); static T[] deepClone(@Nonnull T[] array); @Deprecated @Nonnull static T[] deepArrayCloning(@Nonnull T[] array);  }### Answer:
@Test public void testCloneArray() throws Exception { Interval[] expected = new Interval[3]; expected[0] = Intervals.newPoint(2); expected[1] = Intervals.newClosedInterval(0, 3); expected[2] = Intervals.newInterval(10, false, 15, true); Interval[] actual = Cloneables.deepClone(expected); Assert.assertTrue(Objects.areEqual(expected, actual, ArrayEqualizer.newWithNaturalEquals())); Assert.assertFalse(Objects.areEqual(expected, actual, ArrayEqualizer.newWithNestedEqualizer(SameEqualizer.getInstance()))); }