MultiGraphTest.java

package org.graphstream.graph.implementations;

import static org.junit.Assert.*;

import java.util.Random;

import org.graphstream.graph.Edge;
import org.graphstream.graph.Node;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;

public class MultiGraphTest {

	private MultiGraph multiGraph;
	
	@Before
	public void setUp() {
		multiGraph = new MultiGraph("multi-graph");
		Node root = multiGraph.addNode("root");
		Node leftNode = multiGraph.addNode("leftNode");
		Node rightNode = multiGraph.addNode("rightNode");
		
		Edge RL = multiGraph.addEdge("root-left", "root", "leftNode");
		Edge RR = multiGraph.addEdge("root-right", "root", "rightNode");
	}
	
	//TC-MG_C01
	@Test
	public void EdgeAditionTest() {
	
		Edge RL = multiGraph.getEdge("root-left");
		Node root = multiGraph.getNode("root");
		Node leftNode = multiGraph.getNode("leftNode");
		
		assertEquals(2, multiGraph.getEdgeCount());

		// id returns the correct node
		assertEquals(root, multiGraph.getNode("root"));
		
		// is undirected graph
		assertFalse(RL.isDirected());
		
		// left and right node of the edge RL
		assertEquals(root, RL.getNode0());
		assertEquals(leftNode, RL.getNode1());
		
		// source and target of the edge RL
		assertEquals(root, RL.getSourceNode());
		assertEquals(leftNode, RL.getTargetNode());
	}
	
	//TC-MG_C02
	@Test
	public void EdgeRemovalTest() {
		multiGraph.removeEdge("root-left");		
		assertEquals(1, multiGraph.getEdgeCount());
	}
	
	
	//TC-MG_C03
	@Test
	public void AddNodeTest() {
		MultiGraph multiGraph = new MultiGraph("multi-graph");
		multiGraph.addNode("root");
		multiGraph.addNode("leftNode");
		multiGraph.addNode("rightNode");
		assertEquals(3, multiGraph.getNodeCount());
	}
	
	
	//TC-MG_C04
	@Test
	public void RemoveNodeTest() {
		MultiGraph multiGraph = new MultiGraph("multi-graph");
		multiGraph.addNode("root");
		multiGraph.addNode("leftNode");
		multiGraph.addNode("rightNode");		
		multiGraph.addEdge("root-right", "root", "rightNode");
		multiGraph.addEdge("left-right", "leftNode", "rightNode");
		multiGraph.removeNode("root");
		
		assertEquals(2, multiGraph.getNodeCount());
		assertEquals(1, multiGraph.getEdgeCount());
		
	}
	
	//TC-MG_C05
		@Test
		public void MultiEdgeAdditionTest() {
			MultiGraph multiGraph = new MultiGraph("multi-graph");
			multiGraph.addNode("leftNode");
			multiGraph.addNode("rightNode");
			multiGraph.addEdge("Edge1", "leftNode", "rightNode");
			multiGraph.addEdge("Edge2", "leftNode", "rightNode");
			assertEquals(2, multiGraph.getEdgeCount());
		}
		
		//TC-MG_C06	
		@Test
		public void MultiGraphCreationTest() {
			assertNotNull(multiGraph);
			assertEquals("multi-graph", multiGraph.getId());
		}

		//TC-MG_C07
		@Test
		public void NodesCreationTest(){
			Node n1 = multiGraph.getNode("leftNode");
			Node n2 = multiGraph.getNode("rightNode");
			
			assertNotNull(n1);
			assertNotNull(n2);
			
			assertEquals("leftNode", n1.getId());
			assertEquals("rightNode", n2.getId());
		}
		
		//TC-MG_C08
		@Test
		public void EdgeCreationTest(){
			Edge e1 = multiGraph.getEdge("root-left");
			
			assertNotNull(e1);
			assertEquals("root-left", e1.getId());
			
		}
		
		//TC-MG_C09
		@Test
		public void MultiGraphEmptyTest() {
			MultiGraph mg = new MultiGraph("empty", false, false, 0, 0);
			assertEquals(0, mg.getNodeCount());
			assertEquals(0, mg.getEdgeCount());
		}
		
		//TC-MG_C10
		@Test(expected= OutOfMemoryError.class)
		public void OutOfMemoryTest() {
			int numberOfNodes = 128 * 1000;
			int numberOfEdges = 1024 * 1000;
			MultiGraph mg = new MultiGraph("multi", false, false, numberOfNodes, numberOfEdges);
			
			String id = "node_";
			for(int i = 0; i<numberOfNodes; i++) {
				mg.addNode(id+i);
			}
			
			Random random = new Random();
			for(int i=0; i<numberOfEdges; i++) {
				int id1 = random.nextInt(numberOfNodes);
				int id2 = random.nextInt(numberOfNodes);
				
				AbstractNode node1 = mg.getNode("node_"+id1);
				AbstractNode node2 = mg.getNode("node_"+id2);
				
				mg.addEdge("edge_"+i, node1, node2);
			}
			
			fail();
		}

}