### Question:
Subject implements Cloneable { @Override public Subject<GeneType> clone() { return new Subject<GeneType>(this); } Subject(GeneType[] geneValues); protected  Subject(Subject<GeneType> subject); double[] getObjectiveValue(); void setObjectiveValue(double[] objValue); @Override Subject<GeneType> clone(); Chromosome<GeneType> getChromosome(); double[] getFitness(); void computeHash(); @Override int hashCode(); @Override String toString();  }### Answer:
@Test public void testClone() { assertNotNull(s); Subject<Integer> clone = s.clone(); assertNotNull(clone); assertNotSame(s, clone); assertTrue(s.hashCode() == clone.hashCode()); assertArrayEquals(s.getObjectiveValue(), clone.getObjectiveValue(), 0); for (int i = 0; i < s.getChromosome().getLength(); i++) { assertTrue(s.getChromosome().getGene(i).equals(clone.getChromosome().getGene(i))); } s.getChromosome().setGene(0, 5); s.computeHash(); assertFalse(s.hashCode() == clone.hashCode()); }