blob: 4245e9cd73bfc6ecd5feab997e10681578fa87f3 [file] [log] [blame]
tom144de692014-08-29 11:38:44 -07001package org.onlab.graph;
2
3import com.google.common.collect.ImmutableList;
4import com.google.common.testing.EqualsTester;
5import org.junit.Test;
6
7import java.util.Iterator;
8import java.util.List;
9
10import static com.google.common.collect.ImmutableList.of;
11import static org.junit.Assert.assertEquals;
12import static org.junit.Assert.assertNull;
13
14/**
15 * Test of the default mutable path.
16 */
17public class DefaultMutablePathTest extends DefaultPathTest {
18
19 @Test
20 public void equality() {
21 DefaultPath<TestVertex, TestEdge> p1 =
22 new DefaultPath<>(of(new TestEdge(A, B, 1),
23 new TestEdge(B, C, 1)), 2.0);
24 DefaultPath<TestVertex, TestEdge> p2 =
25 new DefaultPath<>(of(new TestEdge(A, B, 1),
26 new TestEdge(B, D, 1)), 2.0);
27 new EqualsTester().addEqualityGroup(new DefaultMutablePath<>(p1),
28 new DefaultMutablePath<>(p1))
29 .addEqualityGroup(new DefaultMutablePath<>(p2))
30 .testEquals();
31 }
32
33 @Test
34 public void empty() {
35 MutablePath<TestVertex, TestEdge> p = new DefaultMutablePath<>();
36 assertNull("src should be null", p.src());
37 assertNull("dst should be null", p.dst());
38 assertEquals("incorrect edge count", 0, p.edges().size());
39 assertEquals("incorrect path cost", 0.0, p.cost(), 0.1);
40 }
41
42 @Test
43 public void pathCost() {
44 MutablePath<TestVertex, TestEdge> p = new DefaultMutablePath<>();
45 p.setCost(4);
46 assertEquals("incorrect path cost", 4.0, p.cost(), 0.1);
47 }
48
49 private void validatePath(Path<TestVertex, TestEdge> p,
50 TestVertex src, TestVertex dst, int length) {
51 validatePath(p, src, dst, length, 0.0);
52 }
53
54 @Test
55 public void insertEdge() {
56 MutablePath<TestVertex, TestEdge> p = new DefaultMutablePath<>();
57 p.insertEdge(new TestEdge(B, C, 1));
58 p.insertEdge(new TestEdge(A, B, 1));
59 validatePath(p, A, C, 2);
60 }
61
62 @Test
63 public void appendEdge() {
64 MutablePath<TestVertex, TestEdge> p = new DefaultMutablePath<>();
65 p.appendEdge(new TestEdge(A, B, 1));
66 p.appendEdge(new TestEdge(B, C, 1));
67 validatePath(p, A, C, 2);
68 }
69
70 @Test
71 public void removeEdge() {
72 MutablePath<TestVertex, TestEdge> p = new DefaultMutablePath<>();
73 p.appendEdge(new TestEdge(A, B, 1));
74 p.appendEdge(new TestEdge(B, C, 1));
75 p.appendEdge(new TestEdge(C, C, 2));
76 p.appendEdge(new TestEdge(C, D, 1));
77 validatePath(p, A, D, 4);
78
79 p.removeEdge(new TestEdge(A, B, 1));
80 validatePath(p, B, D, 3);
81
82 p.removeEdge(new TestEdge(C, C, 2));
83 validatePath(p, B, D, 2);
84
85 p.removeEdge(new TestEdge(C, D, 1));
86 validatePath(p, B, C, 1);
87 }
88
89 @Test
90 public void toImmutable() {
91 MutablePath<TestVertex, TestEdge> p = new DefaultMutablePath<>();
92 p.appendEdge(new TestEdge(A, B, 1));
93 p.appendEdge(new TestEdge(B, C, 1));
94 validatePath(p, A, C, 2);
95
96 assertEquals("immutables should equal", p.toImmutable(), p.toImmutable());
97 validatePath(p.toImmutable(), A, C, 2);
98 }
99}