/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.flink.graph.bipartite; import org.apache.flink.api.java.DataSet; import org.apache.flink.api.java.ExecutionEnvironment; import org.apache.flink.api.java.tuple.Tuple2; import org.apache.flink.graph.Graph; import org.apache.flink.graph.Vertex; import org.apache.flink.test.util.TestBaseUtils; import org.junit.Test; import java.util.Arrays; import static org.apache.flink.graph.generator.TestUtils.compareGraph; import static org.junit.Assert.assertEquals; public class BipartiteGraphTest { @Test public void testGetTopVertices() throws Exception { BipartiteGraph<Integer, Integer, String, String, String> bipartiteGraph = createBipartiteGraph(); assertEquals( Arrays.asList( new Vertex<>(4, "top4"), new Vertex<>(5, "top5"), new Vertex<>(6, "top6")), bipartiteGraph.getTopVertices().collect()); } @Test public void testGetBottomVertices() throws Exception { BipartiteGraph<Integer, Integer, String, String, String> bipartiteGraph = createBipartiteGraph(); assertEquals( Arrays.asList( new Vertex<>(1, "bottom1"), new Vertex<>(2, "bottom2"), new Vertex<>(3, "bottom3")), bipartiteGraph.getBottomVertices().collect()); } @Test public void testSimpleTopProjection() throws Exception { BipartiteGraph<Integer, Integer, String, String, String> bipartiteGraph = createBipartiteGraph(); Graph<Integer, String, Tuple2<String, String>> graph = bipartiteGraph.projectionTopSimple(); compareGraph(graph, "4; 5; 6", "5,4; 4,5; 5,6; 6,5"); String expected = "(5,4,(5-1,4-1))\n" + "(4,5,(4-1,5-1))\n" + "(6,5,(6-2,5-2))\n" + "(5,6,(5-2,6-2))"; TestBaseUtils.compareResultAsText(graph.getEdges().collect(), expected); } @Test public void testSimpleBottomProjection() throws Exception { BipartiteGraph<Integer, Integer, String, String, String> bipartiteGraph = createBipartiteGraph(); Graph<Integer, String, Tuple2<String, String>> graph = bipartiteGraph.projectionBottomSimple(); compareGraph(graph, "1; 2; 3", "1,2; 2,1; 2,3; 3,2"); String expected = "(3,2,(6-3,6-2))\n" + "(2,3,(6-2,6-3))\n" + "(2,1,(5-2,5-1))\n" + "(1,2,(5-1,5-2))"; TestBaseUtils.compareResultAsText(graph.getEdges().collect(), expected); } @Test public void testFullTopProjection() throws Exception { BipartiteGraph<Integer, Integer, String, String, String> bipartiteGraph = createBipartiteGraph(); Graph<Integer, String, Projection<Integer, String, String, String>> graph = bipartiteGraph.projectionTopFull(); graph.getEdges().print(); compareGraph(graph, "4; 5; 6", "5,4; 4,5; 5,6; 6,5"); String expected = "(5,4,(1,bottom1,top5,top4,5-1,4-1))\n" + "(4,5,(1,bottom1,top4,top5,4-1,5-1))\n" + "(6,5,(2,bottom2,top6,top5,6-2,5-2))\n" + "(5,6,(2,bottom2,top5,top6,5-2,6-2))"; TestBaseUtils.compareResultAsText(graph.getEdges().collect(), expected); } @Test public void testFullBottomProjection() throws Exception { BipartiteGraph<Integer, Integer, String, String, String> bipartiteGraph = createBipartiteGraph(); Graph<Integer, String, Projection<Integer, String, String, String>> graph = bipartiteGraph.projectionBottomFull(); compareGraph(graph, "1; 2; 3", "1,2; 2,1; 2,3; 3,2"); String expected = "(3,2,(6,top6,bottom3,bottom2,6-3,6-2))\n" + "(2,3,(6,top6,bottom2,bottom3,6-2,6-3))\n" + "(2,1,(5,top5,bottom2,bottom1,5-2,5-1))\n" + "(1,2,(5,top5,bottom1,bottom2,5-1,5-2))"; TestBaseUtils.compareResultAsText(graph.getEdges().collect(), expected); } private BipartiteGraph<Integer, Integer, String, String, String> createBipartiteGraph() { ExecutionEnvironment executionEnvironment = ExecutionEnvironment.createCollectionsEnvironment(); DataSet<Vertex<Integer, String>> topVertices = executionEnvironment.fromCollection(Arrays.asList( new Vertex<>(4, "top4"), new Vertex<>(5, "top5"), new Vertex<>(6, "top6") )); DataSet<Vertex<Integer, String>> bottomVertices = executionEnvironment.fromCollection(Arrays.asList( new Vertex<>(1, "bottom1"), new Vertex<>(2, "bottom2"), new Vertex<>(3, "bottom3") )); DataSet<BipartiteEdge<Integer, Integer, String>> edges = executionEnvironment.fromCollection(Arrays.asList( new BipartiteEdge<>(4, 1, "4-1"), new BipartiteEdge<>(5, 1, "5-1"), new BipartiteEdge<>(5, 2, "5-2"), new BipartiteEdge<>(6, 2, "6-2"), new BipartiteEdge<>(6, 3, "6-3") )); return BipartiteGraph.fromDataSet(topVertices, bottomVertices, edges, executionEnvironment); } }