t = gts.V().has("id", sid).local(__.outE("knows").has("weight", P.between(1, 3)).order().by("weight", decr).limit(10)).profile(); assertCount(superV * 10, t); metrics = (TraversalMetrics) t.asAdmin().getSideEffects().get("~metrics").get(); verifyMetrics(metrics.getMetrics(0), true, false); verifyMetrics(metrics.getMetrics(1), true, true); t = gts.V().has("id", sid).values("names").profile(); assertCount(superV * numV, t); metrics = (TraversalMetrics) t.asAdmin().getSideEffects().get("~metrics").get(); verifyMetrics(metrics.getMetrics(0), true, false); verifyMetrics(metrics.getMetrics(1), true, true); t = gts.V().has("id", sid).local(__.outE("knows").has("weight", P.gte(1)).has("weight",P.lt(3)).order().by("weight", decr).limit(10)).profile(); assertCount(superV * 10, t); metrics = (TraversalMetrics) t.asAdmin().getSideEffects().get("~metrics").get(); t = gts.V().has("id", sid).values("names").profile(); assertCount(superV * numV, t); metrics = (TraversalMetrics) t.asAdmin().getSideEffects().get("~metrics").get();
public static boolean isEmpty(Object obj) { Preconditions.checkArgument(obj != null); if (obj instanceof Traversal) return !((Traversal) obj).hasNext(); else if (obj instanceof Collection) return ((Collection)obj).isEmpty(); else if (obj instanceof Iterable) return Iterables.isEmpty((Iterable)obj); else if (obj instanceof Iterator) return !((Iterator)obj).hasNext(); else if (obj.getClass().isArray()) return Array.getLength(obj)==0; throw new IllegalArgumentException("Cannot determine size of: " + obj); }
public static int size(Object obj) { Preconditions.checkArgument(obj != null); if (obj instanceof Traversal) return size(((Traversal) obj).toList()); else if (obj instanceof Collection) return ((Collection)obj).size(); else if (obj instanceof Iterable) return Iterables.size((Iterable) obj); else if (obj instanceof Iterator) return Iterators.size((Iterator)obj); else if (obj.getClass().isArray()) return Array.getLength(obj); throw new IllegalArgumentException("Cannot determine size of: " + obj); }
@Test @LoadGraphWith(MODERN) @FeatureRequirement(featureClass = Graph.Features.EdgeFeatures.class, feature = Graph.Features.EdgeFeatures.FEATURE_ADD_EDGES) public void g_V_hasXname_markoX_asXaX_outEXcreatedX_asXbX_inV_addEXselectXbX_labelX_toXaX() { final Traversal<Vertex, Edge> traversal = get_g_V_hasXname_markoX_asXaX_outEXcreatedX_asXbX_inV_addEXselectXbX_labelX_toXaX(); printTraversalForm(traversal); final Edge edge = traversal.next(); assertFalse(traversal.hasNext()); assertEquals("created", edge.label()); assertEquals(convertToVertexId("marko"), edge.inVertex().id()); assertEquals(convertToVertexId("lop"), edge.outVertex().id()); assertEquals(6L, g.V().count().next().longValue()); assertEquals(7L, g.E().count().next().longValue()); }
@Test @LoadGraphWith(MODERN) @FeatureRequirement(featureClass = Graph.Features.VertexFeatures.class, feature = Graph.Features.VertexFeatures.FEATURE_ADD_VERTICES) @FeatureRequirement(featureClass = Graph.Features.VertexFeatures.class, feature = Graph.Features.VertexFeatures.FEATURE_ADD_PROPERTY) public void g_addVXpersonX_propertyXname_stephenX() { final Traversal<Vertex, Vertex> traversal = get_g_addVXpersonX_propertyXname_stephenX(); printTraversalForm(traversal); final Vertex stephen = traversal.next(); assertFalse(traversal.hasNext()); assertEquals("person", stephen.label()); assertEquals("stephen", stephen.value("name")); assertEquals(1, IteratorUtils.count(stephen.properties())); assertEquals(7, IteratorUtils.count(g.V())); }
@Test @LoadGraphWith(MODERN) public void shouldFilterEdgeCriterion() throws Exception { final Traversal<Edge, ?> edgeCriterion = __.or( has("weight", 1.0d).hasLabel("knows"), // 8 has("weight", 0.4d).hasLabel("created").outV().has("name", "marko"), // 9 has("weight", 1.0d).hasLabel("created") // 10 ); final GraphTraversalSource sg = g.withStrategies(strategy); assertEquals(6, g.V().count().next().longValue()); final Traversal t = sg.V(); t.hasNext(); printTraversalForm(t); assertEquals(6, sg.V().count().next().longValue());
@Test @LoadGraphWith(MODERN) @FeatureRequirement(featureClass = Graph.Features.EdgeFeatures.class, feature = Graph.Features.EdgeFeatures.FEATURE_ADD_EDGES) public void g_VXaX_addEXknowsX_toXbX_propertyXweight_0_1X() { final Vertex a = g.V().has("name", "marko").next(); final Vertex b = g.V().has("name", "peter").next(); final Traversal<Vertex, Edge> traversal = get_g_VXaX_addEXknowsX_toXbX_propertyXweight_0_1X(a, b); printTraversalForm(traversal); final Edge edge = traversal.next(); assertEquals(edge.outVertex(), convertToVertex(graph, "marko")); assertEquals(edge.inVertex(), convertToVertex(graph, "peter")); assertEquals("knows", edge.label()); assertEquals(1, IteratorUtils.count(edge.properties())); assertEquals(0.1d, edge.value("weight"), 0.1d); assertEquals(6L, g.V().count().next().longValue()); assertEquals(7L, g.E().count().next().longValue()); }
@Test @LoadGraphWith(MODERN) @FeatureRequirement(featureClass = Graph.Features.EdgeFeatures.class, feature = Graph.Features.EdgeFeatures.FEATURE_ADD_EDGES) public void g_withSideEffectXb_bX_VXaX_addEXknowsX_toXbX_propertyXweight_0_5X() { final Vertex a = g.V().has("name", "marko").next(); final Vertex b = g.V().has("name", "peter").next(); final Traversal<Vertex, Edge> traversal = get_g_withSideEffectXb_bX_VXaX_addEXknowsX_toXbX_propertyXweight_0_5X(a, b); final Edge edge = traversal.next(); assertFalse(traversal.hasNext()); assertEquals(edge.outVertex(), convertToVertex(graph, "marko")); assertEquals(edge.inVertex(), convertToVertex(graph, "peter")); assertEquals("knows", edge.label()); assertEquals(1, g.E(edge).properties().count().next().intValue()); assertEquals(0.5d, g.E(edge).<Double>values("weight").next(), 0.1d); assertEquals(6L, g.V().count().next().longValue()); assertEquals(7L, g.E().count().next().longValue()); }
@Test @LoadGraphWith(MODERN) @FeatureRequirement(featureClass = Graph.Features.EdgeFeatures.class, feature = Graph.Features.EdgeFeatures.FEATURE_ADD_EDGES) public void g_V_aggregateXxX_asXaX_selectXxX_unfold_addEXexistsWithX_toXaX_propertyXtime_nowX() { final Traversal<Vertex, Edge> traversal = get_g_V_aggregateXxX_asXaX_selectXxX_unfold_addEXexistsWithX_toXaX_propertyXtime_nowX(); printTraversalForm(traversal); int count = 0; while (traversal.hasNext()) { final Edge edge = traversal.next(); assertEquals("existsWith", edge.label()); assertEquals("now", g.E(edge).values("time").next()); assertEquals(1, g.E(edge).properties().count().next().intValue()); count++; } assertEquals(36, count); assertEquals(42, IteratorUtils.count(g.E())); for (final Vertex vertex : IteratorUtils.list(g.V())) { assertEquals(6, g.V(vertex).out("existsWith").count().next().intValue()); assertEquals(6, g.V(vertex).in("existsWith").count().next().intValue()); } assertEquals(6, IteratorUtils.count(g.V())); }
@Test @LoadGraphWith(MODERN) @FeatureRequirement(featureClass = Graph.Features.EdgeFeatures.class, feature = Graph.Features.EdgeFeatures.FEATURE_ADD_EDGES) public void g_V_asXaX_inXcreatedX_addEXcreatedByX_fromXaX_propertyXyear_2009X_propertyXacl_publicX() { final Traversal<Vertex, Edge> traversal = get_g_V_asXaX_inXcreatedX_addEXcreatedByX_fromXaX_propertyXyear_2009X_propertyXacl_publicX(); printTraversalForm(traversal); int count = 0; while (traversal.hasNext()) { final Edge edge = traversal.next(); assertEquals("createdBy", edge.label()); assertEquals(2009, g.E(edge).values("year").next()); assertEquals("public", g.E(edge).values("acl").next()); assertEquals(2, g.E(edge).properties().count().next().intValue()); assertEquals("person", g.E(edge).inV().label().next()); assertEquals("software", g.E(edge).outV().label().next()); if (g.E(edge).outV().values("name").next().equals("ripple")) assertEquals("josh", g.E(edge).inV().values("name").next()); count++; } assertEquals(4, count); assertEquals(10, IteratorUtils.count(g.E())); assertEquals(6, IteratorUtils.count(g.V())); }
@Test @FeatureRequirement(featureClass = Graph.Features.EdgeFeatures.class, feature = Graph.Features.EdgeFeatures.FEATURE_ADD_EDGES) @FeatureRequirement(featureClass = Graph.Features.VertexFeatures.class, feature = Graph.Features.VertexFeatures.FEATURE_ADD_VERTICES) public void g_addV_asXfirstX_repeatXaddEXnextX_toXaddVX_inVX_timesX5X_addEXnextX_toXselectXfirstXX() { final Traversal<Vertex, Edge> traversal = get_g_addV_asXfirstX_repeatXaddEXnextX_toXaddVX_inVX_timesX5X_addEXnextX_toXselectXfirstXX(); printTraversalForm(traversal); assertEquals("next", traversal.next().label()); assertFalse(traversal.hasNext()); assertEquals(6L, g.V().count().next().longValue()); assertEquals(6L, g.E().count().next().longValue()); assertEquals(Arrays.asList(2L, 2L, 2L, 2L, 2L, 2L), g.V().map(bothE().count()).toList()); assertEquals(Arrays.asList(1L, 1L, 1L, 1L, 1L, 1L), g.V().map(inE().count()).toList()); assertEquals(Arrays.asList(1L, 1L, 1L, 1L, 1L, 1L), g.V().map(outE().count()).toList()); }
@Test @FeatureRequirement(featureClass = Graph.Features.GraphFeatures.class, feature = Graph.Features.GraphFeatures.FEATURE_IO_READ) public void g_io_readXjsonX() throws IOException { final String fileToRead = TestHelper.generateTempFileFromResource(ReadTest.class, GraphSONResourceAccess.class, "tinkerpop-modern-v3d0.json", "").getAbsolutePath().replace('\\', '/'); final Traversal<Object,Object> traversal = get_g_io_readXjsonX(fileToRead); printTraversalForm(traversal); traversal.iterate(); if (graph instanceof RemoteGraph) { assertEquals(6L, g.V().count().next().longValue()); assertEquals(6L, g.E().count().next().longValue()); } else { IoTest.assertModernGraph(graph, false, true); } }
/** * {@inheritDoc} */ @Override public Edge getOrCreateEdge(final Edge edge, final Vertex outVertex, final Vertex inVertex, final Graph graph, final GraphTraversalSource g) { final Edge e; final Traversal<Vertex, Edge> t = g.V(outVertex).outE(edge.label()).filter(__.inV().is(inVertex)); if (t.hasNext()) { e = t.next(); edge.properties().forEachRemaining(property -> { final Property<?> existing = e.property(property.key()); if (!existing.isPresent() || !existing.value().equals(property.value())) { e.property(property.key(), property.value()); } }); } else { e = createEdge(edge, outVertex, inVertex, graph, g); } return e; }
@Test @LoadGraphWith(MODERN) @FeatureRequirement(featureClass = Graph.Features.EdgeFeatures.class, feature = Graph.Features.EdgeFeatures.FEATURE_ADD_EDGES) public void g_VX1X_asXaX_outXcreatedX_addEXcreatedByX_toXaX_propertyXweight_2X() { final Traversal<Vertex, Edge> traversal = get_g_VX1X_asXaX_outXcreatedX_addEXcreatedByX_toXaX_propertyXweight_2X(convertToVertexId("marko")); printTraversalForm(traversal); int count = 0; while (traversal.hasNext()) { final Edge edge = traversal.next(); assertEquals("createdBy", edge.label()); assertEquals(2.0d, g.E(edge).<Double>values("weight").next(), 0.00001d); assertEquals(1, g.E(edge).properties().count().next().intValue()); count++; } assertEquals(1, count); assertEquals(7, IteratorUtils.count(g.E())); assertEquals(6, IteratorUtils.count(g.V())); }
@Test @LoadGraphWith(MODERN) public void g_VX1X_outE_asXhereX_inV_hasXname_vadasX_selectXhereX() { final Traversal<Vertex, Edge> traversal = get_g_VX1X_outE_asXhereX_inV_hasXname_vadasX_selectXhereX(convertToVertexId("marko")); printTraversalForm(traversal); final Edge edge = traversal.next(); assertEquals("knows", edge.label()); assertEquals(convertToVertexId("vadas"), edge.inVertex().id()); assertEquals(convertToVertexId("marko"), edge.outVertex().id()); assertEquals(0.5d, edge.<Double>value("weight"), 0.0001d); assertFalse(traversal.hasNext()); }
@Test @FeatureRequirementSet(FeatureRequirementSet.Package.VERTICES_ONLY) public void shouldGenerateDefaultIdOnGraphAddVWithGeneratedDefaultId() throws Exception { final ElementIdStrategy strategy = ElementIdStrategy.build().create(); final GraphTraversalSource sg = create(strategy); final Vertex v = sg.addV().property("name", "stephen").next(); assertEquals("stephen", v.value("name")); final Traversal t1 = graph.traversal().V(v); t1.asAdmin().applyStrategies(); logger.info(t1.toString()); final Traversal t2 = sg.V(v); t2.asAdmin().applyStrategies(); logger.info(t2.toString()); assertNotNull(UUID.fromString(sg.V(v).id().next().toString())); }
@Test @LoadGraphWith(MODERN) public void shouldFilterOnIterate() { final Traversal<Vertex,String> traversal = g.V().out().out().<String>values("name").aggregate("x").iterate(); assertFalse(traversal.hasNext()); assertEquals(2, traversal.asAdmin().getSideEffects().<BulkSet>get("x").size()); assertTrue(traversal.asAdmin().getSideEffects().<BulkSet>get("x").contains("ripple")); assertTrue(traversal.asAdmin().getSideEffects().<BulkSet>get("x").contains("lop")); assertEquals(Traversal.Symbols.none, traversal.asAdmin().getBytecode().getStepInstructions().get(traversal.asAdmin().getBytecode().getStepInstructions().size()-1).getOperator()); }
@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()))); }
@Test @LoadGraphWith(MODERN) @FeatureRequirement(featureClass = Graph.Features.EdgeFeatures.class, feature = Graph.Features.EdgeFeatures.FEATURE_ADD_EDGES) public void g_VX1X_asXaX_outXcreatedX_addEXcreatedByX_toXaX() { final Traversal<Vertex, Edge> traversal = get_g_VX1X_asXaX_outXcreatedX_addEXcreatedByX_toXaX(convertToVertexId("marko")); printTraversalForm(traversal); int count = 0; while (traversal.hasNext()) { final Edge edge = traversal.next(); assertEquals("createdBy", edge.label()); assertEquals(0, IteratorUtils.count(edge.properties())); count++; } assertEquals(1, count); assertEquals(7, IteratorUtils.count(g.E())); assertEquals(6, IteratorUtils.count(g.V())); }
@Test @LoadGraphWith(MODERN) public void g_withSideEffectXa_g_VX2XX_VX1X_out_whereXneqXaXX() { final Traversal<Vertex, Vertex> traversal = get_g_withSideEffectXa_graph_verticesX2XX_VX1X_out_whereXneqXaXX(convertToVertexId("marko"), g.V(convertToVertexId("vadas")).next()); printTraversalForm(traversal); int counter = 0; final Set<Vertex> vertices = new HashSet<>(); while (traversal.hasNext()) { counter++; final Vertex vertex = traversal.next(); vertices.add(vertex); assertTrue(vertex.value("name").equals("josh") || vertex.value("name").equals("lop")); } assertEquals(2, counter); assertEquals(2, vertices.size()); }