@Test public void testSameGraph() throws Exception { FlinkAsciiGraphLoader loader = getSocialNetworkLoader(); LogicalGraph g0 = loader.getLogicalGraphByVariable("g0"); LogicalGraph combination = g0.combine(g0); assertTrue("combining same graph failed", g0.equalsByElementIds(combination).collect().get(0)); }
@Test public void testNonOverlappingGraphs() throws Exception { FlinkAsciiGraphLoader loader = getSocialNetworkLoader(); loader.appendToDatabaseFromString("expected[" + "(alice)-[akb]->(bob)" + "(bob)-[bka]->(alice)" + "(eve)-[eka]->(alice)" + "(eve)-[ekb]->(bob)" + "(carol)-[ckd]->(dave)" + "(dave)-[dkc]->(carol)" + "(frank)-[fkc]->(carol)" + "(frank)-[fkd]->(dave)]" ); LogicalGraph g0 = loader.getLogicalGraphByVariable("g0"); LogicalGraph g1 = loader.getLogicalGraphByVariable("g1"); LogicalGraph expected = loader.getLogicalGraphByVariable("expected"); assertTrue("combining non overlapping graphs failed", expected.equalsByElementIds(g0.combine(g1)).collect().get(0)); assertTrue("combining switched non overlapping graphs failed", expected.equalsByElementIds(g1.combine(g0)).collect().get(0)); }
@Test public void testOverlappingGraphs() throws Exception { FlinkAsciiGraphLoader loader = getSocialNetworkLoader(); loader.appendToDatabaseFromString("expected[" + "(alice)-[akb]->(bob)" + "(bob)-[bka]->(alice)" + "(bob)-[bkc]->(carol)" + "(carol)-[ckb]->(bob)" + "(carol)-[ckd]->(dave)" + "(dave)-[dkc]->(carol)" + "(eve)-[eka]->(alice)" + "(eve)-[ekb]->(bob)]" ); LogicalGraph g0 = loader.getLogicalGraphByVariable("g0"); LogicalGraph g2 = loader.getLogicalGraphByVariable("g2"); LogicalGraph expected = loader.getLogicalGraphByVariable("expected"); assertTrue("combining overlapping graphs failed", expected.equalsByElementIds(g0.combine(g2)).collect().get(0)); assertTrue("combining switched overlapping graphs failed", expected.equalsByElementIds(g2.combine(g0)).collect().get(0)); }
@Test public void testAPIFunction() throws Exception { FlinkAsciiGraphLoader loader = getSocialNetworkLoader(); LogicalGraph input = loader .getLogicalGraphByVariable("g0") .combine(loader.getLogicalGraphByVariable("g1")) .combine(loader.getLogicalGraphByVariable("g2")); loader.appendToDatabaseFromString("expected[" + "(pL:Person {city : \"Leipzig\", count : 2L})" + "(pD:Person {city : \"Dresden\", count : 3L})" + "(pB:Person {city : \"Berlin\", count : 1L})" + "(pD)-[:knows {since : 2014, count : 2L}]->(pD)" + "(pD)-[:knows {since : 2013, count : 2L}]->(pL)" + "(pD)-[:knows {since : 2015, count : 1L}]->(pL)" + "(pL)-[:knows {since : 2014, count : 2L}]->(pL)" + "(pL)-[:knows {since : 2013, count : 1L}]->(pD)" + "(pB)-[:knows {since : 2015, count : 2L}]->(pD)" + "]"); LogicalGraph output = input.groupBy( Arrays.asList(Grouping.LABEL_SYMBOL, "city"), Arrays.asList(new Count("count")), Arrays.asList(Grouping.LABEL_SYMBOL, "since"), Arrays.asList(new Count("count")), getStrategy() ); collectAndAssertTrue( output.equalsByElementData(loader.getLogicalGraphByVariable("expected"))); }
Collection<Edge> resEdges = new HashSet<>(); LogicalGraph expected = g0.combine(g2);
overlap.writeTo(overlapSink, true); LogicalGraph workGraph = graph1.combine(graph2) .subgraph( v -> true,
@Test public void testDerivedOverlappingGraphs() throws Exception { FlinkAsciiGraphLoader loader = getLoaderFromString("g[(a {x: true, y: true}), (b {x: true, y: false})]"); LogicalGraph baseGraph = loader.getLogicalGraphByVariable("g"); LogicalGraph derivedGraph1 = baseGraph.vertexInducedSubgraph(v -> v.getPropertyValue("x").getBoolean()); LogicalGraph derivedGraph2 = baseGraph.vertexInducedSubgraph(v -> !v.getPropertyValue("y").getBoolean()); loader.appendToDatabaseFromString("expected[(a),(b)]"); LogicalGraph expected = loader.getLogicalGraphByVariable("expected"); collectAndAssertTrue(derivedGraph1.combine(derivedGraph2).equalsByElementIds(expected)); }
@Test public void testDerivedNonOverlappingGraphs() throws Exception { FlinkAsciiGraphLoader loader = getLoaderFromString("g[(a {x: true}), (b {x: false})]"); LogicalGraph baseGraph = loader.getLogicalGraphByVariable("g"); LogicalGraph derivedGraph1 = baseGraph.vertexInducedSubgraph(v -> v.getPropertyValue("x").getBoolean()); LogicalGraph derivedGraph2 = baseGraph.vertexInducedSubgraph(v -> !v.getPropertyValue("x").getBoolean()); loader.appendToDatabaseFromString("expected[(a),(b)]"); LogicalGraph expected = loader.getLogicalGraphByVariable("expected"); collectAndAssertTrue(derivedGraph1.combine(derivedGraph2).equalsByElementIds(expected)); }
@Test public void testSingleVertexProperty() throws Exception { FlinkAsciiGraphLoader loader = getSocialNetworkLoader(); LogicalGraph input = loader .getLogicalGraphByVariable("g0") .combine(loader.getLogicalGraphByVariable("g1")) .combine(loader.getLogicalGraphByVariable("g2")); loader.appendToDatabaseFromString("expected[" + "(leipzig {city : \"Leipzig\", count : 2L})" + "(dresden {city : \"Dresden\", count : 3L})" + "(berlin {city : \"Berlin\", count : 1L})" + "(dresden)-[{count : 2L}]->(dresden)" + "(dresden)-[{count : 3L}]->(leipzig)" + "(leipzig)-[{count : 2L}]->(leipzig)" + "(leipzig)-[{count : 1L}]->(dresden)" + "(berlin)-[{count : 2L}]->(dresden)" + "]"); LogicalGraph output = new GroupingBuilder() .addVertexGroupingKey("city") .addVertexAggregateFunction(new Count("count")) .addEdgeAggregateFunction(new Count("count")) .setStrategy(getStrategy()) .build() .execute(input); collectAndAssertTrue( output.equalsByElementData(loader.getLogicalGraphByVariable("expected"))); }
@Test public void testVertexLabelAndSingleEdgeProperty() throws Exception { FlinkAsciiGraphLoader loader = getSocialNetworkLoader(); LogicalGraph input = loader .getLogicalGraphByVariable("g0") .combine(loader.getLogicalGraphByVariable("g1")) .combine(loader.getLogicalGraphByVariable("g2")); loader.appendToDatabaseFromString("expected[" + "(p:Person {count : 6L})" + "(p)-[{since : 2014, count : 4L}]->(p)" + "(p)-[{since : 2013, count : 3L}]->(p)" + "(p)-[{since : 2015, count : 3L}]->(p)" + "]"); LogicalGraph output = new GroupingBuilder() .useVertexLabel(true) .addEdgeGroupingKey("since") .addVertexAggregateFunction(new Count("count")) .addEdgeAggregateFunction(new Count("count")) .setStrategy(getStrategy()) .build() .execute(input); collectAndAssertTrue( output.equalsByElementData(loader.getLogicalGraphByVariable("expected"))); }
@Test public void testSingleVertexAndSingleEdgeProperty() throws Exception { FlinkAsciiGraphLoader loader = getSocialNetworkLoader(); LogicalGraph input = loader .getLogicalGraphByVariable("g0") .combine(loader.getLogicalGraphByVariable("g1")) .combine(loader.getLogicalGraphByVariable("g2")); loader.appendToDatabaseFromString("expected[" + "(leipzig {city : \"Leipzig\", count : 2L})" + "(dresden {city : \"Dresden\", count : 3L})" + "(berlin {city : \"Berlin\", count : 1L})" + "(dresden)-[{since : 2014, count : 2L}]->(dresden)" + "(dresden)-[{since : 2013, count : 2L}]->(leipzig)" + "(dresden)-[{since : 2015, count : 1L}]->(leipzig)" + "(leipzig)-[{since : 2014, count : 2L}]->(leipzig)" + "(leipzig)-[{since : 2013, count : 1L}]->(dresden)" + "(berlin)-[{since : 2015, count : 2L}]->(dresden)" + "]"); LogicalGraph output = new GroupingBuilder() .addVertexGroupingKey("city") .addEdgeGroupingKey("since") .addVertexAggregateFunction(new Count("count")) .addEdgeAggregateFunction(new Count("count")) .setStrategy(getStrategy()) .build() .execute(input); collectAndAssertTrue( output.equalsByElementData(loader.getLogicalGraphByVariable("expected"))); }
@Test public void testVertexAndEdgeLabelAndSingleEdgeProperty() throws Exception { FlinkAsciiGraphLoader loader = getSocialNetworkLoader(); LogicalGraph input = loader .getLogicalGraphByVariable("g0") .combine(loader.getLogicalGraphByVariable("g1")) .combine(loader.getLogicalGraphByVariable("g2")); loader.appendToDatabaseFromString("expected[" + "(p:Person {count : 6L})" + "(p)-[:knows {since : 2013, count : 3L}]->(p)" + "(p)-[:knows {since : 2014, count : 4L}]->(p)" + "(p)-[:knows {since : 2015, count : 3L}]->(p)" + "]"); LogicalGraph output = new GroupingBuilder() .addEdgeGroupingKey("since") .useVertexLabel(true) .useEdgeLabel(true) .addVertexAggregateFunction(new Count("count")) .addEdgeAggregateFunction(new Count("count")) .setStrategy(getStrategy()) .build() .execute(input); collectAndAssertTrue( output.equalsByElementData(loader.getLogicalGraphByVariable("expected"))); }
@Test public void testVertexLabelAndSingleVertexProperty() throws Exception { FlinkAsciiGraphLoader loader = getSocialNetworkLoader(); LogicalGraph input = loader .getLogicalGraphByVariable("g0") .combine(loader.getLogicalGraphByVariable("g1")) .combine(loader.getLogicalGraphByVariable("g2")); loader.appendToDatabaseFromString("expected[" + "(l:Person {city : \"Leipzig\", count : 2L})" + "(d:Person {city : \"Dresden\", count : 3L})" + "(b:Person {city : \"Berlin\", count : 1L})" + "(d)-[{count : 2L}]->(d)" + "(d)-[{count : 3L}]->(l)" + "(l)-[{count : 2L}]->(l)" + "(l)-[{count : 1L}]->(d)" + "(b)-[{count : 2L}]->(d)" + "]"); LogicalGraph output = new GroupingBuilder() .useVertexLabel(true) .addVertexGroupingKey("city") .addVertexAggregateFunction(new Count("count")) .addEdgeAggregateFunction(new Count("count")) .setStrategy(getStrategy()) .build() .execute(input); collectAndAssertTrue( output.equalsByElementData(loader.getLogicalGraphByVariable("expected"))); }
@Test public void testVertexAndEdgeLabelAndSingleVertexProperty() throws Exception { FlinkAsciiGraphLoader loader = getSocialNetworkLoader(); LogicalGraph input = loader .getLogicalGraphByVariable("g0") .combine(loader.getLogicalGraphByVariable("g1")) .combine(loader.getLogicalGraphByVariable("g2")); loader.appendToDatabaseFromString("expected[" + "(l:Person {city : \"Leipzig\", count : 2L})" + "(d:Person {city : \"Dresden\", count : 3L})" + "(b:Person {city : \"Berlin\", count : 1L})" + "(d)-[:knows {count : 2L}]->(d)" + "(d)-[:knows {count : 3L}]->(l)" + "(l)-[:knows {count : 2L}]->(l)" + "(l)-[:knows {count : 1L}]->(d)" + "(b)-[:knows {count : 2L}]->(d)" + "]"); LogicalGraph output = new GroupingBuilder() .addVertexGroupingKey("city") .useVertexLabel(true) .useEdgeLabel(true) .addVertexAggregateFunction(new Count("count")) .addEdgeAggregateFunction(new Count("count")) .setStrategy(getStrategy()) .build() .execute(input); collectAndAssertTrue( output.equalsByElementData(loader.getLogicalGraphByVariable("expected"))); }
@Test public void testVertexLabelAndSingleVertexAndSingleEdgeProperty() throws Exception { FlinkAsciiGraphLoader loader = getSocialNetworkLoader(); LogicalGraph input = loader .getLogicalGraphByVariable("g0") .combine(loader.getLogicalGraphByVariable("g1")) .combine(loader.getLogicalGraphByVariable("g2")); loader.appendToDatabaseFromString("expected[" + "(l:Person {city : \"Leipzig\", count : 2L})" + "(d:Person {city : \"Dresden\", count : 3L})" + "(b:Person {city : \"Berlin\", count : 1L})" + "(d)-[{since : 2014, count : 2L}]->(d)" + "(d)-[{since : 2013, count : 2L}]->(l)" + "(d)-[{since : 2015, count : 1L}]->(l)" + "(l)-[{since : 2014, count : 2L}]->(l)" + "(l)-[{since : 2013, count : 1L}]->(d)" + "(b)-[{since : 2015, count : 2L}]->(d)" + "]"); LogicalGraph output = new GroupingBuilder() .useVertexLabel(true) .addVertexGroupingKey("city") .addEdgeGroupingKey("since") .addVertexAggregateFunction(new Count("count")) .addEdgeAggregateFunction(new Count("count")) .setStrategy(getStrategy()) .build() .execute(input); collectAndAssertTrue( output.equalsByElementData(loader.getLogicalGraphByVariable("expected"))); }