Search in sources :

Example 11 with GraphInfoHolder

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

the class CrossingsCounterTest method countCrossingsBetweenLayers_crossFormedMultipleEdgesBetweenSameNodes.

/**
 * Constructs a cross formed graph with two edges between the corners
 *
 * <pre>
 * *    *
 *  \\//
 *  //\\
 * *    *
 * .
 * </pre>
 */
@Test
public void countCrossingsBetweenLayers_crossFormedMultipleEdgesBetweenSameNodes() {
    Layer leftLayer = makeLayer(graph);
    Layer rightLayer = makeLayer(graph);
    LNode topLeft = addNodeToLayer(leftLayer);
    LNode bottomLeft = addNodeToLayer(leftLayer);
    LNode topRight = addNodeToLayer(rightLayer);
    LNode bottomRight = addNodeToLayer(rightLayer);
    LPort topLeftTopPort = addPortOnSide(topLeft, PortSide.EAST);
    LPort topLeftBottomPort = addPortOnSide(topLeft, PortSide.EAST);
    LPort bottomRightBottomPort = addPortOnSide(bottomRight, PortSide.WEST);
    LPort bottomRightTopPort = addPortOnSide(bottomRight, PortSide.WEST);
    addEdgeBetweenPorts(topLeftTopPort, bottomRightTopPort);
    addEdgeBetweenPorts(topLeftBottomPort, bottomRightBottomPort);
    LPort bottomLeftTopPort = addPortOnSide(bottomLeft, PortSide.EAST);
    LPort bottomLeftBottomPort = addPortOnSide(bottomLeft, PortSide.EAST);
    LPort topRightBottomPort = addPortOnSide(topRight, PortSide.WEST);
    LPort topRightTopPort = addPortOnSide(topRight, PortSide.WEST);
    addEdgeBetweenPorts(bottomLeftTopPort, topRightTopPort);
    addEdgeBetweenPorts(bottomLeftBottomPort, topRightBottomPort);
    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(4));
}
Also used : LPort(org.eclipse.elk.alg.layered.graph.LPort) LNode(org.eclipse.elk.alg.layered.graph.LNode) CrossingsCounter(org.eclipse.elk.alg.layered.p3order.counting.CrossingsCounter) GraphInfoHolder(org.eclipse.elk.alg.layered.p3order.GraphInfoHolder) Layer(org.eclipse.elk.alg.layered.graph.Layer) Test(org.junit.Test)

Example 12 with GraphInfoHolder

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

the class SwitchDeciderTest method switchingDummyNodesNotifiesPortSwitch.

/**
 * <pre>
 * ____
 * | *p\ /-*
 * |  | x
 * | *p/ \-*
 * |__|
 * @throws Exception
 * </pre>
 */
@Test
public void switchingDummyNodesNotifiesPortSwitch() throws Exception {
    LNode leftNode = addNodeToLayer(makeLayer());
    LNode[] rightNodes = addNodesToLayer(2, makeLayer());
    LPort[] leftPorts = addPortsOnSide(2, leftNode, PortSide.EAST);
    LGraph nestedGraph = nestedGraph(leftNode);
    Layer nestedLayer = makeLayer(nestedGraph);
    LNode[] dummies = addExternalPortDummiesToLayer(nestedLayer, leftPorts);
    eastWestEdgeFromTo(leftPorts[0], rightNodes[1]);
    eastWestEdgeFromTo(leftPorts[1], rightNodes[0]);
    CrossingMatrixFiller crossingMatrixFiller = new CrossingMatrixFiller(greedyType, nestedGraph.toNodeArray(), 0, CrossingCountSide.EAST);
    GraphInfoHolder parentGraphData = new GraphInfoHolder(graph, greedyType, new ArrayList<>());
    GraphInfoHolder graphData = new GraphInfoHolder(nestedGraph, greedyType, Lists.newArrayList(parentGraphData));
    SwitchDecider switchDecider = new SwitchDecider(0, nestedGraph.toNodeArray(), crossingMatrixFiller, new int[getNPorts(nestedGraph.toNodeArray())], graphData, false);
    if (greedyType == CrossMinType.TWO_SIDED_GREEDY_SWITCH) {
        assertTrue(switchDecider.doesSwitchReduceCrossings(0, 1));
        switchDecider.notifyOfSwitch(dummies[0], dummies[1]);
        assertFalse(switchDecider.doesSwitchReduceCrossings(0, 1));
    }
}
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) CrossingMatrixFiller(org.eclipse.elk.alg.layered.intermediate.greedyswitch.CrossingMatrixFiller) GraphInfoHolder(org.eclipse.elk.alg.layered.p3order.GraphInfoHolder) SwitchDecider(org.eclipse.elk.alg.layered.intermediate.greedyswitch.SwitchDecider) Layer(org.eclipse.elk.alg.layered.graph.Layer) Test(org.junit.Test)

Example 13 with GraphInfoHolder

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

the class LayerSweepCrossingMinimizerTest method moreRandomThanHierarchicalPaths_ShouldNotCrossHierarchy.

/**
 * <pre>
 *_____   _______
 *| *-+---p *\  |
 *|   |   | *-* |
 *|   |   |  x  |
 *|   |   | * | |
 *| *-+---+-*-*-+-*
 *|   |   |     |‚
 *|___|   |_____|
 * </pre>
 *
 * p is unconnected port.
 */
@Test
public void moreRandomThanHierarchicalPaths_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(2, makeLayer(nestedGraph));
    LNode[] rightDummies = addExternalPortDummiesToLayer(makeLayer(nestedGraph), rightOuterPorts);
    eastWestEdgeFromTo(leftDummies[0], leftInnerNodes[3]);
    eastWestEdgeFromTo(leftInnerNodes[0], rightInnerNodes[0]);
    eastWestEdgeFromTo(leftInnerNodes[1], rightInnerNodes[0]);
    eastWestEdgeFromTo(leftInnerNodes[1], rightInnerNodes[1]);
    eastWestEdgeFromTo(leftInnerNodes[2], rightInnerNodes[0]);
    eastWestEdgeFromTo(leftInnerNodes[3], rightInnerNodes[1]);
    eastWestEdgeFromTo(rightInnerNodes[1], rightDummies[0]);
    setOnAllGraphs(LayeredOptions.CROSSING_MINIMIZATION_HIERARCHICAL_SWEEPINESS, 0.0, nestedGraph);
    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 14 with GraphInfoHolder

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

the class LayerSweepTypeDeciderTest method allHierarchicalButMinusOne_StillReturnsBU.

/**
 * <pre>
 *   ____
 * *=|=*=|=*
 *   |___|
 *
 * </pre>
 */
@Test
public void allHierarchicalButMinusOne_StillReturnsBU() throws Exception {
    LNode leftNode = addNodeToLayer(makeLayer());
    LNode middleNode = addNodeToLayer(makeLayer());
    LNode rightNode = addNodeToLayer(makeLayer());
    LPort[] middlePortRight = addPortsOnSide(2, middleNode, PortSide.EAST);
    LPort[] middlePortLeft = addPortsOnSide(2, middleNode, PortSide.WEST);
    eastWestEdgeFromTo(leftNode, middlePortLeft[1]);
    eastWestEdgeFromTo(leftNode, middlePortLeft[0]);
    eastWestEdgeFromTo(middlePortRight[0], rightNode);
    eastWestEdgeFromTo(middlePortRight[1], rightNode);
    LGraph innerGraph = nestedGraph(middleNode);
    Layer[] layers = makeLayers(3, innerGraph);
    LNode[] leftInnerDummyNodes = addExternalPortDummiesToLayer(layers[2], middlePortRight);
    LNode node = addNodeToLayer(layers[1]);
    LNode[] rightInnerDummyNodes = addExternalPortDummiesToLayer(layers[0], middlePortLeft);
    eastWestEdgeFromTo(leftInnerDummyNodes[0], node);
    eastWestEdgeFromTo(leftInnerDummyNodes[1], node);
    eastWestEdgeFromTo(node, rightInnerDummyNodes[0]);
    eastWestEdgeFromTo(node, rightInnerDummyNodes[1]);
    graph.id = 0;
    innerGraph.id = 1;
    setOnAllGraphs(LayeredOptions.CROSSING_MINIMIZATION_HIERARCHICAL_SWEEPINESS, -1.0, graph);
    GraphInfoHolder gd = new GraphInfoHolder(innerGraph, CrossMinType.BARYCENTER, Arrays.asList(new GraphInfoHolder(graph, CrossMinType.BARYCENTER, null)));
    LayerSweepTypeDecider td = new LayerSweepTypeDecider(gd);
    IInitializable.init(Arrays.asList(td), innerGraph.toNodeArray());
    assertTrue(td.useBottomUp());
}
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) Layer(org.eclipse.elk.alg.layered.graph.Layer) LayerSweepTypeDecider(org.eclipse.elk.alg.layered.p3order.LayerSweepTypeDecider) Test(org.junit.Test)

Example 15 with GraphInfoHolder

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

the class LayerSweepTypeDeciderTest method portWithNoEdges_DoesNotCount.

/**
 * <pre>
 * _____
 * |p*=|=*
 * |___|
 *
 * </pre>
 */
@Test
public void portWithNoEdges_DoesNotCount() throws Exception {
    LNode middleNode = addNodeToLayer(makeLayer());
    LNode rightNode = addNodeToLayer(makeLayer());
    LPort[] middlePortRight = addPortsOnSide(2, middleNode, PortSide.EAST);
    eastWestEdgeFromTo(middlePortRight[0], rightNode);
    eastWestEdgeFromTo(middlePortRight[1], rightNode);
    LGraph innerGraph = nestedGraph(middleNode);
    Layer[] layers = makeLayers(2, innerGraph);
    LNode node = addNodeToLayer(layers[0]);
    LNode[] rightInnerDummyNodes = addExternalPortDummiesToLayer(layers[1], middlePortRight);
    eastWestEdgeFromTo(node, rightInnerDummyNodes[0]);
    eastWestEdgeFromTo(node, rightInnerDummyNodes[1]);
    addPortOnSide(node, PortSide.WEST);
    graph.id = 0;
    innerGraph.id = 1;
    setOnAllGraphs(LayeredOptions.CROSSING_MINIMIZATION_HIERARCHICAL_SWEEPINESS, -0.1, graph);
    GraphInfoHolder gd = new GraphInfoHolder(innerGraph, CrossMinType.BARYCENTER, Arrays.asList(new GraphInfoHolder(graph, CrossMinType.BARYCENTER, null)));
    assertTrue(gd.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) Layer(org.eclipse.elk.alg.layered.graph.Layer) 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