public void testEdgeAnnotations() {
   Graph<String, String> graph = new LinkedUndirectedGraph<String, String>();
   graph.createNode("1");
   graph.createNode("2");
   graph.createNode("3");
   graph.connect("1", "a", "2");
   graph.connect("2", "b", "3");
   GraphEdge<String, String> a = graph.getEdges("1", "2").get(0);
   GraphEdge<String, String> b = graph.getEdges("2", "3").get(0);
   checkAnnotations(graph, a, b);
 }
 public void testDirectedConnectIfNotFound(Graph<String, String> graph) {
   graph.createNode("a");
   graph.createNode("b");
   graph.connectIfNotFound("a", "-", "b");
   assertEquals(1, graph.getNodeDegree("a"));
   graph.connectIfNotFound("a", "-", "b");
   assertEquals(1, graph.getNodeDegree("a"));
   graph.connectIfNotFound("a", null, "b");
   assertEquals(2, graph.getNodeDegree("a"));
   graph.connectIfNotFound("a", null, "b");
   assertEquals(2, graph.getNodeDegree("a"));
 }
  private static void checkAnnotations(Graph<String, String> graph, Annotatable a, Annotatable b) {
    final Annotation A = new Annotation() {};
    final Annotation B = new Annotation() {};

    // Initially null.
    assertNull(a.getAnnotation());
    assertNull(b.getAnnotation());

    // Test basic setting.
    a.setAnnotation(A);
    b.setAnnotation(B);
    assertSame(A, a.getAnnotation());
    assertSame(B, b.getAnnotation());

    // Test clearing.
    graph.clearEdgeAnnotations();
    graph.clearNodeAnnotations();
    assertNull(a.getAnnotation());
    assertNull(b.getAnnotation());

    a.setAnnotation(A);
    b.setAnnotation(B);
    // Pushing clears.
    graph.pushEdgeAnnotations();
    graph.pushNodeAnnotations();
    assertNull(a.getAnnotation());
    assertNull(b.getAnnotation());
    a.setAnnotation(B);
    b.setAnnotation(B);
    graph.pushEdgeAnnotations();
    graph.pushNodeAnnotations();
    a.setAnnotation(B);
    b.setAnnotation(A);

    // Test restoring then restoring old values with pop.
    assertSame(B, a.getAnnotation());
    assertSame(A, b.getAnnotation());
    graph.popEdgeAnnotations();
    graph.popNodeAnnotations();
    assertSame(B, a.getAnnotation());
    assertSame(B, b.getAnnotation());
    graph.popEdgeAnnotations();
    graph.popNodeAnnotations();
    assertSame(A, a.getAnnotation());
    assertSame(B, b.getAnnotation());
  }
 public void testDirectedDegree(Graph<String, String> graph) {
   graph.createNode("a");
   graph.createNode("b");
   graph.createNode("c");
   graph.createNode("d");
   assertEquals(0, graph.getNodeDegree("a"));
   graph.connect("a", "-", "b");
   assertEquals(1, graph.getNodeDegree("a"));
   graph.connect("b", "-", "c");
   assertEquals(1, graph.getNodeDegree("a"));
   graph.connect("a", "-", "c");
   assertEquals(2, graph.getNodeDegree("a"));
   graph.connect("d", "-", "a");
   assertEquals(3, graph.getNodeDegree("a"));
 }
 public void testNodeAnnotations() {
   Graph<String, String> graph = new LinkedUndirectedGraph<String, String>();
   GraphNode<String, String> a = graph.createNode("a");
   GraphNode<String, String> b = graph.createNode("b");
   checkAnnotations(graph, a, b);
 }