@Test @LoadGraphWith(SINK) public void testMessagePassingOut() throws Exception { runMPTest(Direction.OUT).forEachRemaining(v -> { vertexPropertyChecks(v); final String in = v.value(VertexProgramR.PROPERTY_IN); if (in.equals("a")) assertEquals("a", v.value(VertexProgramR.PROPERTY_OUT).toString()); else if (in.equals("b")) assertEquals("a", v.value(VertexProgramR.PROPERTY_OUT).toString()); else throw new IllegalStateException("This vertex should not exist: " + VertexProgramR.PROPERTY_IN + "=" + String.valueOf(in)); }); }
@Test @LoadGraphWith(SINK) public void testMessagePassingIn() throws Exception { runMPTest(Direction.IN).forEachRemaining(v -> { vertexPropertyChecks(v); final String in = v.value(VertexProgramR.PROPERTY_IN); if (in.equals("a")) assertEquals("ab", v.value(VertexProgramR.PROPERTY_OUT).toString()); else if (in.equals("b")) assertEquals("", v.value(VertexProgramR.PROPERTY_OUT).toString()); else throw new IllegalStateException("This vertex should not exist: " + VertexProgramR.PROPERTY_IN + "=" + String.valueOf(in)); }); }
@Test @LoadGraphWith(MODERN) public void shouldSucceedWithProperTraverserRequirements() throws Exception { final VertexProgramQ vp = VertexProgramQ.build().property("pl").create(); final Map<String, List<Integer>> expected = new HashMap<>(); expected.put("vadas", Collections.singletonList(2)); expected.put("lop", Arrays.asList(2, 2, 2, 3)); expected.put("josh", Collections.singletonList(2)); expected.put("ripple", Arrays.asList(2, 3)); try { g.V().repeat(__.out()).emit().program(vp).dedup() .valueMap("name", "pl").forEachRemaining((Map<Object, Object> map) -> { final String name = (String) ((List) map.get("name")).get(0); final List<Integer> pathLengths = (List<Integer>) map.get("pl"); assertTrue(expected.containsKey(name)); final List<Integer> expectedPathLengths = expected.remove(name); assertTrue(expectedPathLengths.containsAll(pathLengths)); assertTrue(pathLengths.containsAll(expectedPathLengths)); }); assertTrue(expected.isEmpty()); } catch (VerificationException ex) { assumeNoException(ex); } }
@Test @LoadGraphWith(SINK) public void testMessagePassingBoth() throws Exception { runMPTest(Direction.BOTH).forEachRemaining(v -> { vertexPropertyChecks(v); final String in = v.value(VertexProgramR.PROPERTY_IN); switch (in) { case "a": assertEquals("aab", v.value(VertexProgramR.PROPERTY_OUT).toString()); break; case "b": assertEquals("a", v.value(VertexProgramR.PROPERTY_OUT).toString()); break; default: throw new IllegalStateException("This vertex should not exist: " + VertexProgramR.PROPERTY_IN + "=" + String.valueOf(in)); } }); }
@Test @LoadGraphWith(LoadGraphWith.GraphData.CREW) public void testAttachableGetMethod() { // vertex host g.V().forEachRemaining(vertex -> TestHelper.validateEquality(vertex, ReferenceFactory.detach(vertex).attach(Attachable.Method.get(vertex)))); g.V().forEachRemaining(vertex -> vertex.properties().forEachRemaining(vertexProperty -> TestHelper.validateEquality(vertexProperty, ReferenceFactory.detach(vertexProperty).attach(Attachable.Method.get(vertex))))); g.V().forEachRemaining(vertex -> vertex.properties().forEachRemaining(vertexProperty -> vertexProperty.properties().forEachRemaining(property -> TestHelper.validateEquality(property, ReferenceFactory.detach(property).attach(Attachable.Method.get(vertex)))))); g.V().forEachRemaining(vertex -> vertex.edges(Direction.OUT).forEachRemaining(edge -> TestHelper.validateEquality(edge, ReferenceFactory.detach(edge).attach(Attachable.Method.get(vertex))))); g.V().forEachRemaining(vertex -> vertex.edges(Direction.OUT).forEachRemaining(edge -> edge.properties().forEachRemaining(property -> TestHelper.validateEquality(property, ReferenceFactory.detach(property).attach(Attachable.Method.get(vertex)))))); // graph host g.V().forEachRemaining(vertex -> TestHelper.validateEquality(vertex, ReferenceFactory.detach(vertex).attach(Attachable.Method.get(graph)))); g.V().forEachRemaining(vertex -> vertex.properties().forEachRemaining(vertexProperty -> TestHelper.validateEquality(vertexProperty, ReferenceFactory.detach(vertexProperty).attach(Attachable.Method.get(graph))))); g.V().forEachRemaining(vertex -> vertex.properties().forEachRemaining(vertexProperty -> vertexProperty.properties().forEachRemaining(property -> TestHelper.validateEquality(property, ReferenceFactory.detach(property).attach(Attachable.Method.get(graph)))))); g.V().forEachRemaining(vertex -> vertex.edges(Direction.OUT).forEachRemaining(edge -> TestHelper.validateEquality(edge, ReferenceFactory.detach(edge).attach(Attachable.Method.get(graph))))); g.V().forEachRemaining(vertex -> vertex.edges(Direction.OUT).forEachRemaining(edge -> edge.properties().forEachRemaining(property -> TestHelper.validateEquality(property, ReferenceFactory.detach(property).attach(Attachable.Method.get(graph)))))); } }
@Test @LoadGraphWith(LoadGraphWith.GraphData.CREW) public void testAttachableGetMethod() { // vertex host g.V().forEachRemaining(vertex -> TestHelper.validateEquality(vertex, DetachedFactory.detach(vertex, true).attach(Attachable.Method.get(vertex)))); g.V().forEachRemaining(vertex -> vertex.properties().forEachRemaining(vertexProperty -> TestHelper.validateEquality(vertexProperty, DetachedFactory.detach(vertexProperty, true).attach(Attachable.Method.get(vertex))))); g.V().forEachRemaining(vertex -> vertex.properties().forEachRemaining(vertexProperty -> vertexProperty.properties().forEachRemaining(property -> TestHelper.validateEquality(property, DetachedFactory.detach(property).attach(Attachable.Method.get(vertex)))))); g.V().forEachRemaining(vertex -> vertex.edges(Direction.OUT).forEachRemaining(edge -> TestHelper.validateEquality(edge, DetachedFactory.detach(edge, true).attach(Attachable.Method.get(vertex))))); g.V().forEachRemaining(vertex -> vertex.edges(Direction.OUT).forEachRemaining(edge -> edge.properties().forEachRemaining(property -> TestHelper.validateEquality(property, DetachedFactory.detach(property).attach(Attachable.Method.get(vertex)))))); // graph host g.V().forEachRemaining(vertex -> TestHelper.validateEquality(vertex, DetachedFactory.detach(vertex, true).attach(Attachable.Method.get(graph)))); g.V().forEachRemaining(vertex -> vertex.properties().forEachRemaining(vertexProperty -> TestHelper.validateEquality(vertexProperty, DetachedFactory.detach(vertexProperty, true).attach(Attachable.Method.get(graph))))); g.V().forEachRemaining(vertex -> vertex.properties().forEachRemaining(vertexProperty -> vertexProperty.properties().forEachRemaining(property -> TestHelper.validateEquality(property, DetachedFactory.detach(property).attach(Attachable.Method.get(graph)))))); g.V().forEachRemaining(vertex -> vertex.edges(Direction.OUT).forEachRemaining(edge -> TestHelper.validateEquality(edge, DetachedFactory.detach(edge, true).attach(Attachable.Method.get(graph))))); g.V().forEachRemaining(vertex -> vertex.edges(Direction.OUT).forEachRemaining(edge -> edge.properties().forEachRemaining(property -> TestHelper.validateEquality(property, DetachedFactory.detach(property).attach(Attachable.Method.get(graph)))))); }
@Test @LoadGraphWith(LoadGraphWith.GraphData.CREW) public void shouldAttachWithGetMethod() { // vertex host g.V().forEachRemaining(vertex -> TestHelper.validateEquality(vertex, StarGraph.of(vertex).getStarVertex().attach(Attachable.Method.get(vertex)))); g.V().forEachRemaining(vertex -> StarGraph.of(vertex).getStarVertex().properties().forEachRemaining(vertexProperty -> TestHelper.validateEquality(vertexProperty, ((Attachable<VertexProperty>) vertexProperty).attach(Attachable.Method.get(vertex))))); g.V().forEachRemaining(vertex -> StarGraph.of(vertex).getStarVertex().properties().forEachRemaining(vertexProperty -> vertexProperty.properties().forEachRemaining(property -> TestHelper.validateEquality(property, ((Attachable<Property>) property).attach(Attachable.Method.get(vertex)))))); g.V().forEachRemaining(vertex -> StarGraph.of(vertex).getStarVertex().edges(Direction.OUT).forEachRemaining(edge -> TestHelper.validateEquality(edge, ((Attachable<Edge>) edge).attach(Attachable.Method.get(vertex))))); g.V().forEachRemaining(vertex -> StarGraph.of(vertex).getStarVertex().edges(Direction.OUT).forEachRemaining(edge -> edge.properties().forEachRemaining(property -> TestHelper.validateEquality(property, ((Attachable<Property>) property).attach(Attachable.Method.get(vertex)))))); // graph host g.V().forEachRemaining(vertex -> TestHelper.validateEquality(vertex, StarGraph.of(vertex).getStarVertex().attach(Attachable.Method.get(graph)))); g.V().forEachRemaining(vertex -> StarGraph.of(vertex).getStarVertex().properties().forEachRemaining(vertexProperty -> TestHelper.validateEquality(vertexProperty, ((Attachable<VertexProperty>) vertexProperty).attach(Attachable.Method.get(graph))))); g.V().forEachRemaining(vertex -> StarGraph.of(vertex).getStarVertex().properties().forEachRemaining(vertexProperty -> vertexProperty.properties().forEachRemaining(property -> TestHelper.validateEquality(property, ((Attachable<Property>) property).attach(Attachable.Method.get(graph)))))); g.V().forEachRemaining(vertex -> StarGraph.of(vertex).getStarVertex().edges(Direction.OUT).forEachRemaining(edge -> TestHelper.validateEquality(edge, ((Attachable<Edge>) edge).attach(Attachable.Method.get(graph))))); g.V().forEachRemaining(vertex -> StarGraph.of(vertex).getStarVertex().edges(Direction.OUT).forEachRemaining(edge -> edge.properties().forEachRemaining(property -> TestHelper.validateEquality(property, ((Attachable<Property>) property).attach(Attachable.Method.get(graph)))))); }
@Test @LoadGraphWith(MODERN) public void shouldHavePropertyForEachRemainingBehaviorEvenWithStrategyRewrite() { final GraphTraversal<Vertex, Map<Object, Long>> traversal = g.V().out().groupCount(); traversal.forEachRemaining(Map.class, map -> assertTrue(map instanceof Map)); }
@Test @LoadGraphWith(LoadGraphWith.GraphData.CREW) public void shouldValidateThatOriginalAndStarVerticesHaveTheSameTopology() { g.V().forEachRemaining(vertex -> TestHelper.validateEquality(vertex, StarGraph.of(vertex).getStarVertex())); }
@Test @LoadGraphWith(LoadGraphWith.GraphData.CREW) public void shouldSerializeCorrectlyUsingGryo() { g.V().forEachRemaining(vertex -> TestHelper.validateEquality(vertex, serializeDeserialize(StarGraph.of(vertex)).getValue0().getStarVertex())); }
final ComputerResult result = graph.compute(graphProvider.getGraphComputer(graph).getClass()). program(PageRankVertexProgram.build().epsilon(0.0d).iterations(30).create(graph)).submit().get(); // by using epsilon 0.0, we guarantee iterations 30 result.graph().traversal().V().forEachRemaining(v -> { assertEquals(3, v.keys().size()); // name, age/lang, pageRank assertTrue(v.keys().contains("name"));
final ComputerResult result = graph.compute(graphProvider.getGraphComputer(graph).getClass()). program(PageRankVertexProgram.build().epsilon(0.00001d).iterations(30).create(graph)).submit().get(); // by using epsilon 0.00001, we should get iterations 11 result.graph().traversal().V().forEachRemaining(v -> { assertEquals(3, v.keys().size()); // name, age/lang, pageRank assertTrue(v.keys().contains("name"));
@Test @LoadGraphWith(MODERN) public void shouldHaveConsistentMemoryVertexPropertiesAndExceptions() throws Exception { ComputerResult results = graphProvider.getGraphComputer(graph).program(new VertexProgramF()).submit().get(); assertEquals(1, results.memory().getIteration()); assertEquals(2, results.memory().asMap().size()); assertEquals(2, results.memory().keys().size()); assertTrue(results.memory().keys().contains("a")); assertTrue(results.memory().keys().contains("b")); assertTrue(results.memory().getRuntime() >= 0); assertEquals(12, results.memory().<Integer>get("a").intValue()); // 2 iterations assertEquals(28, results.memory().<Integer>get("b").intValue()); try { results.memory().get("BAD"); fail("Should throw an IllegalArgumentException"); } catch (IllegalArgumentException e) { assertEquals(Memory.Exceptions.memoryDoesNotExist("BAD").getMessage(), e.getMessage()); } assertEquals(Long.valueOf(0), results.graph().traversal().V().count().next()); // persist new/nothing. results.graph().traversal().V().forEachRemaining(v -> { assertTrue(v.property("nameLengthCounter").isPresent()); assertEquals(Integer.valueOf(v.<String>value("name").length() * 2), Integer.valueOf(v.<Integer>value("nameLengthCounter"))); }); }
@Test @LoadGraphWith(MODERN) public void shouldFailWithImproperTraverserRequirements() throws Exception { final VertexProgramQ vp = VertexProgramQ.build().property("pl").useTraverserRequirements(false).create(); try { g.V().repeat(__.out()).emit().program(vp).dedup() .forEachRemaining((Vertex v) -> assertFalse(v.property("pl").isPresent())); } catch (VerificationException ex) { assumeNoException(ex); } }
@Test @LoadGraphWith(MODERN) @FeatureRequirement(featureClass = Graph.Features.VertexFeatures.class, feature = Graph.Features.VertexFeatures.FEATURE_REMOVE_PROPERTY) public void g_V_properties_drop() { final Traversal<Vertex, VertexProperty> traversal = get_g_V_properties_drop(); printTraversalForm(traversal); assertFalse(traversal.hasNext()); assertEquals(6, IteratorUtils.count(g.V())); assertEquals(6, IteratorUtils.count(g.E())); g.V().forEachRemaining(vertex -> assertEquals(0, IteratorUtils.count(vertex.properties()))); }
if (graphProvider.getGraphComputer(graph).features().supportsResultGraphPersistCombination(GraphComputer.ResultGraph.NEW, GraphComputer.Persist.EDGES)) { final ComputerResult result = graphProvider.getGraphComputer(graph).program(BulkDumperVertexProgram.build().create(graph)).submit().get(); result.graph().traversal().V().forEachRemaining(v -> { assertEquals(2, v.keys().size()); assertTrue(v.keys().contains("name"));
if (graphProvider.getGraphComputer(graph).features().supportsResultGraphPersistCombination(GraphComputer.ResultGraph.NEW, GraphComputer.Persist.EDGES)) { final ComputerResult result = graphProvider.getGraphComputer(graph).program(CloneVertexProgram.build().create(graph)).submit().get(); result.graph().traversal().V().forEachRemaining(v -> { assertEquals(2, v.keys().size()); assertTrue(v.keys().contains("name"));
@Test @FeatureRequirementSet(FeatureRequirementSet.Package.VERTICES_ONLY) public void shouldWriteVerticesToMultiplePartitions() { final PartitionStrategy partitionStrategyAA = PartitionStrategy.build() .partitionKey(partition).writePartition("A").readPartitions("A").create(); final GraphTraversalSource sourceAA = g.withStrategies(partitionStrategyAA); final PartitionStrategy partitionStrategyBA = PartitionStrategy.build() .partitionKey(partition).writePartition("B").readPartitions("A").create(); final GraphTraversalSource sourceBA = g.withStrategies(partitionStrategyBA); final PartitionStrategy partitionStrategyBB = PartitionStrategy.build() .partitionKey(partition).writePartition("B").readPartitions("B").create(); final GraphTraversalSource sourceBB = g.withStrategies(partitionStrategyBB); final PartitionStrategy partitionStrategyBAB = PartitionStrategy.build() .partitionKey(partition).writePartition("B").readPartitions("A", "B").create(); final GraphTraversalSource sourceBAB = g.withStrategies(partitionStrategyBAB); final Vertex vA = sourceAA.addV().property("any", "a").next(); final Vertex vB = sourceBA.addV().property("any", "b").next(); assertNotNull(vA); assertEquals("a", g.V(vA).values("any").next()); assertEquals("A", g.V(vA).values(partition).next()); assertNotNull(vB); assertEquals("b", g.V(vB).values("any").next()); assertEquals("B", g.V(vB).values(partition).next()); sourceBA.V().forEachRemaining(v -> assertEquals("a", g.V(v).values("any").next())); sourceBB.V().forEachRemaining(v -> assertEquals("b", g.V(v).values("any").next())); assertEquals(new Long(2), sourceBAB.V().count().next()); }
}); g.V().properties("name").has(T.value, P.test((a, b) -> ((String) a).startsWith((String) b), "Remove-")).forEachRemaining(Property::remove); tryCommit(graph, graph -> { assertVertexEdgeCounts(graph, 1, 0);
@Test @LoadGraphWith(MODERN) public void shouldHavePropertyForEachRemainingBehaviorEvenWithStrategyRewrite() { final GraphTraversal<Vertex, Map<Object, Long>> traversal = g.V().out().groupCount(); traversal.forEachRemaining(Map.class, map -> assertTrue(map instanceof Map)); }