@Test public void testEdgeOnlyTransformation() throws Exception { FlinkAsciiGraphLoader loader = getLoaderFromString(testGraphString); LogicalGraph original = loader.getLogicalGraphByVariable("g0"); LogicalGraph expected = loader.getLogicalGraphByVariable("g04"); LogicalGraph result = original.transformEdges(TransformationTest::transformEdge); collectAndAssertTrue(result.equalsByData(expected)); }
@Test public void testGraphHeadOnlyTransformation() throws Exception { FlinkAsciiGraphLoader loader = getLoaderFromString(testGraphString); LogicalGraph original = loader.getLogicalGraphByVariable("g0"); LogicalGraph expected = loader.getLogicalGraphByVariable("g02"); LogicalGraph result = original.transformGraphHead(TransformationTest::transformGraphHead); collectAndAssertTrue(result.equalsByData(expected)); }
@Test public void testVertexOnlyTransformation() throws Exception { FlinkAsciiGraphLoader loader = getLoaderFromString(testGraphString); LogicalGraph original = loader.getLogicalGraphByVariable("g0"); LogicalGraph expected = loader.getLogicalGraphByVariable("g03"); LogicalGraph result = original.transformVertices(TransformationTest::transformVertex); collectAndAssertTrue(result.equalsByData(expected)); }
/** * Test getting the database graph from the loader. * This test will create a loader containing a single graph and check if the database graph * is equal to that graph, i.e. if the graph head label was set correctly. * * @throws Exception if execute fails. */ @Test public void testGetLogicalGraph() throws Exception { FlinkAsciiGraphLoader loader = getLoaderFromString("expected:" + GradoopConstants.DB_GRAPH_LABEL + "[" + "(v1:TestVertex)-[e1:TestEdge]->(v2:TestVertex)" + "]"); LogicalGraph databaseGraph = loader.getLogicalGraph(); LogicalGraph expectedGraph = loader.getLogicalGraphByVariable("expected"); collectAndAssertTrue(expectedGraph.equalsByData(databaseGraph)); }
/** * Test using multiple vertex aggregation functions in one call. * * @throws Exception if the execution or IO fails. */ @Test public void testSingleGraphWithMultipleVertexAggregationFunctions() throws Exception { LogicalGraph graph = getSocialNetworkLoader().getLogicalGraph(); SumVertexProperty sumVertexProperty = new SumVertexProperty("age"); MaxVertexProperty maxVertexProperty = new MaxVertexProperty("age"); LogicalGraph expected = graph.aggregate(sumVertexProperty).aggregate(maxVertexProperty); LogicalGraph output = graph.aggregate(sumVertexProperty, maxVertexProperty); collectAndAssertTrue(expected.equalsByData(output)); }
/** * Test using multiple edge aggregation functions in one call. * * @throws Exception if the execution or IO fails. */ @Test public void testSingleGraphWithMultipleEdgeAggregationFunctions() throws Exception { LogicalGraph graph = getSocialNetworkLoader().getLogicalGraph(); SumEdgeProperty sumEdgeProperty = new SumEdgeProperty("since"); MaxEdgeProperty maxEdgeProperty = new MaxEdgeProperty("since"); LogicalGraph expected = graph.aggregate(sumEdgeProperty).aggregate(maxEdgeProperty); LogicalGraph output = graph.aggregate(sumEdgeProperty, maxEdgeProperty); collectAndAssertTrue(expected.equalsByData(output)); }
/** * Test using multiple element aggregation functions in one call. * * @throws Exception if the execution or IO fails. */ @Test public void testSingleGraphWithMultipleElementAggregationFunctions() throws Exception { LogicalGraph graph = getSocialNetworkLoader().getLogicalGraph(); SumProperty sumProperty = new SumProperty("since"); MaxProperty maxProperty = new MaxProperty("since"); LogicalGraph expected = graph.aggregate(sumProperty).aggregate(maxProperty); LogicalGraph output = graph.aggregate(sumProperty, maxProperty); collectAndAssertTrue(expected.equalsByData(output)); }
@Test public void emptyvertexAndEmptyToEmptyvertex() throws Exception { FlinkAsciiGraphLoader loader = getLoaderFromString("emptyVertex:G {emptyVertex : \"graph\"}[()]" + "empty:G[]"); LogicalGraph searchGraph = loader.getLogicalGraphByVariable("emptyVertex"); LogicalGraph patternGraph = loader.getLogicalGraphByVariable("empty"); VertexFusion f = new VertexFusion(); LogicalGraph output = f.execute(searchGraph, patternGraph); LogicalGraph expected = loader.getLogicalGraphByVariable("emptyVertex"); collectAndAssertTrue(output.equalsByData(expected)); if (deepSearch) { collectAndAssertTrue(VertexFusionUtils.myInducedEdgeSubgraphForFusion(searchGraph, expected) .equalsByElementIds(VertexFusionUtils.myInducedEdgeSubgraphForFusion(expected, searchGraph))); } }
@Test public void emptyAndEmptyToEmpty() throws Exception { FlinkAsciiGraphLoader loader = getLoaderFromString("empty:G[]"); LogicalGraph searchGraph = loader.getLogicalGraphByVariable("empty"); LogicalGraph patternGraph = loader.getLogicalGraphByVariable("empty"); VertexFusion f = new VertexFusion(); LogicalGraph output = f.execute(searchGraph, patternGraph); LogicalGraph expected = loader.getLogicalGraphByVariable("empty"); collectAndAssertTrue(output.equalsByData(expected)); if (deepSearch) { collectAndAssertTrue(VertexFusionUtils.myInducedEdgeSubgraphForFusion(searchGraph, expected) .equalsByElementIds(VertexFusionUtils.myInducedEdgeSubgraphForFusion(expected, searchGraph))); } }
/** * Test using multiple aggregation functions in one call on an empty graph. * * @throws Exception if the execution or IO fails. */ @Test public void testEmptySingleGraphWithMultipleAggregationFunctions() throws Exception { LogicalGraph graph = getLoaderFromString("g[]").getLogicalGraphByVariable("g"); VertexCount vertexCount = new VertexCount(); Count count = new Count(); MinEdgeProperty minEdgeProperty = new MinEdgeProperty(PROPERTY); LogicalGraph expected = graph.aggregate(vertexCount) .aggregate(minEdgeProperty) .aggregate(count); LogicalGraph output = graph.aggregate(vertexCount, minEdgeProperty, count); collectAndAssertTrue(expected.equalsByData(output)); } }
@Test public void abEdgeWithBetaAndEmptyToAbedgeWithBeta() throws Exception { FlinkAsciiGraphLoader loader = getLoaderFromString( "ab_edgeWithBeta:G {ab_edgeWithBeta : \"graph\"}[" + "(a:A {atype : \"avalue\"})-[beta:BetaEdge {betatype : \"betavalue\"}]->(b:B {btype : " + "\"bvalue\"}) " + "]" + "" + "empty:G[]"); LogicalGraph searchGraph = loader.getLogicalGraphByVariable("ab_edgeWithBeta"); LogicalGraph patternGraph = loader.getLogicalGraphByVariable("empty"); VertexFusion f = new VertexFusion(); LogicalGraph output = f.execute(searchGraph, patternGraph); LogicalGraph expected = loader.getLogicalGraphByVariable("ab_edgeWithBeta"); collectAndAssertTrue(output.equalsByData(expected)); if (deepSearch) { collectAndAssertTrue(VertexFusionUtils.myInducedEdgeSubgraphForFusion(searchGraph, expected) .equalsByElementIds(VertexFusionUtils.myInducedEdgeSubgraphForFusion(expected, searchGraph))); } }
@Test public void emptyvertexAndGraphwithaToEmptyvertex() throws Exception { FlinkAsciiGraphLoader loader = getLoaderFromString( "emptyVertex:G {emptyVertex : \"graph\"}[()]" + "graphWithA:G {graphWithA : \"graph\"}[(a:A {atype : \"avalue\"})]"); LogicalGraph searchGraph = loader.getLogicalGraphByVariable("emptyVertex"); LogicalGraph patternGraph = loader.getLogicalGraphByVariable("graphWithA"); VertexFusion f = new VertexFusion(); LogicalGraph output = f.execute(searchGraph, patternGraph); LogicalGraph expected = loader.getLogicalGraphByVariable("emptyVertex"); collectAndAssertTrue(output.equalsByData(expected)); if (deepSearch) { collectAndAssertTrue(VertexFusionUtils.myInducedEdgeSubgraphForFusion(searchGraph, expected) .equalsByElementIds(VertexFusionUtils.myInducedEdgeSubgraphForFusion(expected, searchGraph))); } }
@Test public void emptyvertexAndEmptyvertexToSingleInside() throws Exception { FlinkAsciiGraphLoader loader = getLoaderFromString( "emptyVertex:G {emptyVertex : \"graph\"}[()]" + "singleInside:G {emptyVertex : \"graph\"}[(u:G {emptyVertex : \"graph\"})]"); LogicalGraph searchGraph = loader.getLogicalGraphByVariable("emptyVertex"); LogicalGraph patternGraph = loader.getLogicalGraphByVariable("emptyVertex"); VertexFusion f = new VertexFusion(); LogicalGraph output = f.execute(searchGraph, patternGraph); LogicalGraph expected = loader.getLogicalGraphByVariable("singleInside"); collectAndAssertTrue(output.equalsByData(expected)); if (deepSearch) { collectAndAssertTrue(VertexFusionUtils.myInducedEdgeSubgraphForFusion(searchGraph, expected) .equalsByElementIds(VertexFusionUtils.myInducedEdgeSubgraphForFusion(expected, searchGraph))); } }
@Test public void emptyAndEmptyvertexToEmpty() throws Exception { FlinkAsciiGraphLoader loader = getLoaderFromString("empty:G[]" + "emptyVertex:G {emptyVertex : \"graph\"}[()]"); LogicalGraph searchGraph = loader.getLogicalGraphByVariable("empty"); LogicalGraph patternGraph = loader.getLogicalGraphByVariable("emptyVertex"); VertexFusion f = new VertexFusion(); LogicalGraph output = f.execute(searchGraph, patternGraph); LogicalGraph expected = loader.getLogicalGraphByVariable("empty"); collectAndAssertTrue(output.equalsByData(expected)); if (deepSearch) { collectAndAssertTrue(VertexFusionUtils.myInducedEdgeSubgraphForFusion(searchGraph, expected) .equalsByElementIds(VertexFusionUtils.myInducedEdgeSubgraphForFusion(expected, searchGraph))); } }
@Test public void graphwithaAndEmptyToGraphwitha() throws Exception { FlinkAsciiGraphLoader loader = getLoaderFromString( "graphWithA:G {graphWithA : \"graph\"}[(a:A {atype : \"avalue\"})]" + "empty:G[]"); LogicalGraph searchGraph = loader.getLogicalGraphByVariable("graphWithA"); LogicalGraph patternGraph = loader.getLogicalGraphByVariable("empty"); VertexFusion f = new VertexFusion(); LogicalGraph output = f.execute(searchGraph, patternGraph); LogicalGraph expected = loader.getLogicalGraphByVariable("graphWithA"); collectAndAssertTrue(output.equalsByData(expected)); if (deepSearch) { collectAndAssertTrue(VertexFusionUtils.myInducedEdgeSubgraphForFusion(searchGraph, expected) .equalsByElementIds(VertexFusionUtils.myInducedEdgeSubgraphForFusion(expected, searchGraph))); } }
@Test public void abedgeWithBetaAndEmptyVertexToAbedgeWithBeta() throws Exception { FlinkAsciiGraphLoader loader = getLoaderFromString( "ab_edgeWithBeta:G {ab_edgeWithBeta : \"graph\"}[" + "(a:A {atype : \"avalue\"})-[beta:BetaEdge {betatype : \"betavalue\"}]->(b:B {btype : " + "\"bvalue\"}) " + "]" + "" + "emptyVertex:G {emptyVertex : \"graph\"}[()]"); LogicalGraph searchGraph = loader.getLogicalGraphByVariable("ab_edgeWithBeta"); LogicalGraph patternGraph = loader.getLogicalGraphByVariable("emptyVertex"); VertexFusion f = new VertexFusion(); LogicalGraph output = f.execute(searchGraph, patternGraph); LogicalGraph expected = loader.getLogicalGraphByVariable("ab_edgeWithBeta"); collectAndAssertTrue(output.equalsByData(expected)); if (deepSearch) { collectAndAssertTrue(VertexFusionUtils.myInducedEdgeSubgraphForFusion(searchGraph, expected) .equalsByElementIds(VertexFusionUtils.myInducedEdgeSubgraphForFusion(expected, searchGraph))); } }
@Test public void graphwithaAndGraphwithaToAgraphlabels() throws Exception { FlinkAsciiGraphLoader loader = getLoaderFromString( "graphWithA:G {graphWithA : \"graph\"}[(a:A {atype : \"avalue\"})]" + "aGraphLabels:G {graphWithA : \"graph\"}[(:G {graphWithA : \"graph\"})]"); LogicalGraph searchGraph = loader.getLogicalGraphByVariable("graphWithA"); LogicalGraph patternGraph = loader.getLogicalGraphByVariable("graphWithA"); VertexFusion f = new VertexFusion(); LogicalGraph output = f.execute(searchGraph, patternGraph); LogicalGraph expected = loader.getLogicalGraphByVariable("aGraphLabels"); collectAndAssertTrue(output.equalsByData(expected)); if (deepSearch) { collectAndAssertTrue(VertexFusionUtils.myInducedEdgeSubgraphForFusion(searchGraph, expected) .equalsByElementIds(VertexFusionUtils.myInducedEdgeSubgraphForFusion(expected, searchGraph))); } }
@Test public void graphwithaAndEmptyvertexToGraphwitha() throws Exception { FlinkAsciiGraphLoader loader = getLoaderFromString( "graphWithA:G {graphWithA : \"graph\"}[(a:A {atype : \"avalue\"})]" + "emptyVertex:G {emptyVertex : \"graph\"}[()]"); LogicalGraph searchGraph = loader.getLogicalGraphByVariable("graphWithA"); LogicalGraph patternGraph = loader.getLogicalGraphByVariable("emptyVertex"); VertexFusion f = new VertexFusion(); LogicalGraph output = f.execute(searchGraph, patternGraph); LogicalGraph expected = loader.getLogicalGraphByVariable("graphWithA"); collectAndAssertTrue(output.equalsByData(expected)); if (deepSearch) { collectAndAssertTrue(VertexFusionUtils.myInducedEdgeSubgraphForFusion(searchGraph, expected) .equalsByElementIds(VertexFusionUtils.myInducedEdgeSubgraphForFusion(expected, searchGraph))); } }
@Test public void abedgewithalphaAndEmptyToAbedgeWithAlpha() throws Exception { FlinkAsciiGraphLoader loader = getLoaderFromString( "ab_edgeWithAlpha:G {ab_edgeWithAlpha : \"graph\"}[" + "(a:A {atype : \"avalue\"})-[alpha:AlphaEdge {alphatype : \"alphavalue\"}]->(b:B {btype :" + " \"bvalue\"}) " + "]" + "empty:G[]"); LogicalGraph searchGraph = loader.getLogicalGraphByVariable("ab_edgeWithAlpha"); LogicalGraph patternGraph = loader.getLogicalGraphByVariable("empty"); VertexFusion f = new VertexFusion(); LogicalGraph output = f.execute(searchGraph, patternGraph); LogicalGraph expected = loader.getLogicalGraphByVariable("ab_edgeWithAlpha"); collectAndAssertTrue(output.equalsByData(expected)); if (deepSearch) { collectAndAssertTrue(VertexFusionUtils.myInducedEdgeSubgraphForFusion(searchGraph, expected) .equalsByElementIds(VertexFusionUtils.myInducedEdgeSubgraphForFusion(expected, searchGraph))); } }
@Test public void abEdgeWithAlphaAndEmptyVerteToAbedgeWithAlpha() throws Exception { FlinkAsciiGraphLoader loader = getLoaderFromString( "ab_edgeWithAlpha:G {ab_edgeWithAlpha : \"graph\"}[" + "(a:A {atype : \"avalue\"})-[alpha:AlphaEdge {alphatype : \"alphavalue\"}]->(b:B {btype :" + " \"bvalue\"}) ]" + "emptyVertex:G {emptyVertex : \"graph\"}[()]"); LogicalGraph searchGraph = loader.getLogicalGraphByVariable("ab_edgeWithAlpha"); LogicalGraph patternGraph = loader.getLogicalGraphByVariable("emptyVertex"); VertexFusion f = new VertexFusion(); LogicalGraph output = f.execute(searchGraph, patternGraph); LogicalGraph expected = loader.getLogicalGraphByVariable("ab_edgeWithAlpha"); collectAndAssertTrue(output.equalsByData(expected)); if (deepSearch) { collectAndAssertTrue(VertexFusionUtils.myInducedEdgeSubgraphForFusion(searchGraph, expected) .equalsByElementIds(VertexFusionUtils.myInducedEdgeSubgraphForFusion(expected, searchGraph))); } }