Added more unit tests for the graph utilities.
diff --git a/utils/misc/src/test/java/org/onlab/graph/BreadthFirstSearchTest.java b/utils/misc/src/test/java/org/onlab/graph/BreadthFirstSearchTest.java
index ae45750..f9c752d 100644
--- a/utils/misc/src/test/java/org/onlab/graph/BreadthFirstSearchTest.java
+++ b/utils/misc/src/test/java/org/onlab/graph/BreadthFirstSearchTest.java
@@ -7,27 +7,28 @@
import static org.junit.Assert.assertEquals;
/**
- * Test of the BFS algorithm.
+ * Test of the BFS and similar path search algorithms.
*/
-public abstract class BreadthFirstSearchTest extends AbstractGraphSearchTest {
+public class BreadthFirstSearchTest extends AbstractGraphPathSearchTest {
@Override
- protected GraphPathSearch<TestVertex, TestEdge> graphSearch() {
- return null; // new BreadthFirstSearch();
+ protected AbstractGraphPathSearch<TestVertex, TestEdge> graphSearch() {
+ return new BreadthFirstSearch<>();
}
@Test
- public void basics() {
- runBasics(3, 8.0, 7);
+ public void defaultGraphTest() {
+ executeDefaultTest(7, 3, 8.0);
}
@Test
- public void defaultWeight() {
+ public void defaultHopCountWeight() {
weight = null;
- runBasics(3, 3.0, 7);
+ executeDefaultTest(7, 3, 3.0);
}
- protected void runBasics(int expectedLength, double expectedCost, int expectedPaths) {
+ // Executes the default test
+ protected void executeDefaultTest(int pathCount, int pathLength, double pathCost) {
g = new AdjacencyListsGraph<>(vertices(), edges());
GraphPathSearch<TestVertex, TestEdge> search = graphSearch();
@@ -37,12 +38,29 @@
Path p = paths.iterator().next();
assertEquals("incorrect src", A, p.src());
assertEquals("incorrect dst", H, p.dst());
- assertEquals("incorrect path length", expectedLength, p.edges().size());
- assertEquals("incorrect path cost", expectedCost, p.cost(), 0.1);
+ assertEquals("incorrect path length", pathLength, p.edges().size());
+ assertEquals("incorrect path cost", pathCost, p.cost(), 0.1);
paths = search.search(g, A, null, weight).paths();
printPaths(paths);
- assertEquals("incorrect paths count", expectedPaths, paths.size());
+ assertEquals("incorrect paths count", pathCount, paths.size());
+ }
+
+ // Executes the search and validates its results.
+ protected void executeSearch(GraphPathSearch<TestVertex, TestEdge> search,
+ Graph<TestVertex, TestEdge> graph,
+ TestVertex src, TestVertex dst,
+ EdgeWeight<TestVertex, TestEdge> weight,
+ int pathCount, double pathCost) {
+ GraphPathSearch.Result<TestVertex, TestEdge> result =
+ search.search(graph, src, dst, weight);
+ Set<Path<TestVertex, TestEdge>> paths = result.paths();
+ printPaths(paths);
+ assertEquals("incorrect paths count", pathCount, paths.size());
+ if (pathCount > 0) {
+ Path<TestVertex, TestEdge> path = paths.iterator().next();
+ assertEquals("incorrect path cost", pathCost, path.cost(), 0.1);
+ }
}
}