AuD
Lecture 'Algorithmen und Datenstrukturen' (code examples)
GraphTest.java
Go to the documentation of this file.
1package aud.test;
2
3import aud.Vector;
4import aud.graph.*;
5
6import java.util.TreeSet;
7
8import org.junit.*;
9import static org.junit.Assert.*;
10
11public class GraphTest {
12
15
16 assertTrue(g.isDirected());
17
18 SimpleNode n0=g.addNode(); assertNotNull(n0);
19 SimpleNode n1=g.addNode(); assertNotNull(n1);
20 SimpleNode n2=g.addNode(); assertNotNull(n2);
21
22 assertSame(n0.graph(),g);
23 assertSame(n1.graph(),g);
24 assertSame(n2.graph(),g);
25
26 SimpleEdge e0=g.addEdge(n0,n1); assertNotNull(e0);
27 SimpleEdge e1=g.addEdge(n1,n0); assertNotNull(e1);
28
29 SimpleEdge e2=g.addEdge(n0,n2); assertNotNull(e2);
30 SimpleEdge e3=g.addEdge(n2,n1); assertNotNull(e3);
31
32 assertSame(e0.graph(),g);
33 assertSame(e1.graph(),g);
34 assertSame(e2.graph(),g);
35 assertSame(e3.graph(),g);
36
37 assertSame(e0.source(),n0);
38 assertSame(e1.source(),n1);
39 assertSame(e2.source(),n0);
40 assertSame(e3.source(),n2);
41
42 assertSame(e0.destination(),n1);
43 assertSame(e1.destination(),n0);
44 assertSame(e2.destination(),n2);
45 assertSame(e3.destination(),n1);
46
47 assertSame(g.getEdge(n0,n1),e0);
48 assertSame(g.getEdge(n1,n0),e1);
49 assertSame(g.getEdge(n0,n2),e2);
50 assertSame(g.getEdge(n2,n1),e3);
51
52 //System.err.println(g);//
53
54 TreeSet<SimpleNode> nodes=new TreeSet<SimpleNode>();
55 for (SimpleNode node : g) {
56 boolean b=nodes.add(node);
57 assertTrue(b);
58 }
59 assertSame(nodes.size(),3);
60 assertTrue(nodes.contains(n0));
61 assertTrue(nodes.contains(n1));
62 assertTrue(nodes.contains(n2));
63
64 TreeSet<SimpleEdge> edges=new TreeSet<SimpleEdge>();
65 for (SimpleEdge edge : g.edges()) {
66 boolean b=edges.add(edge);
67 assertTrue(b);
68 }
69 assertSame(edges.size(),4);
70 assertTrue(edges.contains(e0));
71 assertTrue(edges.contains(e1));
72 assertTrue(edges.contains(e2));
73 assertTrue(edges.contains(e3));
74
76 assertSame(out.size(),g.getOutDegree(n0));
77 assertSame(out.size(),2);
78 assertTrue(out.at(0)==e0 || out.at(1)==e2);
79 assertTrue(out.at(1)==e0 || out.at(1)==e2);
80
82 assertSame(in.size(),g.getInDegree(n0));
83 assertSame(in.size(),1);
84 assertSame(in.at(0),e1);
85
86 assertSame(g.getDegree(n0),in.size()+out.size());
87
88 //
89
90 g.removeEdge(e0);
91 edges.remove(e0);
92
93 //System.err.println(g);//
94
95 assertNull(g.getEdge(n0,n1));
96 out=g.getOutEdges(n0);
97 assertSame(out.size(),g.getOutDegree(n0));
98 assertSame(out.size(),1);
99 assertSame(out.at(0),e2);
100
101 in=g.getInEdges(n1);
102 assertSame(in.size(),g.getInDegree(n1));
103 assertSame(in.size(),1);
104 assertSame(in.at(0),e3);
105
106 assertSame(g.getDegree(n0),in.size()+out.size());
107
108 //
109
110 g.removeNode(n2);
111 nodes.remove(n2);
112 edges.remove(e2);
113 edges.remove(e3);
114
115 //System.err.println(g);//
116
117 assertSame(g.getNumNodes(),2);
118 assertTrue(g.getSomeNode()==n0 || g.getSomeNode()==n1);
119
120 for (SimpleNode node : g)
121 assertTrue(nodes.contains(node));
122
123 {
124 int n=0;
125 for (SimpleEdge edge : g.edges()) {
126 assertTrue(edges.contains(edge));
127 ++n;
128 }
129 assert(n==1);
130 }
131 }
132
135
136 assertFalse(g.isDirected());
137
138 SimpleNode n0=g.addNode(); assertNotNull(n0);
139 SimpleNode n1=g.addNode(); assertNotNull(n1);
140 SimpleNode n2=g.addNode(); assertNotNull(n2);
141
142 assertSame(n0.graph(),g);
143 assertSame(n1.graph(),g);
144 assertSame(n2.graph(),g);
145
146 SimpleEdge e0=g.addEdge(n0,n1); assertNotNull(e0);
147 SimpleEdge e1=g.addEdge(n2,n1); assertNotNull(e1);
148
149 assertSame(e0.graph(),g);
150 assertSame(e1.graph(),g);
151
152 assertSame(g.getEdge(n0,n1),e0);
153 assertSame(g.getEdge(n1,n0),e0);
154 assertSame(g.getEdge(n1,n2),e1);
155 assertSame(g.getEdge(n2,n1),e1);
156
157 //System.err.println(g);//
158
159 TreeSet<SimpleNode> nodes=new TreeSet<SimpleNode>();
160 for (SimpleNode node : g) {
161 boolean b=nodes.add(node);
162 assertTrue(b);
163 }
164 assertSame(nodes.size(),3);
165 assertTrue(nodes.contains(n0));
166 assertTrue(nodes.contains(n1));
167 assertTrue(nodes.contains(n2));
168
169 TreeSet<SimpleEdge> edges=new TreeSet<SimpleEdge>();
170 for (SimpleEdge edge : g.edges()) {
171 boolean b=edges.add(edge);
172 assertTrue(b);
173 }
174 assertSame(edges.size(),2);
175 assertTrue(edges.contains(e0));
176 assertTrue(edges.contains(e1));
177
179 assertSame(out.size(),g.getOutDegree(n0));
180 assertSame(out.size(),1);
181 assertTrue(out.at(0)==e0);
182
184 assertSame(in.size(),g.getInDegree(n0));
185 assertSame(in.size(),1);
186 assertSame(in.at(0),e0);
187
188 assertSame(g.getDegree(n0),in.size());
189
190 //
191
192 g.removeEdge(e0);
193 edges.remove(e0);
194
195 //System.err.println(g);//
196
197 assertNull(g.getEdge(n0,n1));
198 assertNull(g.getEdge(n1,n0));
199 out=g.getOutEdges(n0);
200 assertSame(out.size(),g.getDegree(n0));
201 assertSame(out.size(),0);
202
203 in=g.getInEdges(n0);
204 assertSame(in.size(),g.getDegree(n0));
205 assertSame(in.size(),0);
206
207
208 out=g.getOutEdges(n1);
209 assertSame(out.size(),g.getDegree(n1));
210 assertSame(out.size(),1);
211 assertSame(out.at(0),e1);
212
213 in=g.getInEdges(n1);
214 assertSame(in.size(),g.getDegree(n1));
215 assertSame(in.size(),1);
216 assertSame(in.at(0),e1);
217
218 //
219
220 g.removeNode(n2);
221 nodes.remove(n2);
222
223 //System.err.println(g);//
224
225 assertSame(g.getNumNodes(),2);
226 assertTrue(g.getSomeNode()==n0 || g.getSomeNode()==n1);
227
228 for (SimpleNode node : g)
229 assertTrue(nodes.contains(node));
230
231 {
232 int n=0;
233 for (@SuppressWarnings("unused") SimpleEdge edge : g.edges())
234 ++n;
235 assert(n==0);
236 }
237 }
238
239 @Test
240 public void testGraph() {
242 (new SimpleNode(),new SimpleEdge(),true));
244 (new SimpleNode(),new SimpleEdge(),false));
245 }
246
247
248 @Test(expected=IllegalArgumentException.class)
249 public void testOther() {
251 (new SimpleNode(),new SimpleEdge(),true);
253 (new SimpleNode(),new SimpleEdge(),true);
254 SimpleNode na1=ga.addNode();
255 SimpleNode na2=ga.addNode();
256 gb.addEdge(na1,na2);
257 }
258
259 @Test(expected=RuntimeException.class)
260 public void testDouble() {
262 (new SimpleNode(),new SimpleEdge(),false);
263 SimpleNode n1=g.addNode();
264 SimpleNode n2=g.addNode();
265 g.addEdge(n1,n2);
266 g.addEdge(n2,n1);
267 }
268
269 @Test(expected=RuntimeException.class)
270 public void testDouble2() {
272 (new SimpleNode(),new SimpleEdge(),true);
273 SimpleNode n1=g.addNode();
274 SimpleNode n2=g.addNode();
275 g.addEdge(n1,n2);
276 g.addEdge(n1,n2);
277 }
278
279 public static void main(String args[]) {
280 org.junit.runner.JUnitCore.main("aud.test.GraphTest");
281 }
282}
Implementation of an array-based vector.
Definition: Vector.java:44
T at(int i)
get i-th entry [O(1)]
Definition: Vector.java:92
int size()
get number of entries [O(1)]
Definition: Vector.java:60
AbstractNode source()
Get source node.
AbstractGraph<? extends AbstractNode,? extends AbstractEdge > graph()
get graph
AbstractNode destination()
get destination node
Interface to a graph.
int getOutDegree(Node node)
get number of edges emanating from node
int getDegree(Node node)
Get total degree.
abstract Edge addEdge(Node source, Node destination)
Create and add new edge from source to destination.
abstract int getNumNodes()
get number of nodes
abstract boolean isDirected()
Is graph directed?
abstract Vector< Edge > getInEdges(Node node)
Get incident edges of node.
int getInDegree(Node node)
get number of edges incident to node
abstract Node addNode()
create and add new node
abstract void removeNode(Node node)
Remove node and all its incident and excident edges.
abstract Vector< Edge > getOutEdges(Node node)
Get incident edges of node.
abstract Node getSomeNode()
Get some node.
abstract void removeEdge(Edge edge)
Remove edge.
abstract Edge getEdge(Node source, Node destination)
Get edge from source to destination.
Edges edges()
Get Edges instance to obtain iterator.
AbstractGraph<? extends AbstractNode,? extends AbstractEdge > graph()
get graph
Graph implementation based on adjacency matrix.
Definition: GraphAM.java:15
Edge addEdge(Node source, Node destination)
Definition: GraphAM.java:49
plain simple edge
Definition: SimpleEdge.java:4
plain simple node
Definition: SimpleNode.java:4
static void main(String args[])
Definition: GraphTest.java:279
void testUndirectedGraph(AbstractGraph< SimpleNode, SimpleEdge > g)
Definition: GraphTest.java:134
void testDirectedGraph(AbstractGraph< SimpleNode, SimpleEdge > g)
Definition: GraphTest.java:14
Graph data structures and algorithms.
AuD lecture: Data structures, algorithms, examples.
Definition: A234Tree.java:1