1 /**
2 * Copyright (c) 2008, 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 * Created on Sep 17, 2008
10 *
11 */
12 package edu.uci.ics.jung.algorithms.scoring;
13
14 import junit.framework.TestCase;
15
16 import com.google.common.base.Function;
17
18 import edu.uci.ics.jung.graph.DirectedSparseGraph;
19 import edu.uci.ics.jung.graph.Graph;
20
21 /**
22 *
23 */
24 public class TestBetweennessCentrality extends TestCase
25 {
26 // public void testUndirected() {
27 // UndirectedGraph<Integer,Integer> graph =
28 // new UndirectedSparseGraph<Integer,Integer>();
29 // for(int i=0; i<9; i++) {
30 // graph.addVertex(i);
31 // }
32 //
33 // int edge = 0;
34 // graph.addEdge(edge++, 0,1);
35 // graph.addEdge(edge++, 0,6);
36 // graph.addEdge(edge++, 1,2);
37 // graph.addEdge(edge++, 1,3);
38 // graph.addEdge(edge++, 2,4);
39 // graph.addEdge(edge++, 3,4);
40 // graph.addEdge(edge++, 4,5);
41 // graph.addEdge(edge++, 5,8);
42 // graph.addEdge(edge++, 7,8);
43 // graph.addEdge(edge++, 6,7);
44 //
45 // BetweennessCentrality<Integer,Integer> bc =
46 // new BetweennessCentrality<Integer,Integer>(graph);
47 //
48 //// System.out.println("scoring");
49 //// for (int i = 0; i < graph.getVertexCount(); i++)
50 //// System.out.println(String.format("%d: %f", i, bc.getVertexScore(i)));
51 //
52 // Assert.assertEquals(bc.getVertexScore(0),6.000,.001);
53 // Assert.assertEquals(bc.getVertexScore(1),7.833,.001);
54 // Assert.assertEquals(bc.getVertexScore(2),2.500,.001);
55 // Assert.assertEquals(bc.getVertexScore(3),2.500,.001);
56 // Assert.assertEquals(bc.getVertexScore(4),7.833,.001);
57 // Assert.assertEquals(bc.getVertexScore(5),6.000,.001);
58 // Assert.assertEquals(bc.getVertexScore(6),4.666,.001);
59 // Assert.assertEquals(bc.getVertexScore(7),4.000,.001);
60 // Assert.assertEquals(bc.getVertexScore(8),4.666,.001);
61 //
62 // Assert.assertEquals(bc.getEdgeScore(graph.findEdge(0,1)),10.666,.001);
63 // Assert.assertEquals(bc.getEdgeScore(graph.findEdge(0,6)),9.333,.001);
64 // Assert.assertEquals(bc.getEdgeScore(graph.findEdge(1,2)),6.500,.001);
65 // Assert.assertEquals(bc.getEdgeScore(graph.findEdge(1,3)),6.500,.001);
66 // Assert.assertEquals(bc.getEdgeScore(graph.findEdge(2,4)),6.500,.001);
67 // Assert.assertEquals(bc.getEdgeScore(graph.findEdge(3,4)),6.500,.001);
68 // Assert.assertEquals(bc.getEdgeScore(graph.findEdge(4,5)),10.666,.001);
69 // Assert.assertEquals(bc.getEdgeScore(graph.findEdge(5,8)),9.333,.001);
70 // Assert.assertEquals(bc.getEdgeScore(graph.findEdge(6,7)),8.000,.001);
71 // Assert.assertEquals(bc.getEdgeScore(graph.findEdge(7,8)),8.000,.001);
72 // }
73 //
74 // public void testDirected()
75 // {
76 // DirectedGraph<Integer,Integer> graph = new DirectedSparseGraph<Integer,Integer>();
77 // for(int i=0; i<5; i++)
78 // graph.addVertex(i);
79 //
80 // int edge=0;
81 // graph.addEdge(edge++, 0,1);
82 // graph.addEdge(edge++, 1,2);
83 // graph.addEdge(edge++, 3,1);
84 // graph.addEdge(edge++, 4,2);
85 //
86 // BetweennessCentrality<Integer,Integer> bc =
87 // new BetweennessCentrality<Integer,Integer>(graph);
88 //
89 // Assert.assertEquals(bc.getVertexScore(0),0,.001);
90 // Assert.assertEquals(bc.getVertexScore(1),2,.001);
91 // Assert.assertEquals(bc.getVertexScore(2),0,.001);
92 // Assert.assertEquals(bc.getVertexScore(3),0,.001);
93 // Assert.assertEquals(bc.getVertexScore(4),0,.001);
94 //
95 // Assert.assertEquals(bc.getEdgeScore(graph.findEdge(0,1)),2,.001);
96 // Assert.assertEquals(bc.getEdgeScore(graph.findEdge(1,2)),3,.001);
97 // Assert.assertEquals(bc.getEdgeScore(graph.findEdge(3,1)),2,.001);
98 // Assert.assertEquals(bc.getEdgeScore(graph.findEdge(4,2)),1,.001);
99 // }
100
101 public void testWeighted()
102 {
103 Graph<Integer, Character> graph = new DirectedSparseGraph<Integer, Character>();
104
105 for(int i=0; i<5; i++)
106 graph.addVertex(i);
107
108 char edge='a';
109 graph.addEdge(edge++, 0,1);
110 graph.addEdge(edge++, 0,2);
111 graph.addEdge(edge++, 2,3);
112 graph.addEdge(edge++, 3,1);
113 graph.addEdge(edge++, 1,4);
114
115 final int weights[] = {1, 1, 1, 1, 1};
116
117 Function<Character, Integer> edge_weights = new Function<Character, Integer>()
118 {
119 public Integer apply(Character arg0) { return weights[arg0 - 'a']; }
120 };
121
122 BetweennessCentrality<Integer,Character> bc =
123 new BetweennessCentrality<Integer,Character>(graph, edge_weights);
124
125 // System.out.println("scoring");
126 // System.out.println("(weighted)");
127 // System.out.println("vertices:");
128 // for (int i = 0; i < graph.getVertexCount(); i++)
129 // System.out.println(String.format("%d: %f", i, bc.getVertexScore(i)));
130 // System.out.println("edges:");
131 // for (int i = 0; i < graph.getEdgeCount(); i++)
132 // {
133 // char e = (char)(i + 'a');
134 // System.out.println(String.format("%c: (weight: %d), %f", e,
135 // edge_weights.apply(e), bc.getEdgeScore(e)));
136 // }
137 }
138 }