1
2
3
4
5
6
7
8
9
10 package edu.uci.ics.jung.algorithms.cluster;
11
12 import java.util.ArrayList;
13 import java.util.HashSet;
14 import java.util.List;
15 import java.util.Set;
16
17 import junit.framework.Test;
18 import junit.framework.TestCase;
19 import junit.framework.TestSuite;
20 import edu.uci.ics.jung.graph.Graph;
21 import edu.uci.ics.jung.graph.UndirectedGraph;
22 import edu.uci.ics.jung.graph.UndirectedSparseMultigraph;
23
24
25
26
27
28 public class TestBicomponentClusterer extends TestCase {
29 public static Test suite() {
30 return new TestSuite(TestBicomponentClusterer.class);
31 }
32
33 @Override
34 protected void setUp() {
35
36 }
37
38 public void testExtract0() throws Exception
39 {
40 UndirectedGraph<String,Number> graph = new UndirectedSparseMultigraph<String,Number>();
41 String[] v = {"0"};
42 graph.addVertex(v[0]);
43
44 List<Set<String>> c = new ArrayList<Set<String>>();
45 c.add(0, new HashSet<String>());
46 c.get(0).add(v[0]);
47
48
49
50
51
52 testComponents(graph, v, c);
53 }
54
55 public void testExtractEdge() throws Exception
56 {
57 UndirectedGraph<String,Number> graph = new UndirectedSparseMultigraph<String,Number>();
58 String[] v = {"0","1"};
59 graph.addVertex(v[0]);
60 graph.addVertex(v[1]);
61 graph.addEdge(0, v[0], v[1]);
62
63 List<Set<String>> c = new ArrayList<Set<String>>();
64 c.add(0, new HashSet<String>());
65 c.get(0).add(v[0]);
66 c.get(0).add(v[1]);
67
68
69
70
71
72
73 testComponents(graph, v, c);
74 }
75
76 public void testExtractV() throws Exception
77 {
78 UndirectedGraph<String,Number> graph = new UndirectedSparseMultigraph<String,Number>();
79 String[] v = new String[3];
80 for (int i = 0; i < 3; i++)
81 {
82 v[i] = ""+i;
83 graph.addVertex(v[i]);
84 }
85 graph.addEdge(0, v[0], v[1]);
86 graph.addEdge(1, v[0], v[2]);
87
88 List<Set<String>> c = new ArrayList<Set<String>>();
89 c.add(0, new HashSet<String>());
90 c.add(1, new HashSet<String>());
91
92 c.get(0).add(v[0]);
93 c.get(0).add(v[1]);
94
95 c.get(1).add(v[0]);
96 c.get(1).add(v[2]);
97
98
99
100
101
102
103
104
105
106 testComponents(graph, v, c);
107 }
108
109 public void createEdges(String[] v, int[][] edge_array, Graph<String,Number> g)
110 {
111 for (int k = 0; k < edge_array.length; k++)
112 {
113 int i = edge_array[k][0];
114 int j = edge_array[k][1];
115 String v1 = getVertex(v, i, g);
116 String v2 = getVertex(v, j, g);
117
118 g.addEdge(k, v1, v2);
119 }
120 }
121
122 public String getVertex(String[] v_array, int i, Graph<String,Number> g)
123 {
124 String v = v_array[i];
125 if (v == null)
126 {
127 v_array[i] = Character.toString((char)('0'+i));
128 g.addVertex(v_array[i]);
129 v = v_array[i];
130 }
131 return v;
132 }
133
134 public void testExtract1() {
135 String[] v = new String[6];
136 int[][] edges1 = {{0,1}, {0,5}, {0,3}, {0,4}, {1,5}, {3,4}, {2,3}};
137 UndirectedGraph<String,Number> graph = new UndirectedSparseMultigraph<String,Number>();
138 createEdges(v, edges1, graph);
139
140 List<Set<String>> c = new ArrayList<Set<String>>();
141 for (int i = 0; i < 3; i++)
142 c.add(i, new HashSet<String>());
143
144 c.get(0).add(v[0]);
145 c.get(0).add(v[1]);
146 c.get(0).add(v[5]);
147
148 c.get(1).add(v[0]);
149 c.get(1).add(v[3]);
150 c.get(1).add(v[4]);
151
152 c.get(2).add(v[2]);
153 c.get(2).add(v[3]);
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170 testComponents(graph, v, c);
171 }
172
173 public void testExtract2() {
174 String[] v = new String[9];
175 int[][] edges1 = {{0,2}, {0,4}, {1,0}, {2,1}, {3,0}, {4,3}, {5,3}, {6,7}, {6,8}, {8,7}};
176 UndirectedGraph<String,Number> graph = new UndirectedSparseMultigraph<String,Number>();
177 createEdges(v, edges1, graph);
178
179 List<Set<String>> c = new ArrayList<Set<String>>();
180 for (int i = 0; i < 4; i++)
181 c.add(i, new HashSet<String>());
182
183 c.get(0).add(v[0]);
184 c.get(0).add(v[1]);
185 c.get(0).add(v[2]);
186
187 c.get(1).add(v[0]);
188 c.get(1).add(v[3]);
189 c.get(1).add(v[4]);
190
191 c.get(2).add(v[5]);
192 c.get(2).add(v[3]);
193
194 c.get(3).add(v[6]);
195 c.get(3).add(v[7]);
196 c.get(3).add(v[8]);
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217 testComponents(graph, v, c);
218 }
219
220 public void testComponents(UndirectedGraph<String,Number> graph, String[] vertices, List<Set<String>> c)
221 {
222 BicomponentClusterer<String,Number> finder = new BicomponentClusterer<String,Number>();
223 Set<Set<String>> bicomponents = finder.apply(graph);
224
225
226 assertEquals(bicomponents.size(), c.size());
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243 List<Set<String>> clusterList = new ArrayList<Set<String>>(bicomponents);
244 boolean found = false;
245 for (int i = 0; i < c.size(); i++)
246 {
247 for (int j = 0; j < bicomponents.size(); j++)
248 if (clusterList.get(j).equals(c.get(i)))
249 {
250 found = true;
251 break;
252 }
253 assertTrue(found);
254 }
255
256
257 Set<String> collapsedSet = new HashSet<String>();
258 for(Set<String> set : bicomponents) {
259 collapsedSet.addAll(set);
260 }
261 for (String v : graph.getVertices())
262 {
263 assertTrue(collapsedSet.contains(v));
264
265 }
266 }
267
268 }