### Question:
LayerHash implements Layerable<KeyType> { public synchronized boolean moveDown(KeyType key) { if (!hash.containsKey(key)) { return false; } else { return zlist.moveDown(key); } }  int size(); ValueType get(KeyType key); List<KeyType> getKeysAsList(); synchronized void addToTop(KeyType key, ValueType value); synchronized void addToBottom(KeyType key, ValueType value); synchronized boolean moveToTop(KeyType element); synchronized boolean moveAbove(KeyType objectToMove, KeyType reference); synchronized boolean moveBeneath(KeyType objectToMove, KeyType reference); synchronized boolean moveToBottom(KeyType key); synchronized boolean moveUp(KeyType key); synchronized boolean moveDown(KeyType key); @Override List<KeyType> elements(); List<KeyType> keys(); synchronized boolean remove(KeyType key); ValueType getTop(); ValueType getBottom(); ValueType getAbove(KeyType key); ValueType getBeneath(KeyType key);  }### Answer:
@Test public void moveDown() { layerHash.moveDown(obj1); assertEquals(obj3, layerHash.getKeysAsList().get(0)); assertEquals(obj1, layerHash.getKeysAsList().get(1)); assertEquals(obj2, layerHash.getKeysAsList().get(2)); layerHash.moveDown(obj1); assertEquals(obj1, layerHash.getKeysAsList().get(0)); assertEquals(obj3, layerHash.getKeysAsList().get(1)); assertEquals(obj2, layerHash.getKeysAsList().get(2)); layerHash.moveDown(obj1); assertEquals(obj1, layerHash.getKeysAsList().get(0)); assertEquals(obj3, layerHash.getKeysAsList().get(1)); assertEquals(obj2, layerHash.getKeysAsList().get(2)); }