### Question:
IntTable implements Iterable<IntTable.Entry<E>>, Cloneable { public IntTable<E> clone() { try { IntTable<E> t = (IntTable<E>)super.clone(); Entry<E>[] tbl = (Entry<E>[])table.clone(); t.table = tbl; int len = table.length; for (int i=0; i<len; i++){ Entry<E> eFirst = tbl[i]; if (eFirst != null){ eFirst = eFirst.clone(); Entry<E> ePrev = eFirst; for (Entry<E> e = eFirst.next; e != null; e = e.next){ e = e.clone(); ePrev.next = e; ePrev = e; } tbl[i] = eFirst; } } return t; } catch (CloneNotSupportedException cnsx){ throw new JPFException("clone failed"); } } IntTable();  IntTable(int pow); Snapshot<E> getSnapshot(); void restore(Snapshot<E> snapshot); IntTable<E> clone(); int size(); Entry<E> add(E key, int val); Entry<E> get(E key); Entry<E> getInc(E key); void put(E key, int val); Entry<E> remove(E key); void clear(); int nextPoolVal(); Entry<E> pool(E key); int poolIndex(E key); E poolKey(E key); boolean hasEntry(E key); Iterator<Entry<E>> iterator(); void dump(); int computeSize();  }### Answer:
@Test public void testClone(){ IntTable<String> tbl = new IntTable<String>(3); tbl.add("1", 1); tbl.add("2", 2); tbl.add("3", 3); IntTable<String> t1 = tbl.clone(); for (int i=10; i<20; i++){ t1.add(Integer.toString(i), i); } assert tbl.size() == 3; System.out.println("-- original table"); for (IntTable.Entry<String> e : tbl){ assert Integer.parseInt(e.key) == e.val; System.out.println(e); } assert t1.size() == 13; System.out.println("-- cloned+modified table"); for (IntTable.Entry<String> e : t1){ assert Integer.parseInt(e.key) == e.val; System.out.println(e); } }