Fix a cycle in the acyclic graph sorter

This commit is contained in:
2024-06-09 22:30:39 +02:00
parent b012955069
commit 3884485a0d
2 changed files with 13 additions and 0 deletions

View File

@@ -72,6 +72,9 @@ public class AcyclicGraphSorter {
break;
}
if (!visitedIter.hasNext()) {
if (lastVisited == -1) {
break;
}
visitedIter.restart();
}
}

View File

@@ -63,4 +63,14 @@ class AcyclicGraphSorterTest {
AcyclicGraphSorter.GraphCycleException exception = assertThrows(AcyclicGraphSorter.GraphCycleException.class, sorter::sort);
assertEquals(Arrays.asList(2, 4, 5), exception.cycleIndeces());
}
@Test
void minimalCycle() {
AcyclicGraphSorter sorter = new AcyclicGraphSorter(2);
sorter.addEdge(0, 1);
sorter.addEdge(1, 0);
AcyclicGraphSorter.GraphCycleException exception = assertThrows(AcyclicGraphSorter.GraphCycleException.class, sorter::sort);
assertEquals(Arrays.asList(0, 1), exception.cycleIndeces());
}
}