KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > jgrapht > graph > DefaultDirectedGraphTest


1 /* ==========================================
2  * JGraphT : a free Java graph-theory library
3  * ==========================================
4  *
5  * Project Info: http://jgrapht.sourceforge.net/
6  * Project Creator: Barak Naveh (http://sourceforge.net/users/barak_naveh)
7  *
8  * (C) Copyright 2003-2006, by Barak Naveh and Contributors.
9  *
10  * This library is free software; you can redistribute it and/or modify it
11  * under the terms of the GNU Lesser General Public License as published by
12  * the Free Software Foundation; either version 2.1 of the License, or
13  * (at your option) any later version.
14  *
15  * This library is distributed in the hope that it will be useful, but
16  * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
17  * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
18  * License for more details.
19  *
20  * You should have received a copy of the GNU Lesser General Public License
21  * along with this library; if not, write to the Free Software Foundation,
22  * Inc.,
23  * 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
24  */

25 /* -----------------------------
26  * DefaultDirectedGraphTest.java
27  * -----------------------------
28  * (C) Copyright 2003-2006, by Barak Naveh and Contributors.
29  *
30  * Original Author: Barak Naveh
31  * Contributor(s): -
32  *
33  * $Id: DefaultDirectedGraphTest.java 504 2006-07-03 02:37:26Z perfecthash $
34  *
35  * Changes
36  * -------
37  * 09-Aug-2003 : Initial revision (BN);
38  *
39  */

40 package org.jgrapht.graph;
41
42 import java.util.*;
43
44 import org.jgrapht.*;
45
46
47 /**
48  * A unit test for directed multigraph.
49  *
50  * @author Barak Naveh
51  * @since Aug 9, 2003
52  */

53 public class DefaultDirectedGraphTest
54     extends EnhancedTestCase
55 {
56
57     //~ Instance fields -------------------------------------------------------
58

59     private String JavaDoc v1 = "v1";
60     private String JavaDoc v2 = "v2";
61     private String JavaDoc v3 = "v3";
62
63     //~ Methods ---------------------------------------------------------------
64

65     /**
66      * .
67      */

68     public void testEdgeSetFactory()
69     {
70         DirectedMultigraph<String JavaDoc, DefaultEdge> g =
71             new DirectedMultigraph<String JavaDoc, DefaultEdge>(
72                 DefaultEdge.class);
73         g.setEdgeSetFactory(new LinkedHashSetFactory<String JavaDoc, DefaultEdge>());
74         initMultiTriangleWithMultiLoop(g);
75     }
76
77     /**
78      * .
79      */

80     public void testEdgeOrderDeterminism()
81     {
82         DirectedGraph<String JavaDoc, DefaultEdge> g =
83             new DirectedMultigraph<String JavaDoc, DefaultEdge>(
84                 DefaultEdge.class);
85         g.addVertex(v1);
86         g.addVertex(v2);
87         g.addVertex(v3);
88
89         DefaultEdge e1 = g.addEdge(v1, v2);
90         DefaultEdge e2 = g.addEdge(v2, v3);
91         DefaultEdge e3 = g.addEdge(v3, v1);
92
93         Iterator<DefaultEdge> iter = g.edgeSet().iterator();
94         assertEquals(e1, iter.next());
95         assertEquals(e2, iter.next());
96         assertEquals(e3, iter.next());
97
98         // some bonus tests
99
assertTrue(Graphs.testIncidence(g, e1, v1));
100         assertTrue(Graphs.testIncidence(g, e1, v2));
101         assertFalse(Graphs.testIncidence(g, e1, v3));
102         assertEquals(v2, Graphs.getOppositeVertex(g, e1, v1));
103         assertEquals(v1, Graphs.getOppositeVertex(g, e1, v2));
104
105         assertEquals(
106             "([v1, v2, v3], [(v1,v2), (v2,v3), (v3,v1)])",
107             g.toString());
108     }
109
110     /**
111      * .
112      */

113     public void testEdgesOf()
114     {
115         DirectedGraph<String JavaDoc, DefaultEdge> g =
116             createMultiTriangleWithMultiLoop();
117
118         assertEquals(3, g.edgesOf(v1).size());
119         assertEquals(2, g.edgesOf(v2).size());
120     }
121
122     /**
123      * .
124      */

125     public void testGetAllEdges()
126     {
127         DirectedGraph<String JavaDoc, DefaultEdge> g =
128             createMultiTriangleWithMultiLoop();
129
130         Set<DefaultEdge> loops = g.getAllEdges(v1, v1);
131         assertEquals(1, loops.size());
132     }
133
134     /**
135      * .
136      */

137     public void testInDegreeOf()
138     {
139         DirectedGraph<String JavaDoc, DefaultEdge> g =
140             createMultiTriangleWithMultiLoop();
141
142         assertEquals(2, g.inDegreeOf(v1));
143         assertEquals(1, g.inDegreeOf(v2));
144     }
145
146     /**
147      * .
148      */

149     public void testOutDegreeOf()
150     {
151         DirectedGraph<String JavaDoc, DefaultEdge> g =
152             createMultiTriangleWithMultiLoop();
153
154         assertEquals(2, g.outDegreeOf(v1));
155         assertEquals(1, g.outDegreeOf(v2));
156     }
157
158     /**
159      * .
160      */

161     public void testVertexOrderDeterminism()
162     {
163         DirectedGraph<String JavaDoc, DefaultEdge> g =
164             createMultiTriangleWithMultiLoop();
165         Iterator<String JavaDoc> iter = g.vertexSet().iterator();
166         assertEquals(v1, iter.next());
167         assertEquals(v2, iter.next());
168         assertEquals(v3, iter.next());
169     }
170
171     private DirectedGraph<String JavaDoc, DefaultEdge>
172     createMultiTriangleWithMultiLoop()
173     {
174         DirectedGraph<String JavaDoc, DefaultEdge> g =
175             new DirectedMultigraph<String JavaDoc, DefaultEdge>(
176                 DefaultEdge.class);
177         initMultiTriangleWithMultiLoop(g);
178
179         return g;
180     }
181
182     private void initMultiTriangleWithMultiLoop(
183         DirectedGraph<String JavaDoc, DefaultEdge> g)
184     {
185         g.addVertex(v1);
186         g.addVertex(v2);
187         g.addVertex(v3);
188
189         g.addEdge(v1, v1);
190         g.addEdge(v1, v2);
191         g.addEdge(v2, v3);
192         g.addEdge(v3, v1);
193     }
194
195     //~ Inner Classes ---------------------------------------------------------
196

197     private static class LinkedHashSetFactory<V, E>
198         implements EdgeSetFactory<V, E>
199     {
200         /**
201          * .
202          *
203          * @param vertex
204          *
205          * @return an empty list.
206          */

207         public Set<E> createEdgeSet(V vertex)
208         {
209             return new LinkedHashSet<E>();
210         }
211     }
212 }
213
Popular Tags