pieter martin created TINKERPOP3-949:
----------------------------------------
Summary: times(x) after RepeatStep violates do while semantics.
Key: TINKERPOP3-949
URL: https://issues.apache.org/jira/browse/TINKERPOP3-949
Project: TinkerPop 3
Issue Type: Bug
Components: process
Affects Versions: 3.0.2-incubating
Reporter: pieter martin
Assignee: Marko A. Rodriguez
{noformat}
@Test
public void testTimesAfterRepeat() {
final TinkerGraph g = TinkerGraph.open();
Vertex a1 = g.addVertex(T.label, "A", "name", "a1");
Vertex b1 = g.addVertex(T.label, "B", "name", "b1");
Vertex c1 = g.addVertex(T.label, "C", "name", "c1");
Vertex d1 = g.addVertex(T.label, "D", "name", "d1");
a1.addEdge("ab", b1);
b1.addEdge("bc", c1);
c1.addEdge("cd", d1);
List<Vertex> vertices =
g.traversal().V().hasLabel("A").emit().repeat(__.out()).times(2).toList();
assertEquals(4, vertices.size());
}
{noformat}
This test will fail for as it will return only 3 vertices.
The current implementation of RepeatStep implements {{while do}} semantics for
a {{LoopTraversal}} regardless of the position of the {{times}} clause in the
gremlin query.
a1->b1->c1->d1
start at a1, emit a1
travers to b1 loop==0
emit b1 travers c1 loop==1
emit c1 traverse d1 loop==2
d1 is the last element so it is returned.
a1, b1, c1 emitted and d1 is the last.
Ultimately if I understand the intended semantics correctly,
{{repeat().times(a)}} is equivalent to {{times(a + 1).repeat()}}
Having a look at {{RepeatStep.standardAlgorithm}} I see that the loop counter
is always incremented before {{doUntil}}. This translates to {{while do}}
semantics. For {{do while}} semantics the increment should occur after the
{{doUntil}}
Or the {{LoopTraversal}} should be smarter about its predicate for {{do while}}
I am testing on the 3.0.2-incubating branch. I have only been working on
repeatSteps that start from a GraphStep. The same applies to starting from a
VertexStep but I am not yet there.
With my current understanding of {{LoopTraversal}} and {{do while}} semantics
the following tests are failling,
{{RepeatTest.g_V_repeatXoutX_timesX2X}}
{{RepeatTest.g_V_repeatXoutX_timesX2X_repeatXinX_timesX2X_name}}
{{PathTest.g_V_repeatXoutX_timesX2X_path_byXitX_byXnameX_byXlangX}}
{{GroupTest.g_V_repeatXbothXfollowedByXX_timesX2X_group_byXsongTypeX_byXcountX}}
{{GroupTest.g_V_repeatXbothXfollowedByXX_timesX2X_groupXaX_byXsongTypeX_byXcountX_capXaX}}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)