blob: 8eb09df61a05775bc266a41cb81c382258afc319 [file] [log] [blame]
Thomas Vachuska24c849c2014-10-27 09:53:05 -07001/*
Thomas Vachuska4f1a60c2014-10-28 13:39:07 -07002 * Copyright 2014 Open Networking Laboratory
Thomas Vachuska24c849c2014-10-27 09:53:05 -07003 *
Thomas Vachuska4f1a60c2014-10-28 13:39:07 -07004 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
Thomas Vachuska24c849c2014-10-27 09:53:05 -07007 *
Thomas Vachuska4f1a60c2014-10-28 13:39:07 -07008 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
Thomas Vachuska24c849c2014-10-27 09:53:05 -070015 */
tom144de692014-08-29 11:38:44 -070016package org.onlab.graph;
17
tom144de692014-08-29 11:38:44 -070018import com.google.common.testing.EqualsTester;
19import org.junit.Test;
20
tom144de692014-08-29 11:38:44 -070021import static com.google.common.collect.ImmutableList.of;
22import static org.junit.Assert.assertEquals;
23import static org.junit.Assert.assertNull;
24
25/**
26 * Test of the default mutable path.
27 */
28public class DefaultMutablePathTest extends DefaultPathTest {
29
30 @Test
31 public void equality() {
32 DefaultPath<TestVertex, TestEdge> p1 =
33 new DefaultPath<>(of(new TestEdge(A, B, 1),
34 new TestEdge(B, C, 1)), 2.0);
35 DefaultPath<TestVertex, TestEdge> p2 =
36 new DefaultPath<>(of(new TestEdge(A, B, 1),
37 new TestEdge(B, D, 1)), 2.0);
38 new EqualsTester().addEqualityGroup(new DefaultMutablePath<>(p1),
39 new DefaultMutablePath<>(p1))
40 .addEqualityGroup(new DefaultMutablePath<>(p2))
41 .testEquals();
42 }
43
44 @Test
45 public void empty() {
46 MutablePath<TestVertex, TestEdge> p = new DefaultMutablePath<>();
47 assertNull("src should be null", p.src());
48 assertNull("dst should be null", p.dst());
49 assertEquals("incorrect edge count", 0, p.edges().size());
50 assertEquals("incorrect path cost", 0.0, p.cost(), 0.1);
51 }
52
53 @Test
54 public void pathCost() {
55 MutablePath<TestVertex, TestEdge> p = new DefaultMutablePath<>();
56 p.setCost(4);
57 assertEquals("incorrect path cost", 4.0, p.cost(), 0.1);
58 }
59
60 private void validatePath(Path<TestVertex, TestEdge> p,
61 TestVertex src, TestVertex dst, int length) {
62 validatePath(p, src, dst, length, 0.0);
63 }
64
65 @Test
66 public void insertEdge() {
67 MutablePath<TestVertex, TestEdge> p = new DefaultMutablePath<>();
68 p.insertEdge(new TestEdge(B, C, 1));
69 p.insertEdge(new TestEdge(A, B, 1));
70 validatePath(p, A, C, 2);
71 }
72
73 @Test
74 public void appendEdge() {
75 MutablePath<TestVertex, TestEdge> p = new DefaultMutablePath<>();
76 p.appendEdge(new TestEdge(A, B, 1));
77 p.appendEdge(new TestEdge(B, C, 1));
78 validatePath(p, A, C, 2);
79 }
80
81 @Test
82 public void removeEdge() {
83 MutablePath<TestVertex, TestEdge> p = new DefaultMutablePath<>();
84 p.appendEdge(new TestEdge(A, B, 1));
85 p.appendEdge(new TestEdge(B, C, 1));
86 p.appendEdge(new TestEdge(C, C, 2));
87 p.appendEdge(new TestEdge(C, D, 1));
88 validatePath(p, A, D, 4);
89
90 p.removeEdge(new TestEdge(A, B, 1));
91 validatePath(p, B, D, 3);
92
93 p.removeEdge(new TestEdge(C, C, 2));
94 validatePath(p, B, D, 2);
95
96 p.removeEdge(new TestEdge(C, D, 1));
97 validatePath(p, B, C, 1);
98 }
99
100 @Test
101 public void toImmutable() {
102 MutablePath<TestVertex, TestEdge> p = new DefaultMutablePath<>();
103 p.appendEdge(new TestEdge(A, B, 1));
104 p.appendEdge(new TestEdge(B, C, 1));
105 validatePath(p, A, C, 2);
106
107 assertEquals("immutables should equal", p.toImmutable(), p.toImmutable());
108 validatePath(p.toImmutable(), A, C, 2);
109 }
110}