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
47 }
48
49 public void testGetVertices() {
50 assertEquals(smallGraph.getVertexCount(), 3);
51
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
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 }