mirror of
https://github.com/Eaglercraft-TeaVM-Fork/eagler-teavm.git
synced 2024-12-22 08:14:09 -08:00
Add some tests for SCC
This commit is contained in:
parent
e2aababde8
commit
33b319ce16
|
@ -83,7 +83,6 @@ public final class GraphUtils {
|
|||
* Tarjan's algorithm
|
||||
*/
|
||||
public static int[][] findStronglyConnectedComponents(Graph graph, int[] start, GraphNodeFilter filter) {
|
||||
// TODO: can show incorrect behaviour sometimes
|
||||
List<int[]> components = new ArrayList<>();
|
||||
int[] visitIndex = new int[graph.size()];
|
||||
int[] headerIndex = new int[graph.size()];
|
||||
|
@ -113,6 +112,9 @@ public final class GraphUtils {
|
|||
}
|
||||
if (hdr == visitIndex[node]) {
|
||||
components.add(currentComponent.getAll());
|
||||
for (int componentMember : currentComponent.getAll()) {
|
||||
headerIndex[componentMember] = graph.size() + 1;
|
||||
}
|
||||
currentComponent.clear();
|
||||
}
|
||||
headerIndex[node] = hdr;
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
*/
|
||||
package org.teavm.common;
|
||||
|
||||
import static org.hamcrest.CoreMatchers.*;
|
||||
import static org.hamcrest.CoreMatchers.is;
|
||||
import static org.junit.Assert.*;
|
||||
import com.carrotsearch.hppc.IntOpenHashSet;
|
||||
import com.carrotsearch.hppc.IntSet;
|
||||
|
@ -88,6 +88,25 @@ public class GraphTest {
|
|||
assertThat(sccs[0], is(new int[] { 1, 2, 3, 4, 5 }));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void stronglyConnectedComponentCalculated3() {
|
||||
GraphBuilder builder = new GraphBuilder();
|
||||
builder.addEdge(0, 1);
|
||||
builder.addEdge(0, 2);
|
||||
builder.addEdge(1, 3);
|
||||
builder.addEdge(3, 1);
|
||||
builder.addEdge(2, 3);
|
||||
Graph graph = builder.build();
|
||||
|
||||
int[][] sccs = GraphUtils.findStronglyConnectedComponents(graph, new int[] { 0 }, filter);
|
||||
sortSccs(sccs);
|
||||
|
||||
assertThat(sccs.length, is(3));
|
||||
assertThat(sccs[0], is(new int[] { 0 }));
|
||||
assertThat(sccs[1], is(new int[] { 1, 3 }));
|
||||
assertThat(sccs[2], is(new int[] { 2 }));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void irreducibleGraphSplit() {
|
||||
GraphBuilder builder = new GraphBuilder();
|
||||
|
|
Loading…
Reference in New Issue
Block a user