001: /*
002: * GeoTools - OpenSource mapping toolkit
003: * http://geotools.org
004: * (C) 2002-2006, GeoTools Project Managment Committee (PMC)
005: * (C) 2002, Refractions Reserach Inc.
006: *
007: * This library is free software; you can redistribute it and/or
008: * modify it under the terms of the GNU Lesser General Public
009: * License as published by the Free Software Foundation;
010: * version 2.1 of the License.
011: *
012: * This library is distributed in the hope that it will be useful,
013: * but WITHOUT ANY WARRANTY; without even the implied warranty of
014: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
015: * Lesser General Public License for more details.
016: */
017: package org.geotools.graph.structure.basic;
018:
019: import java.util.ArrayList;
020: import java.util.HashSet;
021: import java.util.Iterator;
022: import java.util.List;
023:
024: import junit.framework.TestCase;
025:
026: import org.geotools.graph.structure.GraphVisitor;
027: import org.geotools.graph.structure.Graphable;
028:
029: public class BasicGraphTest extends TestCase {
030:
031: private List m_nodes;
032: private List m_edges;
033: private BasicGraph m_graph;
034:
035: public BasicGraphTest(String name) {
036: super (name);
037: }
038:
039: protected void setUp() throws Exception {
040: super .setUp();
041: BasicNode n1 = new BasicNode();
042: BasicNode n2 = new BasicNode();
043: BasicNode n3 = new BasicNode();
044: BasicNode n4 = new BasicNode();
045:
046: BasicEdge e1 = new BasicEdge(n1, n2);
047: BasicEdge e2 = new BasicEdge(n2, n3);
048: BasicEdge e3 = new BasicEdge(n3, n4);
049:
050: n1.add(e1);
051: n2.add(e1);
052: n2.add(e2);
053: n3.add(e2);
054: n3.add(e3);
055: n4.add(e3);
056:
057: m_nodes = new ArrayList();
058: m_nodes.add(n1);
059: m_nodes.add(n2);
060: m_nodes.add(n3);
061: m_nodes.add(n4);
062:
063: m_edges = new ArrayList();
064: m_edges.add(e1);
065: m_edges.add(e2);
066: m_edges.add(e3);
067:
068: m_graph = new BasicGraph(m_nodes, m_edges);
069: }
070:
071: public void test_getNodes() {
072: assertTrue(m_graph.getNodes() == m_nodes);
073: }
074:
075: public void test_getEdges() {
076: assertTrue(m_graph.getEdges() == m_edges);
077: }
078:
079: public void test_queryNodes() {
080: GraphVisitor visitor = new GraphVisitor() {
081: public int visit(Graphable component) {
082: if (component == m_nodes.get(1)
083: || component == m_nodes.get(2))
084: return (BasicGraph.PASS_AND_CONTINUE);
085: return (BasicGraph.FAIL_QUERY);
086: }
087: };
088: List result = m_graph.queryNodes(visitor);
089:
090: assertTrue(result.size() == 2);
091: assertTrue(result.get(0) == m_nodes.get(1));
092: assertTrue(result.get(1) == m_nodes.get(2));
093: }
094:
095: public void test_queryEdges() {
096: GraphVisitor visitor = new GraphVisitor() {
097: public int visit(Graphable component) {
098: if (component == m_edges.get(1)
099: || component == m_edges.get(2))
100: return (BasicGraph.PASS_AND_CONTINUE);
101: return (BasicGraph.FAIL_QUERY);
102: }
103: };
104: List result = m_graph.queryEdges(visitor);
105:
106: assertTrue(result.size() == 2);
107: assertTrue(result.get(0) == m_edges.get(1));
108: assertTrue(result.get(1) == m_edges.get(2));
109: }
110:
111: public void test_visitNodes() {
112: final HashSet visited = new HashSet();
113: GraphVisitor visitor = new GraphVisitor() {
114: public int visit(Graphable component) {
115: visited.add(component);
116: return (0);
117: }
118: };
119:
120: m_graph.visitNodes(visitor);
121:
122: for (Iterator itr = m_nodes.iterator(); itr.hasNext();) {
123: assertTrue(visited.contains(itr.next()));
124: }
125: }
126:
127: public void test_visitEdges() {
128: final HashSet visited = new HashSet();
129: GraphVisitor visitor = new GraphVisitor() {
130: public int visit(Graphable component) {
131: visited.add(component);
132: return (0);
133: }
134: };
135:
136: m_graph.visitEdges(visitor);
137:
138: for (Iterator itr = m_edges.iterator(); itr.hasNext();) {
139: assertTrue(visited.contains(itr.next()));
140: }
141: }
142:
143: public void test_getNodesOfDegree() {
144: List nodes = m_graph.getNodesOfDegree(1);
145: assertTrue(nodes.contains(m_nodes.get(0)));
146: assertTrue(nodes.contains(m_nodes.get(m_nodes.size() - 1)));
147:
148: nodes = m_graph.getNodesOfDegree(2);
149: assertTrue(nodes.contains(m_nodes.get(1)));
150: assertTrue(nodes.contains(m_nodes.get(2)));
151: }
152:
153: public void test_getVisitedNodes() {
154: ((BasicNode) m_nodes.get(1)).setVisited(true);
155: ((BasicNode) m_nodes.get(2)).setVisited(true);
156:
157: List visited = m_graph.getVisitedNodes(true);
158: assertTrue(visited.size() == 2);
159: assertTrue(visited.contains(m_nodes.get(1)));
160: assertTrue(visited.contains(m_nodes.get(2)));
161:
162: visited = m_graph.getVisitedNodes(false);
163: assertTrue(visited.size() == 2);
164: assertTrue(visited.contains(m_nodes.get(0)));
165: assertTrue(visited.contains(m_nodes.get(3)));
166: }
167:
168: public void test_getVisitedEdges() {
169: ((BasicEdge) m_edges.get(1)).setVisited(true);
170:
171: List visited = m_graph.getVisitedEdges(true);
172: assertTrue(visited.size() == 1);
173: assertTrue(visited.contains(m_edges.get(1)));
174:
175: visited = m_graph.getVisitedEdges(false);
176: assertTrue(visited.size() == 2);
177: assertTrue(visited.contains(m_edges.get(0)));
178: assertTrue(visited.contains(m_edges.get(2)));
179: }
180:
181: public void test_initNodes() {
182: for (Iterator itr = m_nodes.iterator(); itr.hasNext();) {
183: BasicNode n = (BasicNode) itr.next();
184: n.setVisited(true);
185: n.setCount(100);
186: }
187:
188: m_graph.initNodes();
189:
190: for (Iterator itr = m_nodes.iterator(); itr.hasNext();) {
191: BasicNode n = (BasicNode) itr.next();
192: assertTrue(!n.isVisited());
193: assertTrue(n.getCount() == 0);
194: }
195: }
196:
197: public void test_initEdges() {
198: for (Iterator itr = m_edges.iterator(); itr.hasNext();) {
199: BasicEdge e = (BasicEdge) itr.next();
200: e.setVisited(true);
201: e.setCount(100);
202: }
203:
204: m_graph.initEdges();
205:
206: for (Iterator itr = m_edges.iterator(); itr.hasNext();) {
207: BasicEdge e = (BasicEdge) itr.next();
208: assertTrue(!e.isVisited());
209: assertTrue(e.getCount() == 0);
210: }
211: }
212: }
|