public static ConnectedComponents findComponentsForStartEdges(Graph graph, EdgeTransitionFilter edgeTransitionFilter, IntContainer edges) {
        return new EdgeBasedTarjanSCC(graph, edgeTransitionFilter, true).findComponentsForStartEdges(edges);
    }
@Test
    public void withStartEdges_simple() {
        // 0 - 1   4 - 5 - 6 - 7
        // |   |
        // 3 - 2   8 - 9
        g.edge(0, 1).setDistance(10).set(speedEnc, 10, 10);
        g.edge(1, 2).setDistance(10).set(speedEnc, 10, 10);
        g.edge(2, 3).setDistance(10).set(speedEnc, 10, 10);
        g.edge(3, 0).setDistance(10).set(speedEnc, 10, 10);
        g.edge(4, 5).setDistance(10).set(speedEnc, 10, 10);
        g.edge(5, 6).setDistance(10).set(speedEnc, 10, 10);
        g.edge(6, 7).setDistance(10).set(speedEnc, 10, 10);
        g.edge(8, 9).setDistance(10).set(speedEnc, 10, 10);

        // just the left island
        ConnectedComponents components = EdgeBasedTarjanSCC.findComponentsForStartEdges(g, (prev, edge) -> true, IntArrayList.from(0));
        assertEquals(8, components.getEdgeKeys());
        assertEquals(1, components.getComponents().size());

        // all islands
        components = EdgeBasedTarjanSCC.findComponentsForStartEdges(g, (prev, edge) -> true, IntArrayList.from(0, 4, 7));
        assertEquals(16, components.getEdgeKeys());
        assertEquals(3, components.getComponents().size());

        // here we initialize as for all islands but the filter still prevents some edges to be found
        components = EdgeBasedTarjanSCC.findComponentsForStartEdges(g,
                (prev, edge) -> edge.getEdge() > 3 && edge.getEdge() < 7, IntArrayList.from(0, 4, 7));
        assertEquals(6, components.getEdgeKeys());
        assertEquals(1, components.getComponents().size());

    }