MultiGraphEO2.java

package org.graphstream.graph.implementations;

import static org.junit.Assert.*;

import org.graphstream.graph.Edge;
import org.graphstream.graph.Graph;
import org.graphstream.graph.Node;
import org.graphstream.graph.implementations.MultiGraph;
import org.junit.BeforeClass;

import java.util.Random;

import org.junit.Test;

public class MultiGraphEO2 {

	@BeforeClass
	public static void setUp() {
		
	}
	//TC-MG_C01
	@Test
	public void testEdgeAdition() {
		MultiGraph 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");
	
		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 testEdgeRemoval() {
		MultiGraph multiGraph = new MultiGraph("multi-graph");
		multiGraph.addNode("root");
		multiGraph.addNode("leftNode");
		multiGraph.addNode("rightNode");
		
		multiGraph.addEdge("root-left", "root", "leftNode");
		multiGraph.addEdge("root-right", "root", "rightNode");
		
		multiGraph.removeEdge("root-left");
		
		assertEquals(1, multiGraph.getEdgeCount());
	}
	
	
	//TC-MG_C03
	@Test
	public void testAddNode() {
		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 testRemoveNode() {
		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 testMultiEdgeAdition() {
			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());
		}

			
		
		private static MultiGraph graph = new MultiGraph("test");
		
		@BeforeClass
		  public static void testSetup() {
			Node n1 = graph.addNode("node1");
			Node n2 = graph.addNode("node2");
			
			graph.addEdge("n1-n2", n1, n2);
		  }
		
		//TC-MG_C06
		@Test
		public void testMultiGraphBasics() {
			assertNotNull(graph);
			assertEquals("test", graph.getId());
		}

		//TC-MG_C07
		@Test
		public void testMultiGraphNodes(){
			
			Node n1 = graph.getNode("node1");
			Node n2 = graph.getNode("node2");
			
			assertNotNull(n1);
			assertNotNull(n2);
			
			assertEquals("node1", n1.getId());
			assertEquals("node2", n2.getId());
		}
		
		//TC-MG_C08
		@Test
		public void testMultiGraphEdgesBasics(){
			Edge e1 = graph.getEdge("n1-n2");
			
			assertNotNull(e1);
			assertEquals("n1-n2", e1.getId());
			
		}
		
		//TC-MG_C09
		@Test
		public void testMultiGraphEdges1(){
			Node n1 = graph.getNode("node1");
			Node n2 = graph.getNode("node2");
			Edge e1 = graph.getEdge("n1-n2");
			
			assertEquals(n1.getEdgeBetween(n2), e1);
			assertEquals(n2.getEdgeBetween(n1), e1);
			assertEquals(n1.getEdgeBetween(n2), n2.getEdgeBetween(n1));
		}
		
		//TC-MG_C10
		@Test(expected= OutOfMemoryError.class)
		public void multiGraphOutOfMemoryTest() {
			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);
			}
			
			assertEquals(numberOfNodes, mg.getNodeCount());
			assertEquals(numberOfEdges, mg.getEdgeCount());
		}
		
		
		
}