/** * Returns a {@link TreeBuilder} initialized with all properties queryable from {@code tree}. * * <p>The "queryable" properties are those that are exposed through the {@link CTree} interface, * such as {@link CTree#nodeOrder()}. Other properties, such as {@link #expectedNodeCount(int)}, * are not set in the new builder. */ public static <N> TreeBuilder<N> from(CTree<N> tree) { return new TreeBuilder<Object>().nodeOrder(tree.nodeOrder()); }
@Test public void equivalent_propertiesDiffer() { MutableCTree<Integer> t1 = TreeBuilder.builder().nodeOrder(ElementOrder.insertion()).build(); t1.putEdge(N1, N2); MutableCTree<Integer> t2 = TreeBuilder.from(t1).nodeOrder(ElementOrder.unordered()).build(); t2.putEdge(N1, N2); assertThat(t1).isEqualTo(t2); }
@Test public void nodeOrder_none() { MutableCTree<Integer> tree = TreeBuilder.builder().nodeOrder(unordered()).build(); assertThat(tree.nodeOrder()).isEqualTo(unordered()); }
@Test public void nodeOrder_natural() { MutableCTree<Integer> tree = TreeBuilder.builder().nodeOrder(ElementOrder.<Integer>natural()).build(); addNodes(tree); assertThat(tree.nodeOrder()).isEqualTo(ElementOrder.sorted(Ordering.<Integer>natural())); assertThat(tree.nodes()).containsExactly(1, 3, 4).inOrder(); }
@Test public void nodeOrder_sorted() { MutableCTree<Integer> tree = TreeBuilder.builder() .nodeOrder(ElementOrder.sorted(Ordering.<Integer>natural().reverse())) .build(); addNodes(tree); assertThat(tree.nodeOrder()) .isEqualTo(ElementOrder.sorted(Ordering.<Integer>natural().reverse())); assertThat(tree.nodes()).containsExactly(4, 3, 1).inOrder(); }
@Test public void nodeOrder_insertion() { MutableCTree<Integer> tree = TreeBuilder.builder().nodeOrder(insertion()).build(); addNodes(tree); assertThat(tree.nodeOrder()).isEqualTo(insertion()); assertThat(tree.nodes()).containsExactly(3, 1, 4).inOrder(); }
@Test public void customComparable() { MutableCTree<ComparableSubClass> tree = TreeBuilder.builder().nodeOrder(ElementOrder.<ComparableSubClass>natural()).build(); ComparableSubClass node2 = new ComparableSubClass(2); ComparableSubClass node4 = new ComparableSubClass(4); ComparableSubClass node6 = new ComparableSubClass(6); ComparableSubClass node8 = new ComparableSubClass(8); tree.putEdge(node2, node8); tree.putEdge(node2, node6); tree.putEdge(node6, node4); assertThat(tree.nodeOrder().comparator()).isEqualTo(Ordering.natural()); assertThat(tree.nodes()).containsExactly(node2, node4, node6, node8).inOrder(); }
@Test public void customComparator() { Comparator<NonComparableSuperClass> comparator = comparing(left -> left.value); MutableCTree<NonComparableSuperClass> tree = TreeBuilder.builder().nodeOrder(ElementOrder.sorted(comparator)).build(); NonComparableSuperClass node1 = new NonComparableSuperClass(1); NonComparableSuperClass node3 = new NonComparableSuperClass(3); NonComparableSuperClass node5 = new NonComparableSuperClass(5); NonComparableSuperClass node7 = new NonComparableSuperClass(7); tree.putEdge(node1, node7); tree.putEdge(node1, node5); tree.putEdge(node5, node3); assertThat(tree.nodeOrder().comparator()).isEqualTo(comparator); assertThat(tree.nodes()).containsExactly(node1, node3, node5, node7).inOrder(); }