/** * Copyright (C) 2011 Brian Ferris <bdferris@onebusaway.org> * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.onebusaway.transit_data_federation.impl; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import java.util.Arrays; import java.util.List; import java.util.Set; import org.junit.Test; import org.onebusaway.collections.tuple.Pair; import org.onebusaway.collections.tuple.Tuples; public class DirectedGraphTest { @Test public void testGetNodes() { DirectedGraph<String> graph = new DirectedGraph<String>(); Set<String> n0 = graph.getNodes(); assertEquals(0, n0.size()); graph.addNode("a"); Set<String> n1 = graph.getNodes(); assertEquals(1, n1.size()); assertTrue(n1.contains("a")); graph.addNode("b"); Set<String> n2 = graph.getNodes(); assertEquals(2, n2.size()); assertTrue(n2.contains("a")); assertTrue(n2.contains("b")); graph.addNode("b"); n2 = graph.getNodes(); assertEquals(2, n2.size()); assertTrue(n2.contains("a")); assertTrue(n2.contains("b")); graph.addNode("c"); Set<String> n3 = graph.getNodes(); assertEquals(3, n3.size()); assertTrue(n3.contains("a")); assertTrue(n3.contains("b")); assertTrue(n3.contains("c")); } @Test public void testGetEdges() { DirectedGraph<String> graph = new DirectedGraph<String>(); Set<Pair<String>> e0 = graph.getEdges(); assertEquals(0, e0.size()); graph.addEdge("a", "b"); Set<Pair<String>> e1 = graph.getEdges(); assertEquals(1, e1.size()); assertTrue(e1.contains(Tuples.pair("a", "b"))); graph.addEdge("b", "c"); Set<Pair<String>> e2 = graph.getEdges(); assertEquals(2, e2.size()); assertTrue(e2.contains(Tuples.pair("a", "b"))); assertTrue(e2.contains(Tuples.pair("b", "c"))); graph.addEdge("b", "c"); Set<Pair<String>> e2b = graph.getEdges(); assertEquals(2, e2b.size()); assertTrue(e2b.contains(Tuples.pair("a", "b"))); assertTrue(e2b.contains(Tuples.pair("b", "c"))); graph.addEdge("c", "b"); Set<Pair<String>> e3 = graph.getEdges(); assertEquals(3, e3.size()); assertTrue(e3.contains(Tuples.pair("a", "b"))); assertTrue(e3.contains(Tuples.pair("b", "c"))); assertTrue(e3.contains(Tuples.pair("c", "b"))); graph.removeEdge("b", "c"); Set<Pair<String>> e4 = graph.getEdges(); assertEquals(2, e4.size()); assertTrue(e4.contains(Tuples.pair("a", "b"))); assertTrue(e4.contains(Tuples.pair("c", "b"))); } @Test public void testGetInboundNodes() { DirectedGraph<String> graph = new DirectedGraph<String>(); graph.addNode("b"); Set<String> n1 = graph.getInboundNodes("b"); assertEquals(0, n1.size()); graph.addEdge("a", "b"); Set<String> n2 = graph.getInboundNodes("b"); assertEquals(1, n2.size()); assertTrue(n2.contains("a")); Set<String> n3 = graph.getInboundNodes("a"); assertEquals(0, n3.size()); graph.addEdge("b", "b"); Set<String> n4 = graph.getInboundNodes("b"); assertEquals(2, n4.size()); assertTrue(n4.contains("a")); assertTrue(n4.contains("b")); } @Test public void testGetOutboundNodes() { DirectedGraph<String> graph = new DirectedGraph<String>(); graph.addNode("a"); Set<String> n1 = graph.getOutboundNodes("a"); assertEquals(0, n1.size()); graph.addEdge("a", "b"); Set<String> n2 = graph.getOutboundNodes("a"); assertEquals(1, n2.size()); assertTrue(n2.contains("b")); Set<String> n3 = graph.getOutboundNodes("b"); assertEquals(0, n3.size()); graph.addEdge("a", "a"); Set<String> n4 = graph.getOutboundNodes("a"); assertEquals(2, n4.size()); assertTrue(n4.contains("a")); assertTrue(n4.contains("b")); } @Test public void testIsConnected() { DirectedGraph<String> graph = new DirectedGraph<String>(); graph.addNode("a"); graph.addNode("b"); assertFalse(graph.isConnected("a", "b")); graph.addEdge("a", "b"); assertTrue(graph.isConnected("a", "b")); assertFalse(graph.isConnected("b", "a")); graph.addEdge("b", "c"); assertTrue(graph.isConnected("a", "b")); assertTrue(graph.isConnected("b", "c")); assertTrue(graph.isConnected("a", "c")); assertFalse(graph.isConnected("b", "a")); assertFalse(graph.isConnected("c", "b")); assertFalse(graph.isConnected("c", "a")); } @Test public void testGetTopologicalSort() { DirectedGraph<String> graph = new DirectedGraph<String>(); graph.addEdge("a", "b"); graph.addEdge("b", "c"); graph.addEdge("c", "d"); graph.addEdge("d", "e"); List<String> s1 = graph.getTopologicalSort(null); assertEquals(5, s1.size()); assertEquals(Arrays.asList("a", "b", "c", "d", "e"), s1); } }