Note that you will not receive any points for this part if you only use the tests below.
You must add your own tests as per the assignment page to receive credit.
import static org.junit.Assert.*;
import org.junit.Before;
import org.junit.Test;
import java.util.List;
import java.util.ArrayList;
public class GraphUnitTests {
Graph g1;
Graph g2;
@Before
public void init()
{
initG1();
initG2();
}
// graph from assignment page
private void initG1()
{
// make sure vertices start at 0
DefaultGraphVertex.resetIDCounter();
g1 = new DirectedGraph();
// add 4 vertices
for ( int i = 0; i < 4; i++ )
{
g1.addVertex(new DefaultGraphVertex());
}
// add the edges
int[] sources = {0,1,1,2,3,3};
int[] targets = {1,2,3,3,0,1};
// for each edge
for ( int i = 0; i < sources.length; i++ )
{
g1.addEdge(sources[i], targets[i]);
}
}
// graph with traversals that are more interesting
private void initG2()
{
// make sure vertices start at 0
DefaultGraphVertex.resetIDCounter();
g2 = new DirectedGraph();
// add 4 vertices
for ( int i = 0; i < 5; i++ )
{
g2.addVertex(new DefaultGraphVertex());
}
// add the edges
int[] sources = {0,0,0,1,3,4};
int[] targets = {1,2,4,3,4,1};
// for each edge
for ( int i = 0; i < sources.length; i++ )
{
g2.addEdge(sources[i], targets[i]);
}
}
@Test
public void numVerticesTest() {
// the number of vertices is 4
assertEquals("number of vertices test", 4, g1.numVertices());
}
@Test
public void numEdgesTest() {
// the number of edges is 6
assertEquals("number of edges test", 6, g1.numEdges());
}
@Test
public void addVertexTest() {
g1.addVertex(new DefaultGraphVertex());
// the number of vertices is now 5
assertEquals("add vertex test", 5, g1.numVertices());
}
@Test
public void graphStringTest() {
System.out.println(g1.toString());
assertEquals("graph string test", "((0,1,2,3),(0->1,1->2,1->3,2->3,3->0,3->1))",
g1.toString());
}
@Test
public void df1_0Test() {
int[] traversalOrder = {0,1,2,3};
List<GraphVertex> traversal = createTraversalList( g1, traversalOrder );
System.out.println( "traversal is: " + g1.depthFirst(0).toString());
assertEquals("DF traversal from 0 in G1 test", traversal, g1.depthFirst(0));
}
@Test
public void df1_2Test() {
int[] traversalOrder = {2,3,0,1};
List<GraphVertex> traversal = createTraversalList( g1, traversalOrder );
System.out.println( "traversal is: " + g1.depthFirst(2).toString());
assertEquals("DF traversal from 2 in G1 test", traversal, g1.depthFirst(2));
}
@Test
public void bf1_0Test() {
int[] traversalOrder = {0,1,2,3};
List<GraphVertex> traversal = createTraversalList( g1, traversalOrder );
System.out.println( "traversal is: " + g1.breadthFirst(0).toString());
assertEquals("BF traversal from 0 in G1 test", traversal, g1.breadthFirst(0));
}
@Test
public void bf1_2Test() {
int[] traversalOrder = {2,3,0,1};
List<GraphVertex> traversal = createTraversalList( g1, traversalOrder );
System.out.println( "traversal is: " + g1.depthFirst(0).toString());
assertEquals("BF traversal from 2 in G1 test", traversal, g1.breadthFirst(2));
}
@Test
public void df2_0Test() {
int[] traversalOrder = {0,1,3,4,2};
List<GraphVertex> traversal = createTraversalList( g2, traversalOrder );
System.out.println( "traversal is: " + g2.depthFirst(0).toString());
assertEquals("DF traversal from 0 in G2 test", traversal, g2.depthFirst(0));
}
@Test
public void bf2_0Test() {
int[] traversalOrder = {0,1,2,4,3};
List<GraphVertex> traversal = createTraversalList( g2, traversalOrder );
System.out.println( "traversal is: " + g2.breadthFirst(0).toString());
assertEquals("DF traversal from 0 in G2 test", traversal, g2.breadthFirst(0));
}
/**
* Helper method to create a list of GraphVertex objects corresponding
* to the traversal order (of IDs) given.
*/
private List<GraphVertex> createTraversalList( Graph g, int[] traversalOrder )
{
// for the traversal
List<GraphVertex> traversal = new ArrayList<GraphVertex>();
// for each ID in the traversalOrder array
for ( int i = 0; i < traversalOrder.length; i++ )
{
// add the corresponding GraphVertex object
traversal.add( g.getVertex( traversalOrder[i] ) );
}
// return the list
return traversal;
}
}