package io.kaif.rank; import static java.util.Arrays.asList; import static java.util.stream.Collectors.*; import static org.junit.Assert.*; import java.util.Collections; import org.junit.Test; public class SortingNodeTest { @Test public void emptyRoot() throws Exception { SortingNode<Long> emptyRoot = SortingNode.emptyRoot(); assertFalse(emptyRoot.hasChild()); assertTrue(emptyRoot.isRoot()); assertFalse(emptyRoot.hasParent()); } @Test public void toStringShouldNotIncludeParent() throws Exception { SortingNode<Integer> tree = new SortingNode.Builder<Integer>()// .childNode(200).siblingNode(210).siblingNode(220).build(); assertNotNull("include parent in toString will go infinite loop", tree.toString()); } @Test public void buildNodeTree() throws Exception { SortingNode<String> root = new SortingNode.Builder<String>().build(); assertFalse(root.hasChild()); assertTrue(root.isRoot()); assertFalse(root.hasParent()); SortingNode<Integer> tree = new SortingNode.Builder<Integer>()// .childNode(100) .siblingNode(200) .childNode(210) .siblingNode(220) .parent() .siblingNode(300) .siblingNode(400) .childNode(410) .siblingNode(420) .siblingNode(430) .childNode(431) .build(); assertFalse(tree.hasParent()); assertTrue(tree.isRoot()); assertFalse(tree.hasParent()); String expected = "" + "*\n" + " 100\n" + " 200\n" + " 210\n" + " 220\n" + " 300\n" + " 400\n" + " 410\n" + " 420\n" + " 430\n" + " 431"; assertEquals(expected, tree.prettyPrint()); SortingNode<Integer> n410 = tree.getChildren().get(3).getChildren().get(0); assertFalse(n410.hasChild()); assertTrue(n410.hasParent()); assertFalse(n410.isRoot()); assertEquals("410", n410.prettyPrint()); } @Test public void depthFirst() throws Exception { assertEquals(Collections.<Integer>emptyList(), SortingNode.<Integer>emptyRoot().depthFirst().collect(toList())); SortingNode<Integer> tree = new SortingNode.Builder<Integer>()// .childNode(100) .siblingNode(200) .childNode(210) .siblingNode(220) .parent() .siblingNode(300) .siblingNode(400) .childNode(410) .siblingNode(420) .siblingNode(430) .childNode(431) .build(); assertEquals(asList(100, 200, 210, 220, 300, 400, 410, 420, 430, 431), tree.depthFirst().collect(toList())); SortingNode<Integer> n400 = tree.getChildren().get(3); assertEquals(asList(400, 410, 420, 430, 431), n400.depthFirst().collect(toList())); } @Test public void breathFirst() throws Exception { assertEquals(Collections.<Integer>emptyList(), SortingNode.<Integer>emptyRoot().breathFirst().collect(toList())); SortingNode<Integer> tree = new SortingNode.Builder<Integer>()// .childNode(100) .siblingNode(200) .childNode(210) .siblingNode(220) .parent() .siblingNode(300) .siblingNode(400) .childNode(410) .siblingNode(420) .siblingNode(430) .childNode(431) .build(); assertEquals(asList(100, 200, 300, 400, 210, 220, 410, 420, 430, 431), tree.breathFirst().collect(toList())); SortingNode<Integer> n200 = tree.getChildren().get(1); assertEquals(asList(200, 210, 220), n200.breathFirst().collect(toList())); } @Test public void deepSort() throws Exception { SortingNode<Integer> tree = new SortingNode.Builder<Integer>()// .childNode(200) .siblingNode(100) .childNode(110) .siblingNode(120) .parent() .siblingNode(400) .childNode(410) .siblingNode(430) .childNode(431) .parent() .siblingNode(420) .parent() .siblingNode(300) .build(); tree = tree.deepSort((a, b) -> b.getValue() - a.getValue()); String expected = "" + "*\n" + " 400\n" + " 430\n" + " 431\n" + " 420\n" + " 410\n" + " 300\n" + " 200\n" + " 100\n" + " 120\n" + " 110"; assertEquals(expected, tree.prettyPrint()); } }