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