/* * GeoTools - The Open Source Java GIS Toolkit * http://geotools.org * * (C) 2002-2008, Open Source Geospatial Foundation (OSGeo) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. */ package org.geotools.graph.structure.basic; import java.util.ArrayList; import java.util.HashSet; import java.util.Iterator; import java.util.List; import junit.framework.TestCase; import org.geotools.graph.structure.GraphVisitor; import org.geotools.graph.structure.Graphable; public class BasicGraphTest extends TestCase { private List m_nodes; private List m_edges; private BasicGraph m_graph; public BasicGraphTest(String name) { super(name); } protected void setUp() throws Exception { super.setUp(); BasicNode n1 = new BasicNode(); BasicNode n2 = new BasicNode(); BasicNode n3 = new BasicNode(); BasicNode n4 = new BasicNode(); BasicEdge e1 = new BasicEdge(n1,n2); BasicEdge e2 = new BasicEdge(n2,n3); BasicEdge e3 = new BasicEdge(n3,n4); n1.add(e1); n2.add(e1); n2.add(e2); n3.add(e2); n3.add(e3); n4.add(e3); m_nodes = new ArrayList(); m_nodes.add(n1); m_nodes.add(n2); m_nodes.add(n3); m_nodes.add(n4); m_edges = new ArrayList(); m_edges.add(e1); m_edges.add(e2); m_edges.add(e3); m_graph = new BasicGraph(m_nodes, m_edges); } public void test_getNodes() { assertTrue(m_graph.getNodes() == m_nodes); } public void test_getEdges() { assertTrue(m_graph.getEdges() == m_edges); } public void test_queryNodes() { GraphVisitor visitor = new GraphVisitor() { public int visit(Graphable component) { if (component == m_nodes.get(1) || component == m_nodes.get(2)) return(BasicGraph.PASS_AND_CONTINUE); return(BasicGraph.FAIL_QUERY); } }; List result = m_graph.queryNodes(visitor); assertTrue(result.size() == 2); assertTrue(result.get(0) == m_nodes.get(1)); assertTrue(result.get(1) == m_nodes.get(2)); } public void test_queryEdges() { GraphVisitor visitor = new GraphVisitor() { public int visit(Graphable component) { if (component == m_edges.get(1) || component == m_edges.get(2)) return(BasicGraph.PASS_AND_CONTINUE); return(BasicGraph.FAIL_QUERY); } }; List result = m_graph.queryEdges(visitor); assertTrue(result.size() == 2); assertTrue(result.get(0) == m_edges.get(1)); assertTrue(result.get(1) == m_edges.get(2)); } public void test_visitNodes() { final HashSet visited = new HashSet(); GraphVisitor visitor = new GraphVisitor() { public int visit(Graphable component) { visited.add(component); return(0); } }; m_graph.visitNodes(visitor); for (Iterator itr = m_nodes.iterator(); itr.hasNext();) { assertTrue(visited.contains(itr.next())); } } public void test_visitEdges() { final HashSet visited = new HashSet(); GraphVisitor visitor = new GraphVisitor() { public int visit(Graphable component) { visited.add(component); return(0); } }; m_graph.visitEdges(visitor); for (Iterator itr = m_edges.iterator(); itr.hasNext();) { assertTrue(visited.contains(itr.next())); } } public void test_getNodesOfDegree() { List nodes = m_graph.getNodesOfDegree(1); assertTrue(nodes.contains(m_nodes.get(0))); assertTrue(nodes.contains(m_nodes.get(m_nodes.size()-1))); nodes = m_graph.getNodesOfDegree(2); assertTrue(nodes.contains(m_nodes.get(1))); assertTrue(nodes.contains(m_nodes.get(2))); } public void test_getVisitedNodes() { ((BasicNode)m_nodes.get(1)).setVisited(true); ((BasicNode)m_nodes.get(2)).setVisited(true); List visited = m_graph.getVisitedNodes(true); assertTrue(visited.size() == 2); assertTrue(visited.contains(m_nodes.get(1))); assertTrue(visited.contains(m_nodes.get(2))); visited = m_graph.getVisitedNodes(false); assertTrue(visited.size() == 2); assertTrue(visited.contains(m_nodes.get(0))); assertTrue(visited.contains(m_nodes.get(3))); } public void test_getVisitedEdges() { ((BasicEdge)m_edges.get(1)).setVisited(true); List visited = m_graph.getVisitedEdges(true); assertTrue(visited.size() == 1); assertTrue(visited.contains(m_edges.get(1))); visited = m_graph.getVisitedEdges(false); assertTrue(visited.size() == 2); assertTrue(visited.contains(m_edges.get(0))); assertTrue(visited.contains(m_edges.get(2))); } public void test_initNodes() { for (Iterator itr = m_nodes.iterator(); itr.hasNext();) { BasicNode n = (BasicNode)itr.next(); n.setVisited(true); n.setCount(100); } m_graph.initNodes(); for (Iterator itr = m_nodes.iterator(); itr.hasNext();) { BasicNode n = (BasicNode)itr.next(); assertTrue(!n.isVisited()); assertTrue(n.getCount() == 0); } } public void test_initEdges() { for (Iterator itr = m_edges.iterator(); itr.hasNext();) { BasicEdge e = (BasicEdge)itr.next(); e.setVisited(true); e.setCount(100); } m_graph.initEdges(); for (Iterator itr = m_edges.iterator(); itr.hasNext();) { BasicEdge e = (BasicEdge)itr.next(); assertTrue(!e.isVisited()); assertTrue(e.getCount() == 0); } } }