Added more unit tests for the graph utilities.
diff --git a/utils/misc/src/test/java/org/onlab/graph/DefaultMutablePathTest.java b/utils/misc/src/test/java/org/onlab/graph/DefaultMutablePathTest.java
new file mode 100644
index 0000000..4245e9c
--- /dev/null
+++ b/utils/misc/src/test/java/org/onlab/graph/DefaultMutablePathTest.java
@@ -0,0 +1,99 @@
+package org.onlab.graph;
+
+import com.google.common.collect.ImmutableList;
+import com.google.common.testing.EqualsTester;
+import org.junit.Test;
+
+import java.util.Iterator;
+import java.util.List;
+
+import static com.google.common.collect.ImmutableList.of;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+
+/**
+ * Test of the default mutable path.
+ */
+public class DefaultMutablePathTest extends DefaultPathTest {
+
+ @Test
+ public void equality() {
+ DefaultPath<TestVertex, TestEdge> p1 =
+ new DefaultPath<>(of(new TestEdge(A, B, 1),
+ new TestEdge(B, C, 1)), 2.0);
+ DefaultPath<TestVertex, TestEdge> p2 =
+ new DefaultPath<>(of(new TestEdge(A, B, 1),
+ new TestEdge(B, D, 1)), 2.0);
+ new EqualsTester().addEqualityGroup(new DefaultMutablePath<>(p1),
+ new DefaultMutablePath<>(p1))
+ .addEqualityGroup(new DefaultMutablePath<>(p2))
+ .testEquals();
+ }
+
+ @Test
+ public void empty() {
+ MutablePath<TestVertex, TestEdge> p = new DefaultMutablePath<>();
+ assertNull("src should be null", p.src());
+ assertNull("dst should be null", p.dst());
+ assertEquals("incorrect edge count", 0, p.edges().size());
+ assertEquals("incorrect path cost", 0.0, p.cost(), 0.1);
+ }
+
+ @Test
+ public void pathCost() {
+ MutablePath<TestVertex, TestEdge> p = new DefaultMutablePath<>();
+ p.setCost(4);
+ assertEquals("incorrect path cost", 4.0, p.cost(), 0.1);
+ }
+
+ private void validatePath(Path<TestVertex, TestEdge> p,
+ TestVertex src, TestVertex dst, int length) {
+ validatePath(p, src, dst, length, 0.0);
+ }
+
+ @Test
+ public void insertEdge() {
+ MutablePath<TestVertex, TestEdge> p = new DefaultMutablePath<>();
+ p.insertEdge(new TestEdge(B, C, 1));
+ p.insertEdge(new TestEdge(A, B, 1));
+ validatePath(p, A, C, 2);
+ }
+
+ @Test
+ public void appendEdge() {
+ MutablePath<TestVertex, TestEdge> p = new DefaultMutablePath<>();
+ p.appendEdge(new TestEdge(A, B, 1));
+ p.appendEdge(new TestEdge(B, C, 1));
+ validatePath(p, A, C, 2);
+ }
+
+ @Test
+ public void removeEdge() {
+ MutablePath<TestVertex, TestEdge> p = new DefaultMutablePath<>();
+ p.appendEdge(new TestEdge(A, B, 1));
+ p.appendEdge(new TestEdge(B, C, 1));
+ p.appendEdge(new TestEdge(C, C, 2));
+ p.appendEdge(new TestEdge(C, D, 1));
+ validatePath(p, A, D, 4);
+
+ p.removeEdge(new TestEdge(A, B, 1));
+ validatePath(p, B, D, 3);
+
+ p.removeEdge(new TestEdge(C, C, 2));
+ validatePath(p, B, D, 2);
+
+ p.removeEdge(new TestEdge(C, D, 1));
+ validatePath(p, B, C, 1);
+ }
+
+ @Test
+ public void toImmutable() {
+ MutablePath<TestVertex, TestEdge> p = new DefaultMutablePath<>();
+ p.appendEdge(new TestEdge(A, B, 1));
+ p.appendEdge(new TestEdge(B, C, 1));
+ validatePath(p, A, C, 2);
+
+ assertEquals("immutables should equal", p.toImmutable(), p.toImmutable());
+ validatePath(p.toImmutable(), A, C, 2);
+ }
+}