@Test public void testSimpleNoCrossing() { final GraphLayerImpl top = new GraphLayerImpl(0); top.addNewVertex("A"); top.addNewVertex("B"); final GraphLayerImpl bottom = new GraphLayerImpl(1); bottom.addNewVertex("C"); bottom.addNewVertex("D"); final List<OrientedEdge> edges = new ArrayList<>(); edges.add(new OrientedEdgeImpl("A", "C")); edges.add(new OrientedEdgeImpl("B", "D")); final LayerCrossingCount cc = new LayerCrossingCount(); final int result = cc.crossing(edges, top, bottom); assertEquals(0, result); }
@Test public void testSimpleCrossing() { final GraphLayerImpl top = new GraphLayerImpl(0); top.addNewVertex("A"); top.addNewVertex("B"); final GraphLayerImpl bottom = new GraphLayerImpl(1); bottom.addNewVertex("C"); bottom.addNewVertex("D"); final List<OrientedEdge> edges = new ArrayList<>(); edges.add(new OrientedEdgeImpl("A", "D")); edges.add(new OrientedEdgeImpl("B", "C")); final LayerCrossingCount cc = new LayerCrossingCount(); final int result = cc.crossing(edges, top, bottom); assertEquals(1, result); }
@Test public void testK33GraphCrossing() { /* * k33 - every vertex from layer 1 connected to every vertex in layer 2 */ final GraphLayerImpl top = new GraphLayerImpl(0); top.addNewVertex("A"); top.addNewVertex("B"); top.addNewVertex("C"); final GraphLayerImpl bottom = new GraphLayerImpl(1); bottom.addNewVertex("D"); bottom.addNewVertex("E"); bottom.addNewVertex("F"); final List<OrientedEdge> edges = new ArrayList<>(); edges.add(new OrientedEdgeImpl("A", "D")); edges.add(new OrientedEdgeImpl("A", "E")); edges.add(new OrientedEdgeImpl("A", "F")); edges.add(new OrientedEdgeImpl("B", "D")); edges.add(new OrientedEdgeImpl("B", "E")); edges.add(new OrientedEdgeImpl("B", "F")); edges.add(new OrientedEdgeImpl("C", "D")); edges.add(new OrientedEdgeImpl("C", "E")); edges.add(new OrientedEdgeImpl("C", "F")); final LayerCrossingCount cc = new LayerCrossingCount(); final int result = cc.crossing(edges, top, bottom); assertEquals(9, result); }
edges.add(new OrientedEdgeImpl("F", "B")); final LayerCrossingCount cc = new LayerCrossingCount(); final int result = cc.crossing(edges, top, bottom);
@Test public void test2CrossingsUnevenLayers() { /* * 2 crossings * A B * /\\ / * / \ -------+ -- * / /-- +-----/ \ * / / \ \ * D E F * */ final GraphLayerImpl top = new GraphLayerImpl(0); top.addNewVertex("A"); top.addNewVertex("B"); final GraphLayerImpl bottom = new GraphLayerImpl(1); bottom.addNewVertex("D"); bottom.addNewVertex("E"); bottom.addNewVertex("F"); final List<OrientedEdge> edges = new ArrayList<>(); edges.add(new OrientedEdgeImpl("A", "D")); edges.add(new OrientedEdgeImpl("E", "A")); edges.add(new OrientedEdgeImpl("A", "F")); edges.add(new OrientedEdgeImpl("D", "B")); final LayerCrossingCount cc = new LayerCrossingCount(); final int result = cc.crossing(edges, top, bottom); assertEquals(2, result); }
edges.add(new OrientedEdgeImpl("D", "H")); final LayerCrossingCount cc = new LayerCrossingCount(); final int result = cc.crossing(edges, top, bottom);
@Test public void test3CrossingsInMiddle() { /* * 3 crossings * A B C * \ | / * X * / | \ * D E F */ final GraphLayerImpl top = new GraphLayerImpl(0); top.addNewVertex("A"); top.addNewVertex("B"); top.addNewVertex("C"); final GraphLayerImpl bottom = new GraphLayerImpl(1); bottom.addNewVertex("D"); bottom.addNewVertex("E"); bottom.addNewVertex("F"); final List<OrientedEdge> edges = new ArrayList<>(); edges.add(new OrientedEdgeImpl("A", "F")); edges.add(new OrientedEdgeImpl("B", "E")); edges.add(new OrientedEdgeImpl("C", "D")); final LayerCrossingCount cc = new LayerCrossingCount(); final int result = cc.crossing(edges, top, bottom); assertEquals(3, result); }
@Test public void test2Crossings() { /* * 2 crossings * A B C * \ | / * x x * / \| * D E F * */ final GraphLayerImpl top = new GraphLayerImpl(0); top.addNewVertex("A"); top.addNewVertex("B"); top.addNewVertex("C"); final GraphLayerImpl bottom = new GraphLayerImpl(1); bottom.addNewVertex("D"); bottom.addNewVertex("E"); bottom.addNewVertex("F"); final List<OrientedEdge> edges = new ArrayList<>(); edges.add(new OrientedEdgeImpl("A", "E")); edges.add(new OrientedEdgeImpl("B", "E")); edges.add(new OrientedEdgeImpl("C", "D")); final LayerCrossingCount cc = new LayerCrossingCount(); final int result = cc.crossing(edges, top, bottom); assertEquals(2, result); }
@Test public void testTwoSeparateTrees() { final LayeredGraph graph = new LayeredGraph(Graphs.TwoSeparateTreesFromRoots); final ReverseEdgesCycleBreaker s01 = new ReverseEdgesCycleBreaker(); s01.breakCycle(graph); final LongestPathVertexLayerer s02 = new LongestPathVertexLayerer(); s02.createLayers(graph); final MedianVertexLayerPositioning vertexPositioning = new MedianVertexLayerPositioning(); final LayerCrossingCount crossingCount = new LayerCrossingCount(); final VerticesTransposer verticesTransposer = new VerticesTransposer(crossingCount); final DefaultVertexOrdering s03 = new DefaultVertexOrdering(vertexPositioning, crossingCount, verticesTransposer); s03.orderVertices(graph); Assertions.assertThat(graph.getLayers()) .as("TwoSeparateTreesFromRoots graph vertices should be placed into three layers") .hasSize(3); }
@Test public void testFullGraph() { final LayeredGraph graph = new LayeredGraph(Graphs.Full); final ReverseEdgesCycleBreaker s01 = new ReverseEdgesCycleBreaker(); s01.breakCycle(graph); final LongestPathVertexLayerer s02 = new LongestPathVertexLayerer(); s02.createLayers(graph); final MedianVertexLayerPositioning vertexPositioning = new MedianVertexLayerPositioning(); final LayerCrossingCount crossingCount = new LayerCrossingCount(); final VerticesTransposer verticesTransposer = new VerticesTransposer(crossingCount); final DefaultVertexOrdering s03 = new DefaultVertexOrdering(vertexPositioning, crossingCount, verticesTransposer); s03.orderVertices(graph); Assertions.assertThat(graph.getLayers()) .as("Full graph vertices should be in 4 layers") .hasSize(4); } }
@Test public void test1Crossing() { /* * 1 crossing * A B C * \ / * X * / \ * D E F */ final GraphLayerImpl top = new GraphLayerImpl(0); top.addNewVertex("A"); top.addNewVertex("B"); top.addNewVertex("C"); final GraphLayerImpl bottom = new GraphLayerImpl(1); bottom.addNewVertex("D"); bottom.addNewVertex("E"); bottom.addNewVertex("F"); final List<OrientedEdge> edges = new ArrayList<>(); edges.add(new OrientedEdgeImpl("A", "F")); edges.add(new OrientedEdgeImpl("D", "C")); final LayerCrossingCount cc = new LayerCrossingCount(); final int result = cc.crossing(edges, top, bottom); assertEquals(1, result); }
@Test public void testSimpleReorder() { final LayeredGraph graph = new LayeredGraph(); graph.addEdge("A", "D"); graph.addEdge("B", "C"); final GraphLayerImpl layer01 = new GraphLayerImpl(1); layer01.addNewVertex("A"); layer01.addNewVertex("B"); graph.getLayers().add(layer01); final GraphLayerImpl layer02 = new GraphLayerImpl(2); layer02.addNewVertex("C"); layer02.addNewVertex("D"); graph.getLayers().add(layer02); final MedianVertexLayerPositioning median = new MedianVertexLayerPositioning(); final LayerCrossingCount layersCount = new LayerCrossingCount(); final VerticesTransposer verticesTransposer = new VerticesTransposer(layersCount); final DefaultVertexOrdering ordering = new DefaultVertexOrdering(median, layersCount, verticesTransposer); ordering.orderVertices(graph); Assertions.assertThat(graph.getLayers().get(0).getVertices()) .extracting(Vertex::getId) .containsExactly("A", "B"); Assertions.assertThat(graph.getLayers().get(1).getVertices()) .extracting(Vertex::getId) .containsExactly("D", "C"); }
@Test public void testRealCase1() { final LayeredGraph graph = new LayeredGraph(Graphs.REAL_CASE_1); final ReverseEdgesCycleBreaker s01 = new ReverseEdgesCycleBreaker(); s01.breakCycle(graph); final LongestPathVertexLayerer s02 = new LongestPathVertexLayerer(); s02.createLayers(graph); final MedianVertexLayerPositioning vertexPositioning = new MedianVertexLayerPositioning(); final LayerCrossingCount crossingCount = new LayerCrossingCount(); final VerticesTransposer verticesTransposer = new VerticesTransposer(crossingCount); final DefaultVertexOrdering s03 = new DefaultVertexOrdering(vertexPositioning, crossingCount, verticesTransposer); s03.orderVertices(graph); Assert.assertEquals(6, graph.getLayers().size()); final DefaultVertexPositioning defaultVertexPositioning = new DefaultVertexPositioning(); defaultVertexPositioning.calculateVerticesPositions(graph, LayerArrangement.TopDown); }
final LayerCrossingCount layersCount = new LayerCrossingCount(); final VerticesTransposer verticesTransposer = new VerticesTransposer(layersCount); final DefaultVertexOrdering ordering = new DefaultVertexOrdering(median,