public static ConnectedComponents findComponentsRecursive(Graph graph, EdgeTransitionFilter edgeTransitionFilter, boolean excludeSingleEdgeComponents) {
        return new EdgeBasedTarjanSCC(graph, edgeTransitionFilter, excludeSingleEdgeComponents).findComponentsRecursive();
    }
@Test
    public void linearSingle() {
        // 0 - 1
        g.edge(0, 1).setDistance(1).set(speedEnc, 10, 10);
        ConnectedComponents result = EdgeBasedTarjanSCC.findComponentsRecursive(g, fwdAccessFilter, false);
        assertEquals(2, result.getEdgeKeys());
        assertEquals(1, result.getTotalComponents());
        assertEquals(1, result.getComponents().size());
        assertTrue(result.getSingleEdgeComponents().isEmpty());
        assertEquals(result.getComponents().get(0), result.getBiggestComponent());
        assertEquals(IntArrayList.from(1, 0), result.getComponents().get(0));
    }