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