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));
}
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));
}
}
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());
}
}
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());
}
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());
}
Aggregations