Search in sources :

Example 36 with LGraph

use of org.eclipse.elk.alg.layered.graph.LGraph in project elk by eclipse.

the class LayerSweepCrossingMinimizerTest method makeNestedTwoNodeGraphWithEasternPorts.

private LGraph makeNestedTwoNodeGraphWithEasternPorts(final LNode leftOuterNode, final LPort[] leftOuterPorts) {
    LGraph leftInnerGraph = nestedGraph(leftOuterNode);
    LNode[] leftInnerNodes = addNodesToLayer(2, makeLayer(leftInnerGraph));
    LNode[] leftInnerDummyNodes = addExternalPortDummiesToLayer(makeLayer(leftInnerGraph), leftOuterPorts);
    eastWestEdgeFromTo(leftInnerNodes[0], leftInnerDummyNodes[0]);
    eastWestEdgeFromTo(leftInnerNodes[1], leftInnerDummyNodes[1]);
    return leftInnerGraph;
}
Also used : LNode(org.eclipse.elk.alg.layered.graph.LNode) LGraph(org.eclipse.elk.alg.layered.graph.LGraph)

Example 37 with LGraph

use of org.eclipse.elk.alg.layered.graph.LGraph in project elk by eclipse.

the class LayerSweepCrossingMinimizerTest method givenSimpleHierarchicalNodeWithLowConnectivity_DoesNotUseHierarchySweep.

/**
 * <pre>
 * ____  _____
 * |*-+  +-* |
 * |  |\/|   |
 * |*-+/\+-* |
 * |  |  |*-*|
 * |  |  |*-*|
 * |  |  |*-*|
 * |  |  |*-*|
 * |  |  |*-*|
 * |  |  |*-*|
 * |  |  |*-*|
 * |  |  |*-*|
 * |--|  |---|
 * </pre>
 */
@Test
public void givenSimpleHierarchicalNodeWithLowConnectivity_DoesNotUseHierarchySweep() {
    if (crossMinType == CrossMinType.BARYCENTER) {
        LNode leftOuterNode = addNodeToLayer(makeLayer(getGraph()));
        LNode rightOuterNode = addNodeToLayer(makeLayer(getGraph()));
        LPort[] leftOuterPorts = addPortsOnSide(2, leftOuterNode, PortSide.EAST);
        LPort[] rightOuterPorts = addPortsOnSide(2, rightOuterNode, PortSide.WEST);
        addEdgeBetweenPorts(leftOuterPorts[0], rightOuterPorts[0]);
        addEdgeBetweenPorts(leftOuterPorts[1], rightOuterPorts[1]);
        LGraph leftInnerGraph = makeNestedTwoNodeGraphWithEasternPorts(leftOuterNode, leftOuterPorts);
        LGraph rightInnerGraph = makeNestedTwoNodeGraphWithWesternPorts(rightOuterNode, rightOuterPorts);
        Layer leftLayer = rightInnerGraph.getLayers().get(1);
        LNode[] leftNodes = addNodesToLayer(7, leftLayer);
        LNode[] rightNodes = addNodesToLayer(7, makeLayer(rightInnerGraph));
        for (int i = 0; i < 7; i++) {
            eastWestEdgeFromTo(leftNodes[i], rightNodes[i]);
        }
        getGraph().setProperty(LayeredOptions.CROSSING_MINIMIZATION_HIERARCHICAL_SWEEPINESS, 0.2);
        List<LNode> expectedExternalDummyOrderRight = Lists.newArrayList(rightInnerGraph.getLayers().get(0));
        List<LPort> expectedOrderOfPortsRight = Lists.newArrayList(rightOuterPorts);
        List<LNode> expectedNodeOrderLeftInner = switchOrderOfNodesInLayer(0, 1, leftInnerGraph.getLayers().get(0));
        setUpAndMinimizeCrossings();
        List<LNode> actualExternalDummyOrderRight = rightInnerGraph.getLayers().get(0).getNodes();
        assertThat(actualExternalDummyOrderRight, is(expectedExternalDummyOrderRight));
        assertThat(rightOuterNode.getPorts(), is(expectedOrderOfPortsRight));
        List<LNode> actualNormalOrderLeft = leftInnerGraph.getLayers().get(0).getNodes();
        assertThat(actualNormalOrderLeft, is(expectedNodeOrderLeftInner));
    }
}
Also used : LPort(org.eclipse.elk.alg.layered.graph.LPort) LNode(org.eclipse.elk.alg.layered.graph.LNode) LGraph(org.eclipse.elk.alg.layered.graph.LGraph) Layer(org.eclipse.elk.alg.layered.graph.Layer) Test(org.junit.Test)

Example 38 with LGraph

use of org.eclipse.elk.alg.layered.graph.LGraph in project elk by eclipse.

the class LayerSweepCrossingMinimizerTest method moreRandomThanHierarchicalWithNorthSout_ShouldNotCrossHierarchy.

/**
 * <pre>
 *_____   _______
 *| *-+---p *-| |
 *|   |   | *-* |
 *|   |   |  x  |
 *|   |   | * | |
 *| *-+---+-*-*-+-*
 *|   |   |     |‚
 *|___|   |_____|
 * </pre>
 *
 * p is unconnected port.
 */
@Test
public void moreRandomThanHierarchicalWithNorthSout_ShouldNotCrossHierarchy() {
    LNode leftOuterNode = addNodeToLayer(makeLayer());
    LPort[] leftOuterPorts = addPortsOnSide(2, leftOuterNode, PortSide.EAST);
    makeNestedTwoNodeGraphWithEasternPorts(leftOuterNode, leftOuterPorts);
    LNode middleOuterNode = addNodeToLayer(makeLayer());
    LNode rightNode = addNodeToLayer(makeLayer());
    LPort[] rightOuterPorts = addPortsOnSide(1, middleOuterNode, PortSide.EAST);
    LPort[] middleNodeLeftOuterPorts = addPortsOnSide(2, middleOuterNode, PortSide.WEST);
    addEdgeBetweenPorts(leftOuterPorts[0], middleNodeLeftOuterPorts[1]);
    addEdgeBetweenPorts(leftOuterPorts[1], middleNodeLeftOuterPorts[0]);
    eastWestEdgeFromTo(rightOuterPorts[0], rightNode);
    LGraph nestedGraph = nestedGraph(middleOuterNode);
    LNode[] leftDummies = addExternalPortDummiesToLayer(makeLayer(nestedGraph), middleNodeLeftOuterPorts);
    LNode[] leftInnerNodes = addNodesToLayer(4, makeLayer(nestedGraph));
    LNode[] rightInnerNodes = addNodesToLayer(3, makeLayer(nestedGraph));
    LNode[] rightDummies = addExternalPortDummiesToLayer(makeLayer(nestedGraph), rightOuterPorts);
    eastWestEdgeFromTo(leftDummies[0], leftInnerNodes[3]);
    addNorthSouthEdge(PortSide.NORTH, rightInnerNodes[1], rightInnerNodes[0], leftInnerNodes[0], true);
    eastWestEdgeFromTo(leftInnerNodes[1], rightInnerNodes[1]);
    eastWestEdgeFromTo(leftInnerNodes[1], rightInnerNodes[2]);
    eastWestEdgeFromTo(leftInnerNodes[2], rightInnerNodes[1]);
    eastWestEdgeFromTo(leftInnerNodes[3], rightInnerNodes[2]);
    eastWestEdgeFromTo(rightInnerNodes[1], rightDummies[0]);
    setUpAndMinimizeCrossings();
    List<GraphInfoHolder> graphData = crossMin.getGraphData();
    if (crossMinType == CrossMinType.BARYCENTER) {
        assertTrue(graphData.get(nestedGraph.id).dontSweepInto());
    }
}
Also used : LPort(org.eclipse.elk.alg.layered.graph.LPort) LNode(org.eclipse.elk.alg.layered.graph.LNode) LGraph(org.eclipse.elk.alg.layered.graph.LGraph) GraphInfoHolder(org.eclipse.elk.alg.layered.p3order.GraphInfoHolder) Test(org.junit.Test)

Example 39 with LGraph

use of org.eclipse.elk.alg.layered.graph.LGraph in project elk by eclipse.

the class LayerSweepCrossingMinimizerTest method needsCrossHierarchy_checkWhetherMarked.

/**
 * <pre>
 * _______  _____
 * |   * +--+ * |
 * |   * +--+ * |
 * |_____|  |___|
 * </pre>
 */
// TODO case where bottom up has sortable ports.
@Ignore
public void needsCrossHierarchy_checkWhetherMarked() {
    LNode leftOuterNode = addNodeToLayer(makeLayer());
    LNode rightOuterNode = addNodeToLayer(makeLayer());
    setFixedOrderConstraint(rightOuterNode);
    LPort[] leftOuterPorts = addPortsOnSide(2, leftOuterNode, PortSide.EAST);
    LPort[] rightOuterPorts = addPortsOnSide(2, rightOuterNode, PortSide.WEST);
    addEdgeBetweenPorts(leftOuterPorts[0], rightOuterPorts[1]);
    addEdgeBetweenPorts(leftOuterPorts[1], rightOuterPorts[0]);
    LGraph leftNestedGraph = nestedGraph(leftOuterNode);
    addNodesToLayer(2, makeLayer(leftNestedGraph));
    addExternalPortDummiesToLayer(makeLayer(leftNestedGraph), leftOuterPorts);
    LGraph rightNestedGraph = nestedGraph(rightOuterNode);
    addNodesToLayer(2, makeLayer(rightNestedGraph));
    addExternalPortDummiesToLayer(makeLayer(rightNestedGraph), rightOuterPorts);
    setUpAndMinimizeCrossings();
    List<GraphInfoHolder> graphData = crossMin.getGraphData();
    for (GraphInfoHolder data : graphData) {
        if (data.hasParent()) {
            assertFalse(data.dontSweepInto());
        }
    }
}
Also used : LPort(org.eclipse.elk.alg.layered.graph.LPort) LNode(org.eclipse.elk.alg.layered.graph.LNode) LGraph(org.eclipse.elk.alg.layered.graph.LGraph) GraphInfoHolder(org.eclipse.elk.alg.layered.p3order.GraphInfoHolder) Ignore(org.junit.Ignore)

Example 40 with LGraph

use of org.eclipse.elk.alg.layered.graph.LGraph in project elk by eclipse.

the class LayerSweepCrossingMinimizerTest method givenGraphWhichMustTransportSwitchedPortOrderThroughHierarchy_ShouldContainNoCrossing.

/**
 * <pre>
 * ____  _____
 * |  |  +-*-+-*
 * |  |\/|   |
 * |  |/\+-*-+-*
 * |--|  |---|
 * </pre>
 */
@Test
public void givenGraphWhichMustTransportSwitchedPortOrderThroughHierarchy_ShouldContainNoCrossing() {
    LNode leftNode = addNodeToLayer(makeLayer(getGraph()));
    setFixedOrderConstraint(leftNode);
    LNode middleOuterNode = addNodeToLayer(makeLayer(getGraph()));
    LNode[] rightNodes = addNodesToLayer(2, makeLayer(getGraph()));
    LPort[] middleOuterRightPorts = addPortsOnSide(2, middleOuterNode, PortSide.EAST);
    eastWestEdgeFromTo(middleOuterRightPorts[0], rightNodes[0]);
    eastWestEdgeFromTo(middleOuterRightPorts[1], rightNodes[1]);
    LPort[] leftPorts = addPortsOnSide(2, leftNode, PortSide.EAST);
    LPort[] middleOuterLeftPorts = addPortsOnSide(2, middleOuterNode, PortSide.WEST);
    addEdgeBetweenPorts(leftPorts[0], middleOuterLeftPorts[0]);
    addEdgeBetweenPorts(leftPorts[1], middleOuterLeftPorts[1]);
    LGraph innerGraph = nestedGraph(middleOuterNode);
    LNode[] leftInnerDummyNodes = addExternalPortDummiesToLayer(makeLayer(innerGraph), middleOuterLeftPorts);
    LNode[] innerNodes = addNodesToLayer(2, makeLayer(innerGraph));
    LNode[] rightInnerDummyNodes = addExternalPortDummiesToLayer(makeLayer(innerGraph), middleOuterRightPorts);
    eastWestEdgeFromTo(innerNodes[0], rightInnerDummyNodes[0]);
    eastWestEdgeFromTo(innerNodes[1], rightInnerDummyNodes[1]);
    eastWestEdgeFromTo(leftInnerDummyNodes[0], innerNodes[0]);
    eastWestEdgeFromTo(leftInnerDummyNodes[1], innerNodes[1]);
    List<LPort> expextedPorts = copyPortsInIndexOrder(middleOuterNode, 1, 0, 3, 2);
    setUpAndMinimizeCrossings();
    assertThat(getGraph().getLayers().get(1).getNodes().get(0).getPorts(), is(expextedPorts));
}
Also used : LPort(org.eclipse.elk.alg.layered.graph.LPort) LNode(org.eclipse.elk.alg.layered.graph.LNode) LGraph(org.eclipse.elk.alg.layered.graph.LGraph) Test(org.junit.Test)

Aggregations

LGraph (org.eclipse.elk.alg.layered.graph.LGraph)115 LNode (org.eclipse.elk.alg.layered.graph.LNode)90 LPort (org.eclipse.elk.alg.layered.graph.LPort)49 Layer (org.eclipse.elk.alg.layered.graph.Layer)38 Test (org.junit.Test)36 TestAfterProcessor (org.eclipse.elk.alg.test.framework.annotations.TestAfterProcessor)19 LEdge (org.eclipse.elk.alg.layered.graph.LEdge)17 KVector (org.eclipse.elk.core.math.KVector)15 InternalProperties (org.eclipse.elk.alg.layered.options.InternalProperties)14 LayeredOptions (org.eclipse.elk.alg.layered.options.LayeredOptions)13 List (java.util.List)11 ILayoutProcessor (org.eclipse.elk.core.alg.ILayoutProcessor)11 IElkProgressMonitor (org.eclipse.elk.core.util.IElkProgressMonitor)10 NodeType (org.eclipse.elk.alg.layered.graph.LNode.NodeType)9 Lists (com.google.common.collect.Lists)7 Set (java.util.Set)7 GraphProperties (org.eclipse.elk.alg.layered.options.GraphProperties)7 GraphInfoHolder (org.eclipse.elk.alg.layered.p3order.GraphInfoHolder)7 PortSide (org.eclipse.elk.core.options.PortSide)7 ElkNode (org.eclipse.elk.graph.ElkNode)7