View Javadoc
1   /*
2   * Copyright (c) 2003, The JUNG Authors
3   *
4   * All rights reserved.
5   *
6   * This software is open-source under the BSD license; see either
7   * "license.txt" or
8   * https://github.com/jrtom/jung/blob/master/LICENSE for a description.
9   */
10  package edu.uci.ics.jung.algorithms.importance;
11  
12  import junit.framework.Assert;
13  import junit.framework.Test;
14  import junit.framework.TestCase;
15  import junit.framework.TestSuite;
16  import edu.uci.ics.jung.graph.DirectedGraph;
17  import edu.uci.ics.jung.graph.DirectedSparseGraph;
18  import edu.uci.ics.jung.graph.UndirectedGraph;
19  import edu.uci.ics.jung.graph.UndirectedSparseGraph;
20  
21  /**
22   * @author Scott White
23   */
24  public class TestBetweennessCentrality extends TestCase {
25      public static Test suite() {
26          return new TestSuite(TestBetweennessCentrality.class);
27      }
28  
29      @Override
30      protected void setUp() {}
31  
32  //    private static <V,E> E getEdge(Graph<V,E> g, int v1Index, int v2Index, BidiMap<V,Integer> id) {
33  //        V v1 = id.getKey(v1Index);
34  //        V v2 = id.getKey(v2Index);
35  //        return g.findEdge(v1, v2);
36  //    }
37  
38      public void testRanker() {
39          UndirectedGraph<Integer,Integer> graph = 
40          	new UndirectedSparseGraph<Integer,Integer>();
41          for(int i=0; i<9; i++) {
42          	graph.addVertex(i);
43          }
44  
45  		int edge = 0;
46  		graph.addEdge(edge++, 0,1);
47  		graph.addEdge(edge++, 0,6);
48  		graph.addEdge(edge++, 1,2);
49  		graph.addEdge(edge++, 1,3);
50  		graph.addEdge(edge++, 2,4);
51  		graph.addEdge(edge++, 3,4);
52  		graph.addEdge(edge++, 4,5);
53  		graph.addEdge(edge++, 5,8);
54  		graph.addEdge(edge++, 7,8);
55  		graph.addEdge(edge++, 6,7);
56  
57          BetweennessCentrality<Integer,Integer> bc = 
58          	new BetweennessCentrality<Integer,Integer>(graph);
59          bc.setRemoveRankScoresOnFinalize(false);
60          bc.evaluate();
61  
62  //        System.out.println("ranking");
63  //        for (int i = 0; i < 9; i++) 
64  //        	System.out.println(String.format("%d: %f", i, bc.getVertexRankScore(i)));
65          
66          Assert.assertEquals(bc.getVertexRankScore(0)/28.0,0.2142,.001);
67          Assert.assertEquals(bc.getVertexRankScore(1)/28.0,0.2797,.001);
68          Assert.assertEquals(bc.getVertexRankScore(2)/28.0,0.0892,.001);
69          Assert.assertEquals(bc.getVertexRankScore(3)/28.0,0.0892,.001);
70          Assert.assertEquals(bc.getVertexRankScore(4)/28.0,0.2797,.001);
71          Assert.assertEquals(bc.getVertexRankScore(5)/28.0,0.2142,.001);
72          Assert.assertEquals(bc.getVertexRankScore(6)/28.0,0.1666,.001);
73          Assert.assertEquals(bc.getVertexRankScore(7)/28.0,0.1428,.001);
74          Assert.assertEquals(bc.getVertexRankScore(8)/28.0,0.1666,.001);
75  
76          Assert.assertEquals(bc.getEdgeRankScore(graph.findEdge(0,1)),
77          		10.66666,.001);
78  
79          Assert.assertEquals(bc.getEdgeRankScore(graph.findEdge(0,1)),10.66666,.001);
80          Assert.assertEquals(bc.getEdgeRankScore(graph.findEdge(0,6)),9.33333,.001);
81          Assert.assertEquals(bc.getEdgeRankScore(graph.findEdge(1,2)),6.5,.001);
82          Assert.assertEquals(bc.getEdgeRankScore(graph.findEdge(1,3)),6.5,.001);
83          Assert.assertEquals(bc.getEdgeRankScore(graph.findEdge(2,4)),6.5,.001);
84          Assert.assertEquals(bc.getEdgeRankScore(graph.findEdge(3,4)),6.5,.001);
85          Assert.assertEquals(bc.getEdgeRankScore(graph.findEdge(4,5)),10.66666,.001);
86          Assert.assertEquals(bc.getEdgeRankScore(graph.findEdge(5,8)),9.33333,.001);
87          Assert.assertEquals(bc.getEdgeRankScore(graph.findEdge(6,7)),8.0,.001);
88          Assert.assertEquals(bc.getEdgeRankScore(graph.findEdge(7,8)),8.0,.001);
89      }
90      
91      public void testRankerDirected() {
92      	DirectedGraph<Integer,Integer> graph = new DirectedSparseGraph<Integer,Integer>();
93      	for(int i=0; i<5; i++) {
94      		graph.addVertex(i);
95      	}
96  
97      	int edge=0;
98      	graph.addEdge(edge++, 0,1);
99      	graph.addEdge(edge++, 1,2);
100     	graph.addEdge(edge++, 3,1);
101     	graph.addEdge(edge++, 4,2);
102 
103     	BetweennessCentrality<Integer,Integer> bc = 
104     		new BetweennessCentrality<Integer,Integer>(graph);
105     	bc.setRemoveRankScoresOnFinalize(false);
106     	bc.evaluate();
107 
108     	Assert.assertEquals(bc.getVertexRankScore(0),0,.001);
109     	Assert.assertEquals(bc.getVertexRankScore(1),2,.001);
110     	Assert.assertEquals(bc.getVertexRankScore(2),0,.001);
111     	Assert.assertEquals(bc.getVertexRankScore(3),0,.001);
112     	Assert.assertEquals(bc.getVertexRankScore(4),0,.001);
113 
114     	Assert.assertEquals(bc.getEdgeRankScore(graph.findEdge(0,1)),2,.001);
115     	Assert.assertEquals(bc.getEdgeRankScore(graph.findEdge(1,2)),3,.001);
116     	Assert.assertEquals(bc.getEdgeRankScore(graph.findEdge(3,1)),2,.001);
117     	Assert.assertEquals(bc.getEdgeRankScore(graph.findEdge(4,2)),1,.001);
118     }
119 }