Package org.geotools.graph.util

Source Code of org.geotools.graph.util.DijkstraShortestPathFinderTest

/*
*    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.util;

import java.util.Iterator;
import java.util.Map;

import junit.framework.TestCase;

import org.geotools.graph.GraphTestUtil;
import org.geotools.graph.build.GraphBuilder;
import org.geotools.graph.build.basic.BasicGraphBuilder;
import org.geotools.graph.path.DijkstraShortestPathFinder;
import org.geotools.graph.path.Path;
import org.geotools.graph.structure.Edge;
import org.geotools.graph.structure.Node;
import org.geotools.graph.traverse.standard.DijkstraIterator;

/**
*
*
* @source $URL$
*/
public class DijkstraShortestPathFinderTest extends TestCase

  private GraphBuilder m_builder;
 
  public DijkstraShortestPathFinderTest(String name) {
    super(name)
  }
 
  protected void setUp() throws Exception {
    super.setUp();
   
    m_builder = createBuilder();
  }
 
  /**
   * Create a graph with no bifurcations and calculate path from beginning
   * to end. <BR>
   * <BR>
   * Expected: 1. Path should contain every node in graph in order.
   */
  public void test_0() {
    int nnodes = 100;
    Node[] ends = GraphTestUtil.buildNoBifurcations(builder(), nnodes);
    DijkstraShortestPathFinder pfinder = new DijkstraShortestPathFinder(
      builder().getGraph(), ends[0], costFunction()
    );
   
    pfinder.calculate();
    Path p = pfinder.getPath(ends[1]);
   
    int count = 99;
    for (Iterator itr = p.iterator(); itr.hasNext();) {
      Node n = (Node)itr.next();
      assertTrue(n.getID() == count--);
    }
  }
 
  /**
   * Create a circular graph and calculate a path from beginning to end. <BR>
   * <BR>
   * Expected: 1. Path should just contain end nodes.
   *
   */
  public void test_1() {
    int nnodes = 100;
    Node[] ends = GraphTestUtil.buildCircular(builder(), nnodes);
   
    DijkstraShortestPathFinder pfinder = new DijkstraShortestPathFinder(
      builder().getGraph(), ends[0], costFunction()
    );
   
    pfinder.calculate();
    Path p = pfinder.getPath(ends[1]);
   
    assertTrue(p.size() == 2);
    assertTrue(p.get(0) == ends[1]);
    assertTrue(p.get(1) == ends[0]);
  }
 
  /**
   * Create a balanced binary tree and calculate a path from root to a leaf. <BR>
   * <BR>
   * Expected 1. Path should be links from leaf to root.
   */
  public void test_2() {
    int k = 4;
    Object[] obj = GraphTestUtil.buildPerfectBinaryTree(builder(), k);
    Node root = (Node)obj[0];
    Map id2node = (Map)obj[1];
   
    DijkstraShortestPathFinder pfinder = new DijkstraShortestPathFinder(
      builder().getGraph(), root, costFunction()
    );
    pfinder.calculate();
   
    for (Iterator itr = builder().getGraph().getNodes().iterator(); itr.hasNext();) {
      Node node = (Node)itr.next();
      String id = node.getObject().toString();
     
      if (id2node.get(id + ".0") == null) {
        Path p = pfinder.getPath(node);
        assertTrue(p.size() == k+1)
    
        for (Iterator pitr = p.iterator(); pitr.hasNext();) {
          Node n = (Node)pitr.next();
          assertTrue(n.getObject().toString().equals(id));
          if (id.length() > 2) id = id.substring(0, id.length()-2);
        }   
      } 
    }
  }

  protected DijkstraIterator.EdgeWeighter costFunction() {
    return(
      new DijkstraIterator.EdgeWeighter() {
        public double getWeight(Edge e) {
          return 1;
        }
      }
    );
  }
 
  protected GraphBuilder createBuilder() {
    return(new BasicGraphBuilder())
  }
 
  protected GraphBuilder builder() {
    return(m_builder)
  }

}
TOP

Related Classes of org.geotools.graph.util.DijkstraShortestPathFinderTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.