Skip to content

Commit e55faed

Browse files
committed
test:Bron–Kerbosch algorithm added.
1 parent eabd772 commit e55faed

File tree

1 file changed

+79
-0
lines changed

1 file changed

+79
-0
lines changed
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
package com.thealgorithms.graph;
2+
3+
import static org.junit.jupiter.api.Assertions.assertEquals;
4+
import static org.junit.jupiter.api.Assertions.assertThrows;
5+
6+
import java.util.ArrayList;
7+
import java.util.HashSet;
8+
import java.util.List;
9+
import java.util.Set;
10+
import org.junit.jupiter.api.DisplayName;
11+
import org.junit.jupiter.api.Test;
12+
13+
class BronKerboschTest {
14+
15+
@Test
16+
@DisplayName("Complete graph returns single clique")
17+
void completeGraph() {
18+
List<Set<Integer>> adjacency = buildGraph(4);
19+
addUndirectedEdge(adjacency, 0, 1);
20+
addUndirectedEdge(adjacency, 0, 2);
21+
addUndirectedEdge(adjacency, 0, 3);
22+
addUndirectedEdge(adjacency, 1, 2);
23+
addUndirectedEdge(adjacency, 1, 3);
24+
addUndirectedEdge(adjacency, 2, 3);
25+
26+
List<Set<Integer>> cliques = BronKerbosch.findMaximalCliques(adjacency);
27+
assertEquals(1, cliques.size());
28+
assertEquals(Set.of(0, 1, 2, 3), cliques.get(0));
29+
}
30+
31+
@Test
32+
@DisplayName("Path graph produces individual edges")
33+
void pathGraph() {
34+
List<Set<Integer>> adjacency = buildGraph(3);
35+
addUndirectedEdge(adjacency, 0, 1);
36+
addUndirectedEdge(adjacency, 1, 2);
37+
38+
List<Set<Integer>> cliques = BronKerbosch.findMaximalCliques(adjacency);
39+
Set<Set<Integer>> result = new HashSet<>(cliques);
40+
Set<Set<Integer>> expected = Set.of(Set.of(0, 1), Set.of(1, 2));
41+
assertEquals(expected, result);
42+
}
43+
44+
@Test
45+
@DisplayName("Disconnected graph finds cliques per component")
46+
void disconnectedGraph() {
47+
List<Set<Integer>> adjacency = buildGraph(5);
48+
addUndirectedEdge(adjacency, 0, 1);
49+
addUndirectedEdge(adjacency, 0, 2);
50+
addUndirectedEdge(adjacency, 1, 2);
51+
addUndirectedEdge(adjacency, 3, 4);
52+
53+
List<Set<Integer>> cliques = BronKerbosch.findMaximalCliques(adjacency);
54+
Set<Set<Integer>> result = new HashSet<>(cliques);
55+
Set<Set<Integer>> expected = Set.of(Set.of(0, 1, 2), Set.of(3, 4));
56+
assertEquals(expected, result);
57+
}
58+
59+
@Test
60+
@DisplayName("Null neighbor set triggers exception")
61+
void nullNeighborSet() {
62+
List<Set<Integer>> adjacency = new ArrayList<>();
63+
adjacency.add(null);
64+
assertThrows(IllegalArgumentException.class, () -> BronKerbosch.findMaximalCliques(adjacency));
65+
}
66+
67+
private static List<Set<Integer>> buildGraph(int n) {
68+
List<Set<Integer>> graph = new ArrayList<>(n);
69+
for (int i = 0; i < n; i++) {
70+
graph.add(new HashSet<>());
71+
}
72+
return graph;
73+
}
74+
75+
private static void addUndirectedEdge(List<Set<Integer>> graph, int u, int v) {
76+
graph.get(u).add(v);
77+
graph.get(v).add(u);
78+
}
79+
}

0 commit comments

Comments
 (0)