/**
* Copyright (c) 2011-2014, OpenIoT
*
* This file is part of OpenIoT.
*
* OpenIoT is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, version 3 of the License.
*
* OpenIoT is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with OpenIoT. If not, see <http://www.gnu.org/licenses/>.
*
* Contact: OpenIoT mailto: info@openiot.eu
* @author Sofiane Sarni
*/
package org.openiot.gsn.utils.graph;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNotSame;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import org.junit.Test;
public class TestGraph {
@Test
public void testRemoveCycles() throws NodeNotExistsExeption{
Graph<String> graph = new Graph<String>();
graph.addNode("n1");
graph.addNode("n2");
graph.addNode("n3");
graph.addNode("n4");
graph.addNode("n5");
graph.addNode("n6");
graph.addEdge("n2", "n3");
graph.addEdge("n3", "n4");
graph.addEdge("n1", "n5");
graph.addEdge("n2", "n6");
assertFalse(graph.hasCycle());
graph.addEdge("n4", "n2");
printGraph(graph, "testRemoveCycles1");
assertTrue(graph.hasCycle());
graph.removeNode("n4");
assertNull(graph.findNode("n4"));
assertNull(graph.findNode("n3"));
assertNull(graph.findNode("n2"));
printGraph(graph, "testRemoveCycles2");
graph.addEdge("n6", "n5");
graph.addEdge("n6", "n6");
printGraph(graph, "testRemoveCycles3");
assertTrue(graph.hasCycle());
graph.removeNode("n6");
assertNull(graph.findNode("n6"));
assertNotNull(graph.findNode("n5"));
printGraph(graph, "testRemoveCycles4");
}
@Test
public void testRemoveNode() throws NodeNotExistsExeption{
Graph<String> graph = new Graph<String>();
graph.addNode("n1");
graph.addNode("n2");
graph.addNode("n3");
graph.addNode("n4");
graph.addNode("n5");
graph.addNode("n6");
graph.addEdge("n2", "n3");
graph.addEdge("n3", "n4");
graph.addEdge("n1", "n5");
graph.addEdge("n2", "n6");
printGraph(graph, "testRemoveNode1");
graph.removeNode("n4");
assertNull(graph.findNode("n2"));
assertNotNull(graph.findNode("n6"));
printGraph(graph, "testRemoveNode2");
}
@Test
public void testFindRootNode() throws NodeNotExistsExeption{
Graph<String> graph = new Graph<String>();
graph.addNode("n1");
graph.addNode("n2");
graph.addNode("n3");
graph.addNode("n4");
graph.addNode("n5");
graph.addNode("n6");
graph.addEdge("n2", "n3");
graph.addEdge("n3", "n4");
graph.addEdge("n1", "n5");
graph.addEdge("n2", "n6");
assertEquals(graph.findRootNode(graph.findNode("n5")), graph.findNode("n1"));
assertEquals(graph.findRootNode(graph.findNode("n1")), graph.findNode("n1"));
assertNotSame(graph.findRootNode(graph.findNode("n1")), graph.findNode("n5"));
assertEquals(graph.findRootNode(graph.findNode("n4")), graph.findNode("n2"));
}
private void printGraph(Graph graph, String message) {
System.out.println("===================" + message + "==================");
System.out.println(graph);
}
}