@SuppressWarnings("unchecked") @Override public GraphTraversalSource traversal(Graph graph) { HugeGraph hugegraph = ((TestGraph) graph).hugegraph(); return hugegraph.traversal() .withoutStrategies(LazyBarrierStrategy.class); }
@Test @LoadGraphWith(MODERN) public void shouldNotHaveAnonymousTraversalMixups() throws Exception { if (!g.getStrategies().getStrategy(TranslationStrategy.class).isPresent()) { logger.debug("No " + TranslationStrategy.class.getSimpleName() + " is registered and thus, skipping test."); return; } final GraphTraversalSource a = g; final GraphTraversalSource b = g.withoutStrategies(TranslationStrategy.class); assert a.getStrategies().getStrategy(TranslationStrategy.class).isPresent(); assert !b.getStrategies().getStrategy(TranslationStrategy.class).isPresent(); assertEquals(6l, a.V().out().count().next().longValue()); assertEquals(6l, b.V().out().count().next().longValue()); assert a.getStrategies().getStrategy(TranslationStrategy.class).isPresent(); assert !b.getStrategies().getStrategy(TranslationStrategy.class).isPresent(); assertEquals(2l, a.V().repeat(__.out()).times(2).count().next().longValue()); assertEquals(2l, b.V().repeat(__.out()).times(2).count().next().longValue()); assert a.getStrategies().getStrategy(TranslationStrategy.class).isPresent(); assert !b.getStrategies().getStrategy(TranslationStrategy.class).isPresent(); }
@Test @LoadGraphWith(MODERN) public void g_V_repeatXout_repeatXoutX_timesX1XX_timesX1X_limitX1X_path_by_name() { // This traversal gets optimised by the RepeatUnrollStrategy final Traversal<Vertex, Path> traversal_unrolled = get_g_V_repeatXout_repeatXoutX_timesX1XX_timesX1X_limitX1X_path_by_name(); final Path pathOriginal = traversal_unrolled.next(); assertFalse(traversal_unrolled.hasNext()); assertEquals(3, pathOriginal.size()); assertEquals("marko", pathOriginal.get(0)); assertEquals("josh", pathOriginal.get(1)); // could be lop or ripple depending on what the graph chooses to traverse first assertThat(pathOriginal.get(2), anyOf(equalTo("ripple"), equalTo("lop"))); g = g.withoutStrategies(RepeatUnrollStrategy.class); final Traversal<Vertex, Path> traversal = get_g_V_repeatXout_repeatXoutX_timesX1XX_timesX1X_limitX1X_path_by_name(); printTraversalForm(traversal); final Path path = traversal.next(); assertFalse(traversal.hasNext()); assertEquals(3, path.size()); assertEquals("marko", path.get(0)); assertEquals("josh", path.get(1)); // could be lop or ripple depending on what the graph chooses to traverse first assertThat(path.get(2), anyOf(equalTo("ripple"), equalTo("lop"))); }
@Test @LoadGraphWith(MODERN) public void shouldNotHaveAnonymousTraversalMixups() throws Exception { if (!g.getStrategies().getStrategy(TranslationStrategy.class).isPresent()) { logger.debug("No " + TranslationStrategy.class.getSimpleName() + " is registered and thus, skipping test."); return; } final GraphTraversalSource a = g; final GraphTraversalSource b = g.withoutStrategies(TranslationStrategy.class); assert a.getStrategies().getStrategy(TranslationStrategy.class).isPresent(); assert !b.getStrategies().getStrategy(TranslationStrategy.class).isPresent(); assertEquals(6l, a.V().out().count().next().longValue()); assertEquals(6l, b.V().out().count().next().longValue()); assert a.getStrategies().getStrategy(TranslationStrategy.class).isPresent(); assert !b.getStrategies().getStrategy(TranslationStrategy.class).isPresent(); assertEquals(2l, a.V().repeat(__.out()).times(2).count().next().longValue()); assertEquals(2l, b.V().repeat(__.out()).times(2).count().next().longValue()); assert a.getStrategies().getStrategy(TranslationStrategy.class).isPresent(); assert !b.getStrategies().getStrategy(TranslationStrategy.class).isPresent(); }
@Override public Traversal<Vertex, List<Object>> getAllShortestPaths() { // TODO: remove .withoutStrategies(PathRetractionStrategy.class) return g.withoutStrategies(ComputerVerificationStrategy.class, PathRetractionStrategy.class). V().as("v").both().as("v"). project("src", "tgt", "p"). by(select(first, "v")). by(select(last, "v")). by(select(all, "v")).as("triple"). group("x"). by(select("src", "tgt")). by(select("p").fold()).select("tgt").barrier(). repeat(both().as("v"). project("src", "tgt", "p"). by(select(first, "v")). by(select(last, "v")). by(select(all, "v")).as("t"). filter(select(all, "p").count(local).as("l"). select(last, "t").select(all, "p").dedup(local).count(local).where(eq("l"))). select(last, "t"). not(select(all, "p").as("p").count(local).as("l"). select(all, "x").unfold().filter(select(keys).where(eq("t")).by(select("src", "tgt"))). filter(select(values).unfold().or(count(local).where(lt("l")), where(eq("p"))))). barrier(). group("x"). by(select("src", "tgt")). by(select(all, "p").fold()).select("tgt").barrier()). cap("x").select(values).unfold().unfold().map(unfold().id().fold()); }
@Test @LoadGraphWith(MODERN) public void g_V_repeatXout_repeatXoutX_timesX1XX_timesX1X_limitX1X_path_by_name() { // This traversal gets optimised by the RepeatUnrollStrategy final Traversal<Vertex, Path> traversal_unrolled = get_g_V_repeatXout_repeatXoutX_timesX1XX_timesX1X_limitX1X_path_by_name(); final Path pathOriginal = traversal_unrolled.next(); assertFalse(traversal_unrolled.hasNext()); assertEquals(3, pathOriginal.size()); assertEquals("marko", pathOriginal.get(0)); assertEquals("josh", pathOriginal.get(1)); // could be lop or ripple depending on what the graph chooses to traverse first assertThat(pathOriginal.get(2), anyOf(equalTo("ripple"), equalTo("lop"))); g = g.withoutStrategies(RepeatUnrollStrategy.class); final Traversal<Vertex, Path> traversal = get_g_V_repeatXout_repeatXoutX_timesX1XX_timesX1X_limitX1X_path_by_name(); printTraversalForm(traversal); final Path path = traversal.next(); assertFalse(traversal.hasNext()); assertEquals(3, path.size()); assertEquals("marko", path.get(0)); assertEquals("josh", path.get(1)); // could be lop or ripple depending on what the graph chooses to traverse first assertThat(path.get(2), anyOf(equalTo("ripple"), equalTo("lop"))); }
@Test @LoadGraphWith(LoadGraphWith.GraphData.MODERN) public void shouldHandleStrategies() throws Exception { final GraphTraversalSource g = graph.traversal().withStrategies(SubgraphStrategy.create(new MapConfiguration(new HashMap<String, Object>() {{ put(SubgraphStrategy.VERTICES, __.has("name", "marko")); }}))); final Bindings bindings = new SimpleBindings(); bindings.put("g", g); Traversal.Admin<Vertex, Object> traversal = engine.eval(g.V().values("name").asAdmin().getBytecode(), bindings, "g"); assertEquals("marko", traversal.next()); assertFalse(traversal.hasNext()); // traversal = engine.eval(g.withoutStrategies(SubgraphStrategy.class).V().count().asAdmin().getBytecode(), bindings, "g"); assertEquals(new Long(6), traversal.next()); assertFalse(traversal.hasNext()); // traversal = engine.eval(g.withStrategies(SubgraphStrategy.create(new MapConfiguration(new HashMap<String, Object>() {{ put(SubgraphStrategy.VERTICES, __.has("name", "marko")); }})), ReadOnlyStrategy.instance()).V().values("name").asAdmin().getBytecode(), bindings, "g"); assertEquals("marko", traversal.next()); assertFalse(traversal.hasNext()); }
@Override public Traversal<Vertex, List<Object>> getAllShortestPaths() { // TODO: remove .withoutStrategies(PathRetractionStrategy.class) return g.withoutStrategies(ComputerVerificationStrategy.class, PathRetractionStrategy.class). V().as("v").both().as("v"). project("src", "tgt", "p"). by(select(first, "v")). by(select(last, "v")). by(select(all, "v")).as("triple"). group("x"). by(select("src", "tgt")). by(select("p").fold()).select("tgt").barrier(). repeat(both().as("v"). project("src", "tgt", "p"). by(select(first, "v")). by(select(last, "v")). by(select(all, "v")).as("t"). filter(select(all, "p").count(local).as("l"). select(last, "t").select(all, "p").dedup(local).count(local).where(eq("l"))). select(last, "t"). not(select(all, "p").as("p").count(local).as("l"). select(all, "x").unfold().filter(select(keys).where(eq("t")).by(select("src", "tgt"))). filter(select(values).unfold().or(count(local).where(lt("l")), where(eq("p"))))). barrier(). group("x"). by(select("src", "tgt")). by(select(all, "p").fold()).select("tgt").barrier()). cap("x").select(values).unfold().unfold().map(unfold().id().fold()); }