@Override public List<Character> create(Character[] elements) { char[] chars = Chars.toArray(Arrays.asList(elements)); StringBuilder str = new StringBuilder(); str.append(chars); return Lists.charactersOf(str); } }
public void testCharactersOfIsView() { StringBuilder builder = new StringBuilder("abc"); List<Character> chars = Lists.charactersOf(builder); assertEquals(asList('a', 'b', 'c'), chars); builder.append("def"); assertEquals(asList('a', 'b', 'c', 'd', 'e', 'f'), chars); builder.deleteCharAt(5); assertEquals(asList('a', 'b', 'c', 'd', 'e'), chars); }
@Test public void forGraph_depthFirstPreOrderIterable_twoCycles() { Traverser<Character> traverser = Traverser.forGraph(TWO_CYCLES_GRAPH); assertEqualCharNodes(traverser.depthFirstPreOrder(charactersOf("a")), "abcd"); assertEqualCharNodes(traverser.depthFirstPreOrder(charactersOf("bd")), "bcda"); assertEqualCharNodes(traverser.depthFirstPreOrder(charactersOf("dc")), "dabc"); assertEqualCharNodes(traverser.depthFirstPreOrder(charactersOf("bc")), "bcda"); }
@Test public void forGraph_depthFirstPostOrderIterable_multigraph() { Traverser<Character> traverser = Traverser.forGraph(MULTI_GRAPH); assertEqualCharNodes(traverser.depthFirstPostOrder(charactersOf("ac")), "dbca"); assertEqualCharNodes(traverser.depthFirstPostOrder(charactersOf("cb")), "dbac"); assertEqualCharNodes(traverser.depthFirstPostOrder(charactersOf("db")), "db"); assertEqualCharNodes(traverser.depthFirstPostOrder(charactersOf("d")), "d"); }
@Test public void forTree_breadthFirstIterable_tree() throws Exception { Traverser<Character> traverser = Traverser.forTree(TREE); assertEqualCharNodes(traverser.breadthFirst(charactersOf("")), ""); assertEqualCharNodes(traverser.breadthFirst(charactersOf("h")), "hdegabcf"); assertEqualCharNodes(traverser.breadthFirst(charactersOf("gd")), "gdfabc"); assertEqualCharNodes(traverser.breadthFirst(charactersOf("age")), "agef"); }
@Test public void forGraph_breadthFirstIterable_twoCycles() { Traverser<Character> traverser = Traverser.forGraph(TWO_CYCLES_GRAPH); assertEqualCharNodes(traverser.breadthFirst(charactersOf("a")), "abcd"); assertEqualCharNodes(traverser.breadthFirst(charactersOf("bd")), "bdca"); assertEqualCharNodes(traverser.breadthFirst(charactersOf("dc")), "dcab"); assertEqualCharNodes(traverser.breadthFirst(charactersOf("bc")), "bcda"); }
@Test public void forGraph_breadthFirstIterable_tree() throws Exception { Traverser<Character> traverser = Traverser.forGraph(TREE); assertEqualCharNodes(traverser.breadthFirst(charactersOf("hg")), "hgdefabc"); assertEqualCharNodes(traverser.breadthFirst(charactersOf("gd")), "gdfabc"); assertEqualCharNodes(traverser.breadthFirst(charactersOf("bdgh")), "bdghacfe"); }
@Test public void forTree_depthFirstPreOrderIterable_cyclicGraphContainingTree() throws Exception { Traverser<Character> traverser = Traverser.forTree(CYCLIC_GRAPH_CONTAINING_TREE); assertEqualCharNodes(traverser.depthFirstPreOrder(charactersOf("a")), "abcd"); assertEqualCharNodes(traverser.depthFirstPreOrder(charactersOf("b")), "bcd"); assertEqualCharNodes(traverser.depthFirstPreOrder(charactersOf("cd")), "cd"); }
@Test public void forTree_depthFirstPreOrderIterable_graphContainingTreeAndDiamond() throws Exception { Traverser<Character> traverser = Traverser.forTree(GRAPH_CONTAINING_TREE_AND_DIAMOND); assertEqualCharNodes(traverser.depthFirstPreOrder(charactersOf("a")), "abcd"); assertEqualCharNodes(traverser.depthFirstPreOrder(charactersOf("bg")), "bcdgh"); assertEqualCharNodes(traverser.depthFirstPreOrder(charactersOf("ga")), "ghabcd"); }
@Test public void forTree_depthFirstPostOrderIterable_cyclicGraphContainingTree() throws Exception { Traverser<Character> traverser = Traverser.forTree(CYCLIC_GRAPH_CONTAINING_TREE); assertEqualCharNodes(traverser.depthFirstPostOrder(charactersOf("a")), "cdba"); assertEqualCharNodes(traverser.depthFirstPostOrder(charactersOf("b")), "cdb"); assertEqualCharNodes(traverser.depthFirstPostOrder(charactersOf("cd")), "cd"); }
@Test public void forTree_depthFirstPreOrderIterable_twoTrees() { assertEqualCharNodes(Traverser.forTree(TWO_TREES).depthFirstPreOrder(charactersOf("a")), "ab"); assertEqualCharNodes( Traverser.forTree(TWO_TREES).depthFirstPreOrder(charactersOf("ca")), "cdab"); }
@Test public void forGraph_depthFirstPreOrderIterable_twoTrees() { assertEqualCharNodes(Traverser.forGraph(TWO_TREES).depthFirstPreOrder(charactersOf("a")), "ab"); assertEqualCharNodes( Traverser.forGraph(TWO_TREES).depthFirstPreOrder(charactersOf("ac")), "abcd"); }
@Test public void forGraph_depthFirstPostOrderIterable_singleRoot() { Iterable<Character> result = Traverser.forGraph(SINGLE_ROOT).depthFirstPostOrder(charactersOf("a")); assertEqualCharNodes(result, "a"); }
@Test public void forTree_breadthFirstIterable_singleRoot() { Iterable<Character> result = Traverser.forTree(SINGLE_ROOT).breadthFirst(charactersOf("a")); assertEqualCharNodes(result, "a"); }
@Test public void forTree_depthFirstPreOrderIterable_singleRoot() { Iterable<Character> result = Traverser.forTree(SINGLE_ROOT).depthFirstPreOrder(charactersOf("a")); assertEqualCharNodes(result, "a"); }
@Test public void forTree_depthFirstPostOrderIterable_singleRoot() { Iterable<Character> result = Traverser.forTree(SINGLE_ROOT).depthFirstPostOrder(charactersOf("a")); assertEqualCharNodes(result, "a"); }
@Test public void forGraph_depthFirstPostOrderIterable_emptyGraph() { assertEqualCharNodes( Traverser.forGraph(createDirectedGraph()).depthFirstPostOrder(charactersOf("")), ""); try { Traverser.forGraph(createDirectedGraph()).depthFirstPostOrder(charactersOf("a")); fail("Expected IllegalArgumentException"); } catch (IllegalArgumentException expected) { } }
@Test public void forTree_breadthFirstIterable_emptyGraph() { assertEqualCharNodes( Traverser.forTree(createDirectedGraph()).breadthFirst(charactersOf("")), ""); try { Traverser.forTree(createDirectedGraph()).breadthFirst(charactersOf("a")); fail("Expected IllegalArgumentException"); } catch (IllegalArgumentException expected) { } }
@Test public void forGraph_breadthFirstIterable_javadocExample_canBeIteratedMultipleTimes() { Iterable<Character> result = Traverser.forGraph(JAVADOC_GRAPH).breadthFirst(charactersOf("bf")); assertEqualCharNodes(result, "bfaecd"); assertEqualCharNodes(result, "bfaecd"); }
@Test public void forTree_depthFirstPostOrderIterable_iterableIsLazy() { RequestSavingGraph graph = new RequestSavingGraph(TREE); Iterable<Character> result = Traverser.forGraph(graph).depthFirstPostOrder(charactersOf("dg")); assertEqualCharNodes(Iterables.limit(result, 2), "ab"); assertThat(graph.requestedNodes).containsExactly('a', 'b', 'd', 'd', 'g'); // Iterate again to see if calculation is done again assertEqualCharNodes(Iterables.limit(result, 2), "ab"); assertThat(graph.requestedNodes).containsExactly('a', 'a', 'b', 'b', 'd', 'd', 'd', 'g'); }