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