DefaultLeveledEmbededSet implements LeveledEmbededSet<T> { @Override public LeveledEmbededSet<T> getThrough(int level) { DefaultLeveledEmbededSet<T> iter = (DefaultLeveledEmbededSet<T>)getRoot(); while(level > 0) { DefaultLeveledEmbededSet<T> successor = (DefaultLeveledEmbededSet<T>) iter.getSubSet(); if(successor == null) { successor = new DefaultLeveledEmbededSet<>(); successor.setSuperSet(iter); iter.setSubSet(successor); } iter = successor; level --; } return iter; }  @Override LeveledEmbededSet<T> getSuperSet(); @Override LeveledEmbededSet<T> getSubSet(); @Override LeveledEmbededSet<T> getThrough(int level); @Override Set<T> getCurrentSet(); @Override void add(T t); @Override void remove(T t); @Override void resume(T t, int level); DefaultLeveledEmbededSet<T> setSuperSet(DefaultLeveledEmbededSet<T> superSet); DefaultLeveledEmbededSet<T> setSubSet(DefaultLeveledEmbededSet<T> subSet);  }
@Test public void getThrough() { DefaultLeveledEmbededSet<String> level1 = (DefaultLeveledEmbededSet<String>) root.getThrough(1); DefaultLeveledEmbededSet<String> level12 = (DefaultLeveledEmbededSet<String>) root.getThrough(1); Assert.assertSame(level1, level12); }