TINKERPOP-1968 Make Pop tests more GLV friendly The java/groovy tests were nicer before, but they don't translate to GLV tests well. Had to change them to get them off the ignore list.
Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/d9c462ee Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/d9c462ee Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/d9c462ee Branch: refs/heads/TINKERPOP-1968 Commit: d9c462ee335396af633f865a0803d70281d23e8f Parents: 59c0ad0 Author: Stephen Mallette <sp...@genoprime.com> Authored: Sat May 19 07:16:09 2018 -0400 Committer: Stephen Mallette <sp...@genoprime.com> Committed: Mon May 21 13:14:23 2018 -0400 ---------------------------------------------------------------------- .../traversal/step/map/GroovySelectTest.groovy | 80 +++++- gremlin-test/features/map/Select.feature | 146 ++++++++++- .../process/traversal/step/map/SelectTest.java | 245 ++++++++++++++++--- .../gremlin/process/FeatureCoverageTest.java | 5 - 4 files changed, 419 insertions(+), 57 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d9c462ee/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovySelectTest.groovy ---------------------------------------------------------------------- diff --git a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovySelectTest.groovy b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovySelectTest.groovy index 89fc691..1ae322d 100644 --- a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovySelectTest.groovy +++ b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovySelectTest.groovy @@ -172,27 +172,83 @@ public abstract class GroovySelectTest { // TINKERPOP-619: select should not throw @Override - public Traversal<Vertex, Object> get_g_V_selectXaX(final Pop pop) { - final String root = "g.V." - new ScriptTraversal<>(g, "gremlin-groovy", root + (null == pop ? "select('a')" : "select(${pop}, 'a')")) + public Traversal<Vertex, Object> get_g_V_selectXaX() { + new ScriptTraversal<>(g, "gremlin-groovy", "g.V.select('a')") } @Override - public Traversal<Vertex, Map<String, Object>> get_g_V_selectXa_bX(final Pop pop) { - final String root = "g.V." - new ScriptTraversal<>(g, "gremlin-groovy", root + (null == pop ? "select('a', 'b')" : "select(${pop}, 'a', 'b')")) + public Traversal<Vertex, Map<String, Object>> get_g_V_selectXa_bX() { + new ScriptTraversal<>(g, "gremlin-groovy", "g.V.select('a', 'b')") } @Override - public Traversal<Vertex, Object> get_g_V_valueMap_selectXpop_aX(final Pop pop) { - final String root = "g.V.valueMap." - new ScriptTraversal<>(g, "gremlin-groovy", root + (null == pop ? "select('a')" : "select(${pop}, 'a')")) + public Traversal<Vertex, Object> get_g_V_valueMap_selectXaX() { + new ScriptTraversal<>(g, "gremlin-groovy", "g.V.valueMap().select('a')") } @Override - public Traversal<Vertex, Map<String, Object>> get_g_V_valueMap_selectXpop_a_bX(final Pop pop) { - final String root = "g.V.valueMap." - new ScriptTraversal<>(g, "gremlin-groovy", root + (null == pop ? "select('a', 'b')" : "select(${pop}, 'a', 'b')")) + public Traversal<Vertex, Map<String, Object>> get_g_V_valueMap_selectXa_bX() { + new ScriptTraversal<>(g, "gremlin-groovy", "g.V.valueMap().select('a', 'b')") + } + + @Override + public Traversal<Vertex, Object> get_g_V_selectXfirst_aX() { + new ScriptTraversal<>(g, "gremlin-groovy", "g.V.select(Pop.first, 'a')") + } + + @Override + public Traversal<Vertex, Map<String, Object>> get_g_V_selectXfirst_a_bX() { + new ScriptTraversal<>(g, "gremlin-groovy", "g.V.select(Pop.first, 'a', 'b')") + } + + @Override + public Traversal<Vertex, Object> get_g_V_valueMap_selectXfirst_aX() { + new ScriptTraversal<>(g, "gremlin-groovy", "g.V.valueMap().select(Pop.first, 'a')") + } + + @Override + public Traversal<Vertex, Map<String, Object>> get_g_V_valueMap_selectXfirst_a_bX() { + new ScriptTraversal<>(g, "gremlin-groovy", "g.V.valueMap().select(Pop.first, 'a', 'b')") + } + + @Override + public Traversal<Vertex, Object> get_g_V_selectXlast_aX() { + new ScriptTraversal<>(g, "gremlin-groovy", "g.V.select(Pop.last, 'a')") + } + + @Override + public Traversal<Vertex, Map<String, Object>> get_g_V_selectXlast_a_bX() { + new ScriptTraversal<>(g, "gremlin-groovy", "g.V.select(Pop.last, 'a', 'b')") + } + + @Override + public Traversal<Vertex, Object> get_g_V_valueMap_selectXlast_aX() { + new ScriptTraversal<>(g, "gremlin-groovy", "g.V.valueMap().select(Pop.last, 'a')") + } + + @Override + public Traversal<Vertex, Map<String, Object>> get_g_V_valueMap_selectXlast_a_bX() { + new ScriptTraversal<>(g, "gremlin-groovy", "g.V.valueMap().select(Pop.last, 'a', 'b')") + } + + @Override + public Traversal<Vertex, Object> get_g_V_selectXall_aX() { + new ScriptTraversal<>(g, "gremlin-groovy", "g.V.select(Pop.all, 'a')") + } + + @Override + public Traversal<Vertex, Map<String, Object>> get_g_V_selectXall_a_bX() { + new ScriptTraversal<>(g, "gremlin-groovy", "g.V.select(Pop.all, 'a', 'b')") + } + + @Override + public Traversal<Vertex, Object> get_g_V_valueMap_selectXall_aX() { + new ScriptTraversal<>(g, "gremlin-groovy", "g.V.valueMap().select(Pop.all, 'a')") + } + + @Override + public Traversal<Vertex, Map<String, Object>> get_g_V_valueMap_selectXall_a_bX() { + new ScriptTraversal<>(g, "gremlin-groovy", "g.V.valueMap().select(Pop.all, 'a', 'b')") } // when labels don't exist http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d9c462ee/gremlin-test/features/map/Select.feature ---------------------------------------------------------------------- diff --git a/gremlin-test/features/map/Select.feature b/gremlin-test/features/map/Select.feature index 35d9322..023b2a4 100644 --- a/gremlin-test/features/map/Select.feature +++ b/gremlin-test/features/map/Select.feature @@ -514,4 +514,148 @@ Feature: Step - select() Then the result should be unordered | result | | d[2].l | - | d[2].l | \ No newline at end of file + | d[2].l | + + Scenario: g_V_selectXaX + Given the modern graph + And the traversal of + """ + g.V().select("a") + """ + When iterated to list + Then the result should be empty + + Scenario: g_V_selectXa_bX + Given the modern graph + And the traversal of + """ + g.V().select("a","b") + """ + When iterated to list + Then the result should be empty + + Scenario: g_V_valueMap_selectXaX + Given the modern graph + And the traversal of + """ + g.V().valueMap().select("a") + """ + When iterated to list + Then the result should be empty + + Scenario: g_V_valueMap_selectXa_bX + Given the modern graph + And the traversal of + """ + g.V().valueMap().select("a","b") + """ + When iterated to list + Then the result should be empty + + Scenario: g_V_selectXfirst_aX + Given the modern graph + And the traversal of + """ + g.V().select(Pop.first, "a") + """ + When iterated to list + Then the result should be empty + + Scenario: g_V_selectXfirst_a_bX + Given the modern graph + And the traversal of + """ + g.V().select(Pop.first, "a","b") + """ + When iterated to list + Then the result should be empty + + Scenario: g_V_valueMap_selectXfirst_aX + Given the modern graph + And the traversal of + """ + g.V().valueMap().select(Pop.first, "a") + """ + When iterated to list + Then the result should be empty + + Scenario: g_V_valueMap_selectXfirst_a_bX + Given the modern graph + And the traversal of + """ + g.V().valueMap().select(Pop.first, "a","b") + """ + When iterated to list + Then the result should be empty + + Scenario: g_V_selectXlast_aX + Given the modern graph + And the traversal of + """ + g.V().select(Pop.last, "a") + """ + When iterated to list + Then the result should be empty + + Scenario: g_V_selectXlast_a_bX + Given the modern graph + And the traversal of + """ + g.V().select(Pop.last, "a","b") + """ + When iterated to list + Then the result should be empty + + Scenario: g_V_valueMap_selectXlast_aX + Given the modern graph + And the traversal of + """ + g.V().valueMap().select(Pop.last, "a") + """ + When iterated to list + Then the result should be empty + + Scenario: g_V_valueMap_selectXlast_a_bX + Given the modern graph + And the traversal of + """ + g.V().valueMap().select(Pop.last, "a","b") + """ + When iterated to list + Then the result should be empty + + Scenario: g_V_selectXall_aX + Given the modern graph + And the traversal of + """ + g.V().select(Pop.all, "a") + """ + When iterated to list + Then the result should be empty + + Scenario: g_V_selectXall_a_bX + Given the modern graph + And the traversal of + """ + g.V().select(Pop.all, "a","b") + """ + When iterated to list + Then the result should be empty + + Scenario: g_V_valueMap_selectXall_aX + Given the modern graph + And the traversal of + """ + g.V().valueMap().select(Pop.all, "a") + """ + When iterated to list + Then the result should be empty + + Scenario: g_V_valueMap_selectXall_a_bX + Given the modern graph + And the traversal of + """ + g.V().valueMap().select(Pop.all, "a","b") + """ + When iterated to list + Then the result should be empty \ No newline at end of file http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d9c462ee/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectTest.java ---------------------------------------------------------------------- diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectTest.java index c0486d0..ddbd036 100644 --- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectTest.java +++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectTest.java @@ -24,7 +24,6 @@ import org.apache.tinkerpop.gremlin.process.GremlinProcessRunner; import org.apache.tinkerpop.gremlin.process.traversal.Order; import org.apache.tinkerpop.gremlin.process.traversal.Pop; import org.apache.tinkerpop.gremlin.process.traversal.Traversal; -import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal; import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__; import org.apache.tinkerpop.gremlin.structure.Edge; import org.apache.tinkerpop.gremlin.structure.Vertex; @@ -109,13 +108,37 @@ public abstract class SelectTest extends AbstractGremlinProcessTest { // TINKERPOP-619: select should not throw - public abstract Traversal<Vertex, Object> get_g_V_selectXaX(final Pop pop); + public abstract Traversal<Vertex, Object> get_g_V_selectXaX(); - public abstract Traversal<Vertex, Map<String, Object>> get_g_V_selectXa_bX(final Pop pop); + public abstract Traversal<Vertex, Map<String, Object>> get_g_V_selectXa_bX(); - public abstract Traversal<Vertex, Object> get_g_V_valueMap_selectXpop_aX(final Pop pop); + public abstract Traversal<Vertex, Object> get_g_V_valueMap_selectXaX(); - public abstract Traversal<Vertex, Map<String, Object>> get_g_V_valueMap_selectXpop_a_bX(final Pop pop); + public abstract Traversal<Vertex, Map<String, Object>> get_g_V_valueMap_selectXa_bX(); + + public abstract Traversal<Vertex, Object> get_g_V_selectXfirst_aX(); + + public abstract Traversal<Vertex, Map<String, Object>> get_g_V_selectXfirst_a_bX(); + + public abstract Traversal<Vertex, Object> get_g_V_valueMap_selectXfirst_aX(); + + public abstract Traversal<Vertex, Map<String, Object>> get_g_V_valueMap_selectXfirst_a_bX(); + + public abstract Traversal<Vertex, Object> get_g_V_selectXlast_aX(); + + public abstract Traversal<Vertex, Map<String, Object>> get_g_V_selectXlast_a_bX(); + + public abstract Traversal<Vertex, Object> get_g_V_valueMap_selectXlast_aX(); + + public abstract Traversal<Vertex, Map<String, Object>> get_g_V_valueMap_selectXlast_a_bX(); + + public abstract Traversal<Vertex, Object> get_g_V_selectXall_aX(); + + public abstract Traversal<Vertex, Map<String, Object>> get_g_V_selectXall_a_bX(); + + public abstract Traversal<Vertex, Object> get_g_V_valueMap_selectXall_aX(); + + public abstract Traversal<Vertex, Map<String, Object>> get_g_V_valueMap_selectXall_a_bX(); public abstract Traversal<Vertex, Vertex> get_g_VX1X_asXaX_repeatXout_asXaXX_timesX2X_selectXfirst_aX(final Object v1Id); @@ -502,41 +525,129 @@ public abstract class SelectTest extends AbstractGremlinProcessTest { @Test @LoadGraphWith(MODERN) public void g_V_selectXaX() { - POPS.forEach(pop -> { - final Traversal<Vertex, Object> traversal = get_g_V_selectXaX(pop); - printTraversalForm(traversal); - assertEquals(Collections.emptyList(), traversal.toList()); - }); + final Traversal<Vertex, Object> traversal = get_g_V_selectXaX(); + printTraversalForm(traversal); + assertEquals(Collections.emptyList(), traversal.toList()); } @Test @LoadGraphWith(MODERN) public void g_V_selectXa_bX() { - POPS.forEach(pop -> { - final Traversal<Vertex, Map<String, Object>> traversal = get_g_V_selectXa_bX(pop); - printTraversalForm(traversal); - assertEquals(Collections.emptyList(), traversal.toList()); - }); + final Traversal<Vertex, Map<String, Object>> traversal = get_g_V_selectXa_bX(); + printTraversalForm(traversal); + assertEquals(Collections.emptyList(), traversal.toList()); + } + + @Test + @LoadGraphWith(MODERN) + public void g_V_valueMap_selectXaX() { + final Traversal<Vertex, Object> traversal = get_g_V_valueMap_selectXaX(); + printTraversalForm(traversal); + assertEquals(Collections.emptyList(), traversal.toList()); + } + + @Test + @LoadGraphWith(MODERN) + public void g_V_valueMap_selectXa_bX() { + final Traversal<Vertex, Map<String, Object>> traversal = get_g_V_valueMap_selectXa_bX(); + printTraversalForm(traversal); + assertEquals(Collections.emptyList(), traversal.toList()); + } + + @Test + @LoadGraphWith(MODERN) + public void g_V_selectXfirst_aX() { + final Traversal<Vertex, Object> traversal = get_g_V_selectXfirst_aX(); + printTraversalForm(traversal); + assertEquals(Collections.emptyList(), traversal.toList()); + } + + @Test + @LoadGraphWith(MODERN) + public void g_V_selectXfirst_a_bX() { + final Traversal<Vertex, Map<String, Object>> traversal = get_g_V_selectXfirst_a_bX(); + printTraversalForm(traversal); + assertEquals(Collections.emptyList(), traversal.toList()); + } + + @Test + @LoadGraphWith(MODERN) + public void g_V_valueMap_selectXfirst_aX() { + final Traversal<Vertex, Object> traversal = get_g_V_valueMap_selectXfirst_aX(); + printTraversalForm(traversal); + assertEquals(Collections.emptyList(), traversal.toList()); + } + + @Test + @LoadGraphWith(MODERN) + public void g_V_valueMap_selectXfirst_a_bX() { + final Traversal<Vertex, Map<String, Object>> traversal = get_g_V_valueMap_selectXfirst_a_bX(); + printTraversalForm(traversal); + assertEquals(Collections.emptyList(), traversal.toList()); + } + + @Test + @LoadGraphWith(MODERN) + public void g_V_selectXlast_aX() { + final Traversal<Vertex, Object> traversal = get_g_V_selectXlast_aX(); + printTraversalForm(traversal); + assertEquals(Collections.emptyList(), traversal.toList()); + } + + @Test + @LoadGraphWith(MODERN) + public void g_V_selectXlast_a_bX() { + final Traversal<Vertex, Map<String, Object>> traversal = get_g_V_selectXlast_a_bX(); + printTraversalForm(traversal); + assertEquals(Collections.emptyList(), traversal.toList()); + } + + @Test + @LoadGraphWith(MODERN) + public void g_V_valueMap_selectXlast_aX() { + final Traversal<Vertex, Object> traversal = get_g_V_valueMap_selectXlast_aX(); + printTraversalForm(traversal); + assertEquals(Collections.emptyList(), traversal.toList()); + } + + @Test + @LoadGraphWith(MODERN) + public void g_V_valueMap_selectXlast_a_bX() { + final Traversal<Vertex, Map<String, Object>> traversal = get_g_V_valueMap_selectXlast_a_bX(); + printTraversalForm(traversal); + assertEquals(Collections.emptyList(), traversal.toList()); + } + + @Test + @LoadGraphWith(MODERN) + public void g_V_selectXall_aX() { + final Traversal<Vertex, Object> traversal = get_g_V_selectXall_aX(); + printTraversalForm(traversal); + assertEquals(Collections.emptyList(), traversal.toList()); + } + + @Test + @LoadGraphWith(MODERN) + public void g_V_selectXall_a_bX() { + final Traversal<Vertex, Map<String, Object>> traversal = get_g_V_selectXall_a_bX(); + printTraversalForm(traversal); + assertEquals(Collections.emptyList(), traversal.toList()); } @Test @LoadGraphWith(MODERN) - public void g_V_valueMap_selectXpop_aX() { - POPS.forEach(pop -> { - final Traversal<Vertex, Object> traversal = get_g_V_valueMap_selectXpop_aX(pop); - printTraversalForm(traversal); - assertEquals(Collections.emptyList(), traversal.toList()); - }); + public void g_V_valueMap_selectXall_aX() { + final Traversal<Vertex, Object> traversal = get_g_V_valueMap_selectXall_aX(); + printTraversalForm(traversal); + assertEquals(Collections.emptyList(), traversal.toList()); } @Test @LoadGraphWith(MODERN) - public void g_V_valueMap_selectXpop_a_bX() { - POPS.forEach(pop -> { - final Traversal<Vertex, Map<String, Object>> traversal = get_g_V_valueMap_selectXpop_a_bX(pop); - printTraversalForm(traversal); - assertEquals(Collections.emptyList(), traversal.toList()); - }); + public void g_V_valueMap_selectXall_a_bX() { + final Traversal<Vertex, Map<String, Object>> traversal = get_g_V_valueMap_selectXall_a_bX(); + printTraversalForm(traversal); + assertEquals(Collections.emptyList(), traversal.toList()); } // when labels don't exist @@ -788,27 +899,83 @@ public abstract class SelectTest extends AbstractGremlinProcessTest { // TINKERPOP-619: select should not throw @Override - public Traversal<Vertex, Object> get_g_V_selectXaX(final Pop pop) { - final GraphTraversal<Vertex, Vertex> root = g.V(); - return null == pop ? root.select("a") : root.select(pop, "a"); + public Traversal<Vertex, Object> get_g_V_selectXaX() { + return g.V().select("a"); + } + + @Override + public Traversal<Vertex, Map<String, Object>> get_g_V_selectXa_bX() { + return g.V().select("a", "b"); + } + + @Override + public Traversal<Vertex, Object> get_g_V_valueMap_selectXaX() { + return g.V().valueMap().select("a"); + } + + @Override + public Traversal<Vertex, Map<String, Object>> get_g_V_valueMap_selectXa_bX() { + return g.V().valueMap().select("a", "b"); + } + + @Override + public Traversal<Vertex, Object> get_g_V_selectXfirst_aX() { + return g.V().select(Pop.first, "a"); + } + + @Override + public Traversal<Vertex, Map<String, Object>> get_g_V_selectXfirst_a_bX() { + return g.V().select(Pop.first, "a", "b"); + } + + @Override + public Traversal<Vertex, Object> get_g_V_valueMap_selectXfirst_aX() { + return g.V().valueMap().select(Pop.first, "a"); + } + + @Override + public Traversal<Vertex, Map<String, Object>> get_g_V_valueMap_selectXfirst_a_bX() { + return g.V().valueMap().select(Pop.first, "a", "b"); + } + + @Override + public Traversal<Vertex, Object> get_g_V_selectXlast_aX() { + return g.V().select(Pop.last, "a"); + } + + @Override + public Traversal<Vertex, Map<String, Object>> get_g_V_selectXlast_a_bX() { + return g.V().select(Pop.last, "a", "b"); + } + + @Override + public Traversal<Vertex, Object> get_g_V_valueMap_selectXlast_aX() { + return g.V().valueMap().select(Pop.last, "a"); + } + + @Override + public Traversal<Vertex, Map<String, Object>> get_g_V_valueMap_selectXlast_a_bX() { + return g.V().valueMap().select(Pop.last, "a", "b"); + } + + @Override + public Traversal<Vertex, Object> get_g_V_selectXall_aX() { + return g.V().select(Pop.all, "a"); } @Override - public Traversal<Vertex, Map<String, Object>> get_g_V_selectXa_bX(final Pop pop) { - final GraphTraversal<Vertex, Vertex> root = g.V(); - return null == pop ? root.select("a", "b") : root.select(pop, "a", "b"); + public Traversal<Vertex, Map<String, Object>> get_g_V_selectXall_a_bX() { + return g.V().select(Pop.all, "a", "b"); } @Override - public Traversal<Vertex, Object> get_g_V_valueMap_selectXpop_aX(final Pop pop) { - final GraphTraversal<Vertex, Map<String, Object>> root = g.V().valueMap(); - return null == pop ? root.select("a") : root.select(pop, "a"); + public Traversal<Vertex, Object> get_g_V_valueMap_selectXall_aX() { + return g.V().valueMap().select(Pop.all, "a"); } @Override - public Traversal<Vertex, Map<String, Object>> get_g_V_valueMap_selectXpop_a_bX(final Pop pop) { - final GraphTraversal<Vertex, Map<String, Object>> root = g.V().valueMap(); - return null == pop ? root.select("a", "b") : root.select(pop, "a", "b"); + public Traversal<Vertex, Map<String, Object>> get_g_V_valueMap_selectXall_a_bX() { + return g.V().valueMap().select(Pop.all, "a", "b"); } // when labels don't exist http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d9c462ee/gremlin-test/src/test/java/org/apache/tinkerpop/gremlin/process/FeatureCoverageTest.java ---------------------------------------------------------------------- diff --git a/gremlin-test/src/test/java/org/apache/tinkerpop/gremlin/process/FeatureCoverageTest.java b/gremlin-test/src/test/java/org/apache/tinkerpop/gremlin/process/FeatureCoverageTest.java index 670cae9..5c2d8ed 100644 --- a/gremlin-test/src/test/java/org/apache/tinkerpop/gremlin/process/FeatureCoverageTest.java +++ b/gremlin-test/src/test/java/org/apache/tinkerpop/gremlin/process/FeatureCoverageTest.java @@ -105,11 +105,6 @@ public class FeatureCoverageTest { // GLV suite doesn't support property identifiers and related assertions "g_V_hasXageX_properties_hasXid_nameIdX_value", "g_V_hasXageX_properties_hasXid_nameIdAsStringX_value", - // Pop tests not organized right for GLVs - "g_V_valueMap_selectXpop_aX", - "g_V_selectXa_bX", - "g_V_valueMap_selectXpop_a_bX", - "g_V_selectXaX", // assertion doesn't seem to want to work right for embedded lists "g_V_asXa_bX_out_asXcX_path_selectXkeysX", // ugh - BigInteger?