Search in sources :

Example 6 with GraphInfoHolder

use of org.eclipse.elk.alg.layered.p3order.GraphInfoHolder 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 7 with GraphInfoHolder

use of org.eclipse.elk.alg.layered.p3order.GraphInfoHolder 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 8 with GraphInfoHolder

use of org.eclipse.elk.alg.layered.p3order.GraphInfoHolder in project elk by eclipse.

the class LayerSweepCrossingMinimizerTest method hierarchicalMustTransfer_checkWhetherMarked.

/**
 * <pre>
 * _______ ___ _____
 * |   *-+-|*|-+-* |
 * |     | |_| |   |
 * |     | ___ |   |
 * |   *-+-|*|-+-* |
 * |     | |_| |   |
 * |_____|     |___|
 * </pre>
 */
@Test
public void hierarchicalMustTransfer_checkWhetherMarked() {
    LNode leftOuterNode = addNodeToLayer(makeLayer());
    LNode[] middleNodes = addNodesToLayer(2, makeLayer());
    addNodeToLayer(makeLayer(nestedGraph(middleNodes[0])));
    addNodeToLayer(makeLayer(nestedGraph(middleNodes[1])));
    LNode rightOuterNode = addNodeToLayer(makeLayer());
    LPort[] leftOuterPorts = addPortsOnSide(2, leftOuterNode, PortSide.EAST);
    LPort[] rightOuterPorts = addPortsOnSide(2, rightOuterNode, PortSide.WEST);
    eastWestEdgeFromTo(leftOuterPorts[0], middleNodes[0]);
    eastWestEdgeFromTo(leftOuterPorts[1], middleNodes[1]);
    eastWestEdgeFromTo(middleNodes[0], rightOuterPorts[0]);
    eastWestEdgeFromTo(middleNodes[1], rightOuterPorts[1]);
    makeNestedTwoNodeGraphWithEasternPorts(leftOuterNode, leftOuterPorts);
    makeNestedTwoNodeGraphWithWesternPorts(rightOuterNode, rightOuterPorts);
    setUpAndMinimizeCrossings();
    setOnAllGraphs(LayeredOptions.CROSSING_MINIMIZATION_HIERARCHICAL_SWEEPINESS, -1.0, graph);
    List<GraphInfoHolder> graphData = crossMin.getGraphData();
    assertFalse(graphData.get(leftOuterNode.getNestedGraph().id).dontSweepInto());
    assertFalse(graphData.get(rightOuterNode.getNestedGraph().id).dontSweepInto());
}
Also used : LPort(org.eclipse.elk.alg.layered.graph.LPort) LNode(org.eclipse.elk.alg.layered.graph.LNode) GraphInfoHolder(org.eclipse.elk.alg.layered.p3order.GraphInfoHolder) Test(org.junit.Test)

Example 9 with GraphInfoHolder

use of org.eclipse.elk.alg.layered.p3order.GraphInfoHolder in project elk by eclipse.

the class SwitchDeciderTest method givenDeciderForFreeLayer.

private SwitchDecider givenDeciderForFreeLayer(final int layerIndex, final CrossingCountSide direction) {
    freeLayerIndex = layerIndex;
    currentNodeOrder = graph.toNodeArray();
    CrossingMatrixFiller crossingMatrixFiller = new CrossingMatrixFiller(greedyType, currentNodeOrder, layerIndex, direction);
    return new SwitchDecider(layerIndex, currentNodeOrder, crossingMatrixFiller, new int[getNPorts(currentNodeOrder)], new GraphInfoHolder(graph, CrossMinType.ONE_SIDED_GREEDY_SWITCH, new ArrayList<>()), greedyType == CrossMinType.ONE_SIDED_GREEDY_SWITCH);
}
Also used : ArrayList(java.util.ArrayList) CrossingMatrixFiller(org.eclipse.elk.alg.layered.intermediate.greedyswitch.CrossingMatrixFiller) SwitchDecider(org.eclipse.elk.alg.layered.intermediate.greedyswitch.SwitchDecider) GraphInfoHolder(org.eclipse.elk.alg.layered.p3order.GraphInfoHolder)

Example 10 with GraphInfoHolder

use of org.eclipse.elk.alg.layered.p3order.GraphInfoHolder in project elk by eclipse.

the class CrossingsCounterTest method countCrossingsBetweenLayers_moreComplexThreeLayerGraph.

@Test
public void countCrossingsBetweenLayers_moreComplexThreeLayerGraph() {
    getMoreComplexThreeLayerGraph();
    GraphInfoHolder gd = new GraphInfoHolder(graph, CrossMinType.BARYCENTER, null);
    gd.portDistributor().distributePortsWhileSweeping(order(), 1, true);
    counter = new CrossingsCounter(new int[getNumPorts(order())]);
    assertThat(counter.countCrossingsBetweenLayers(order()[0], order()[1]), is(1));
}
Also used : CrossingsCounter(org.eclipse.elk.alg.layered.p3order.counting.CrossingsCounter) GraphInfoHolder(org.eclipse.elk.alg.layered.p3order.GraphInfoHolder) Test(org.junit.Test)

Aggregations

GraphInfoHolder (org.eclipse.elk.alg.layered.p3order.GraphInfoHolder)19 LNode (org.eclipse.elk.alg.layered.graph.LNode)16 LPort (org.eclipse.elk.alg.layered.graph.LPort)15 Test (org.junit.Test)14 LGraph (org.eclipse.elk.alg.layered.graph.LGraph)7 Layer (org.eclipse.elk.alg.layered.graph.Layer)5 CrossingsCounter (org.eclipse.elk.alg.layered.p3order.counting.CrossingsCounter)3 CrossingMatrixFiller (org.eclipse.elk.alg.layered.intermediate.greedyswitch.CrossingMatrixFiller)2 SwitchDecider (org.eclipse.elk.alg.layered.intermediate.greedyswitch.SwitchDecider)2 ArrayList (java.util.ArrayList)1 LayerSweepTypeDecider (org.eclipse.elk.alg.layered.p3order.LayerSweepTypeDecider)1 Ignore (org.junit.Ignore)1