blob: d99e485b237a4e0c691033b02da3b20fb9847b7c [file] [log] [blame]
tome3489412014-08-29 02:30:38 -07001package org.onlab.graph;
2
3import org.junit.Test;
4
5import java.util.Set;
6
7import static org.junit.Assert.assertEquals;
8
9/**
tom144de692014-08-29 11:38:44 -070010 * Test of the BFS and similar path search algorithms.
tome3489412014-08-29 02:30:38 -070011 */
tom144de692014-08-29 11:38:44 -070012public class BreadthFirstSearchTest extends AbstractGraphPathSearchTest {
tome3489412014-08-29 02:30:38 -070013
14 @Override
tom144de692014-08-29 11:38:44 -070015 protected AbstractGraphPathSearch<TestVertex, TestEdge> graphSearch() {
16 return new BreadthFirstSearch<>();
tome3489412014-08-29 02:30:38 -070017 }
18
19 @Test
tom144de692014-08-29 11:38:44 -070020 public void defaultGraphTest() {
21 executeDefaultTest(7, 3, 8.0);
tome3489412014-08-29 02:30:38 -070022 }
23
24 @Test
tom144de692014-08-29 11:38:44 -070025 public void defaultHopCountWeight() {
tome3489412014-08-29 02:30:38 -070026 weight = null;
tom144de692014-08-29 11:38:44 -070027 executeDefaultTest(7, 3, 3.0);
tome3489412014-08-29 02:30:38 -070028 }
29
tom144de692014-08-29 11:38:44 -070030 // Executes the default test
31 protected void executeDefaultTest(int pathCount, int pathLength, double pathCost) {
tom0633d682014-09-10 12:10:03 -070032 graph = new AdjacencyListsGraph<>(vertexes(), edges());
tome3489412014-08-29 02:30:38 -070033
34 GraphPathSearch<TestVertex, TestEdge> search = graphSearch();
tom0633d682014-09-10 12:10:03 -070035 Set<Path<TestVertex, TestEdge>> paths = search.search(graph, A, H, weight).paths();
tome3489412014-08-29 02:30:38 -070036 assertEquals("incorrect paths count", 1, paths.size());
37
38 Path p = paths.iterator().next();
39 assertEquals("incorrect src", A, p.src());
40 assertEquals("incorrect dst", H, p.dst());
tom144de692014-08-29 11:38:44 -070041 assertEquals("incorrect path length", pathLength, p.edges().size());
42 assertEquals("incorrect path cost", pathCost, p.cost(), 0.1);
tome3489412014-08-29 02:30:38 -070043
tom0633d682014-09-10 12:10:03 -070044 paths = search.search(graph, A, null, weight).paths();
tome3489412014-08-29 02:30:38 -070045 printPaths(paths);
tom144de692014-08-29 11:38:44 -070046 assertEquals("incorrect paths count", pathCount, paths.size());
47 }
48
49 // Executes the search and validates its results.
50 protected void executeSearch(GraphPathSearch<TestVertex, TestEdge> search,
51 Graph<TestVertex, TestEdge> graph,
52 TestVertex src, TestVertex dst,
53 EdgeWeight<TestVertex, TestEdge> weight,
54 int pathCount, double pathCost) {
55 GraphPathSearch.Result<TestVertex, TestEdge> result =
56 search.search(graph, src, dst, weight);
57 Set<Path<TestVertex, TestEdge>> paths = result.paths();
58 printPaths(paths);
59 assertEquals("incorrect paths count", pathCount, paths.size());
60 if (pathCount > 0) {
61 Path<TestVertex, TestEdge> path = paths.iterator().next();
62 assertEquals("incorrect path cost", pathCost, path.cost(), 0.1);
63 }
tome3489412014-08-29 02:30:38 -070064 }
65
66}