package com.jadekler.sarah;
import com.jadekler.sarah.graph.*;
import org.junit.*;
import java.util.*;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.*;
public class GraphTest {
Graph graph;
@Before
public void setup() {
graph = new Graph(3);
}
@Test
public void testAddDirected() {
graph.add(0, 1, true);
graph.add(0, 2, true);
assertThat(graph.getVertices().length, equalTo(3));
assertThat(graph.getVertices()[0].getAdjacentVertices(), equalTo(asLinkedList(1, 2)));
assertThat(graph.getVertices()[1], nullValue());
assertThat(graph.getVertices()[2], nullValue());
}
@Test
public void testAddUndirected() {
graph.add(0, 1, false);
graph.add(0, 2, false);
assertThat(graph.getVertices().length, equalTo(3));
assertThat(graph.getVertices()[0].getAdjacentVertices(), equalTo(asLinkedList(1, 2)));
assertThat(graph.getVertices()[1].getAdjacentVertices(), equalTo(asLinkedList(0)));
assertThat(graph.getVertices()[2].getAdjacentVertices(), equalTo(asLinkedList(0)));
}
@Test
public void testTraverseBreadthFirst() {
graph = new Graph(6);
graph.add(0, 1, false);
graph.add(0, 4, false);
graph.add(0, 5, false);
graph.add(1, 2, false);
graph.add(2, 3, false);
graph.add(3, 4, false);
assertThat(graph.getVertices().length, equalTo(6));
assertThat(graph.getVertices()[0].getAdjacentVertices(), equalTo(asLinkedList(1, 4, 5)));
assertThat(graph.getVertices()[1].getAdjacentVertices(), equalTo(asLinkedList(0, 2)));
assertThat(graph.getVertices()[2].getAdjacentVertices(), equalTo(asLinkedList(1, 3)));
assertThat(graph.getVertices()[3].getAdjacentVertices(), equalTo(asLinkedList(2, 4)));
assertThat(graph.getVertices()[4].getAdjacentVertices(), equalTo(asLinkedList(0, 3)));
assertThat(graph.getVertices()[5].getAdjacentVertices(), equalTo(asLinkedList(0)));
int[] order = graph.traverseBreadthFirst(0);
assertThat(order, equalTo(new int[]{0, 1, 4, 5, 2, 3}));
}
@Test
public void testTraverseDepthFirst() {
graph = new Graph(7);
// A B C D E F G
// 0 1 2 3 4 5 6
graph.add(0, 1, false);
graph.add(0, 2, false);
graph.add(0, 4, false);
graph.add(1, 3, false);
graph.add(1, 5, false);
graph.add(2, 6, false);
graph.add(4, 5, false);
Integer[] order = graph.traverseDepthFirst(0);
assertThat(order, equalTo(new Integer[]{0, 1, 3, 5, 4, 2, 6}));
}
public <T> LinkedList<T> asLinkedList(T... froms) {
LinkedList<T> item = new LinkedList();
for (int i = 0; i < froms.length; i++) {
item.add(froms[i]);
}
return item;
}
}