View Javadoc
1   package edu.uci.ics.jung.graph;
2   
3   import java.util.ArrayList;
4   import java.util.Collection;
5   import java.util.Collections;
6   import java.util.List;
7   
8   import junit.framework.TestCase;
9   
10  import com.google.common.base.Supplier;
11  
12  import edu.uci.ics.jung.graph.util.EdgeType;
13  import edu.uci.ics.jung.graph.util.Pair;
14  
15  public abstract class AbstractSortedSparseMultigraphTest extends TestCase {
16  
17  	public static class Foo {}
18  	public static class Bar {}
19  	protected Integer v0 = 0;
20  	protected Integer v1 = 1;
21  	protected Integer v2 = 2;
22  	protected Double e01 = .1;
23  	protected Double e10 = .2;
24  	protected Double e12 = .3;
25  	protected Double e21 = .4;
26  
27  	protected Supplier<Number> vertexFactory = new Supplier<Number>() {
28      	int v=0;
29  		public Number get() {
30  			return v++;
31  		}
32      };
33      protected Supplier<Double> edgeFactory = new Supplier<Double>() {
34      	double e=0;
35  		public Double get() {
36  			return e++;
37  		}
38      };
39      
40      protected Graph<Integer,Double> graph;
41      protected int vertexCount = 50;
42      protected Graph<Integer,Double> smallGraph;
43  
44      public void testGetEdges() {
45          assertEquals(smallGraph.getEdgeCount(), 4);
46  //        System.err.println("getEdges()="+graph.getEdges());
47      }
48  
49      public void testGetVertices() {
50          assertEquals(smallGraph.getVertexCount(), 3);
51  //        System.err.println("getVertices()="+graph.getVertices());
52      }
53  
54      public void testAddVertex() {
55          int count = graph.getVertexCount();
56          graph.addVertex(count);
57          assertEquals(graph.getVertexCount(), count+1);
58      }
59  
60      public void testRemoveEndVertex() {
61          int vertexCount = graph.getVertexCount();
62          int edgeCount = graph.getEdgeCount();
63          Collection<Double> incident = graph.getIncidentEdges(vertexCount-1);
64          graph.removeVertex(vertexCount-1);
65          assertEquals(vertexCount-1, graph.getVertexCount());
66          assertEquals(edgeCount - incident.size(), graph.getEdgeCount());
67      }
68  
69      public void testRemoveMiddleVertex() {
70          int vertexCount = graph.getVertexCount();
71          int edgeCount = graph.getEdgeCount();
72          Collection<Double> incident = graph.getIncidentEdges(vertexCount/2);
73          graph.removeVertex(vertexCount/2);
74          assertEquals(vertexCount-1, graph.getVertexCount());
75          assertEquals(edgeCount - incident.size(), graph.getEdgeCount());
76      }
77  
78      public void testAddEdge() {
79          int edgeCount = graph.getEdgeCount();
80          graph.addEdge(edgeFactory.get(), 0, 1);
81          assertEquals(graph.getEdgeCount(), edgeCount+1);
82      }
83      
84      public void testNullEndpoint() {
85      	try {
86      		graph.addEdge(edgeFactory.get(), new Pair<Integer>(1,null));
87      		fail("should not be able to add an edge with a null endpoint");
88      	} catch(IllegalArgumentException e) {
89      		// all is well
90      	}
91      }
92  
93  
94      public void testRemoveEdge() {
95      	List<Double> edgeList = new ArrayList<Double>(graph.getEdges());
96          int edgeCount = graph.getEdgeCount();
97          graph.removeEdge(edgeList.get(edgeList.size()/2));
98          assertEquals(graph.getEdgeCount(), edgeCount-1);
99      }
100 
101     public void testGetInOutEdges() {
102     	for(Integer v : graph.getVertices()) {
103     		Collection<Double> incident = graph.getIncidentEdges(v);
104     		Collection<Double> in = graph.getInEdges(v);
105     		Collection<Double> out = graph.getOutEdges(v);
106     		assertTrue(incident.containsAll(in));
107     		assertTrue(incident.containsAll(out));
108     		for(Double e : in) {
109     			if(out.contains(e)) {
110     				assertTrue(graph.getEdgeType(e) == EdgeType.UNDIRECTED);
111     			}
112     		}
113     		for(Double e : out) {
114     			if(in.contains(e)) {
115     				assertTrue(graph.getEdgeType(e) == EdgeType.UNDIRECTED);
116     			}
117     		}
118     	}
119     	
120         assertEquals(smallGraph.getInEdges(v1).size(), 4);
121         assertEquals(smallGraph.getOutEdges(v1).size(), 3);
122         assertEquals(smallGraph.getOutEdges(v0).size(), 2);
123     }
124 
125     public void testGetPredecessors() {
126         assertTrue(smallGraph.getPredecessors(v0).containsAll(Collections.singleton(v1)));
127     }
128 
129     public void testGetSuccessors() {
130         assertTrue(smallGraph.getPredecessors(v1).contains(v0));
131         assertTrue(smallGraph.getPredecessors(v1).contains(v2));
132     }
133 
134     public void testGetNeighbors() {
135         Collection<Integer> neighbors = smallGraph.getNeighbors(v1);
136         assertTrue(neighbors.contains(v0));
137         assertTrue(neighbors.contains(v2));
138     }
139 
140     public void testGetIncidentEdges() {
141         assertEquals(smallGraph.getIncidentEdges(v0).size(), 2);
142     }
143 
144     public void testFindEdge() {
145         Number edge = smallGraph.findEdge(v1, v2);
146         assertTrue(edge == e12 || edge == e21);
147     }
148 
149     public void testGetEndpoints() {
150         Pair<Integer> endpoints = smallGraph.getEndpoints(e01);
151         assertTrue((endpoints.getFirst() == v0 && endpoints.getSecond() == v1) ||
152                 endpoints.getFirst() == v1 && endpoints.getSecond() == v0);
153     }
154 
155     public void testIsDirected() {
156         for(Double edge : smallGraph.getEdges()) {
157         	if(edge == e21) {
158         		assertEquals(smallGraph.getEdgeType(edge), EdgeType.DIRECTED);
159         	} else {
160         		assertEquals(smallGraph.getEdgeType(edge), EdgeType.UNDIRECTED);
161         	}
162         }
163     }
164 }