@Test public void test() { List<Integer> keys = new ArrayList<>(); for (int i = 0; i < 100; i++) { keys.add(i); } Collections.shuffle(keys); AVLTree<Integer, Object> t = AVLTree.create(); for (Integer key : keys) { t = t.add(key); assertThat(t.add(key)).isSameAs(t); } assertThat(Counter.countSet(t)).isEqualTo(100); assertThat(Counter.countMap(t)).isEqualTo(100); assertThat(t.height()).isGreaterThanOrEqualTo(8).isLessThanOrEqualTo(10); for (Integer key : keys) { assertThat(t.contains(key)).isTrue(); t = t.remove(key); assertThat(t.remove(key)).isSameAs(t); } assertThat(Counter.countSet(t)).isEqualTo(0); assertThat(Counter.countMap(t)).isEqualTo(0); }