You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by sp...@apache.org on 2017/10/13 16:38:04 UTC

[11/13] tinkerpop git commit: Reusing the Expression on each map() as recommended by @twilmes. Also, added a new test project()-based test case that demonstrates that math() works for map key scopes.

Reusing the Expression on each map() as recommended by @twilmes. Also, added a new test project()-based test case that demonstrates that math() works for map key scopes.


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/73b712d2
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/73b712d2
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/73b712d2

Branch: refs/heads/TINKERPOP-1799
Commit: 73b712d20b9cd63dd46245a42d88e0e120ed790c
Parents: e966422
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Thu Oct 5 13:06:03 2017 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Thu Oct 5 13:06:03 2017 -0600

----------------------------------------------------------------------
 .../process/traversal/step/map/MathStep.java      | 15 ++++++++-------
 .../process/traversal/step/map/MathTest.java      | 18 ++++++++++++++++++
 2 files changed, 26 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/73b712d2/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MathStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MathStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MathStep.java
index a10ec5e..b34c3ca 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MathStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MathStep.java
@@ -48,6 +48,7 @@ public final class MathStep<S> extends MapStep<S, Double> implements ByModulatin
     private static final String CURRENT = "_";
     private final String equation;
     private final Set<String> variables;
+    private final Expression expression;
     private TraversalRing<S, Number> traversalRing = new TraversalRing<>();
     private Set<String> keepLabels;
 
@@ -55,7 +56,10 @@ public final class MathStep<S> extends MapStep<S, Double> implements ByModulatin
         super(traversal);
         this.equation = equation;
         this.variables = MathStep.getVariables(this.equation);
-
+        this.expression = new ExpressionBuilder(this.equation)
+                .variables(this.variables)
+                .implicitMultiplication(false)
+                .build();
     }
 
     @Override
@@ -65,18 +69,15 @@ public final class MathStep<S> extends MapStep<S, Double> implements ByModulatin
 
     @Override
     protected Double map(final Traverser.Admin<S> traverser) {
-        final Expression expression = new ExpressionBuilder(this.equation)
-                .variables(this.variables)
-                .implicitMultiplication(false)
-                .build();
+        final Expression localExpression = new Expression(this.expression);
         for (final String var : this.variables) {
-            expression.setVariable(var,
+            localExpression.setVariable(var,
                     var.equals(CURRENT) ?
                             TraversalUtil.applyNullable(traverser, this.traversalRing.next()).doubleValue() :
                             TraversalUtil.applyNullable((S) this.getNullableScopeValue(Pop.last, var, traverser), this.traversalRing.next()).doubleValue());
         }
         this.traversalRing.reset();
-        return expression.evaluate();
+        return localExpression.evaluate();
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/73b712d2/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MathTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MathTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MathTest.java
index 9858d28..20d8392 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MathTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MathTest.java
@@ -33,7 +33,10 @@ import java.util.function.BiFunction;
 
 import static org.apache.tinkerpop.gremlin.LoadGraphWith.GraphData.MODERN;
 import static org.apache.tinkerpop.gremlin.process.traversal.Operator.sum;
+import static org.apache.tinkerpop.gremlin.process.traversal.Order.decr;
+import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.bothE;
 import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.in;
+import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.math;
 import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.sack;
 import static org.junit.Assert.assertEquals;
 
@@ -51,6 +54,8 @@ public abstract class MathTest extends AbstractGremlinProcessTest {
 
     public abstract Traversal<Integer, Double> get_g_withSackX1X_injectX1X_repeatXsackXsumX_byXconstantX1XXX_timesX5X_emit_mathXsin__X_byXsackX();
 
+    public abstract Traversal<Vertex, String> get_g_V_projectXa_b_cX_byXbothE_weight_sumX_byXbothE_countX_byXnameX_order_byXmathXa_div_bX_decrX_selectXcX();
+
     @Test
     @LoadGraphWith(MODERN)
     public void g_V_asXaX_outXknowsX_asXbX_mathXa_plus_bX_byXageX() {
@@ -87,6 +92,14 @@ public abstract class MathTest extends AbstractGremlinProcessTest {
         assertEquals(-0.27941549819892586d, traversal.next(), 0.01d);
     }
 
+    @Test
+    @LoadGraphWith(MODERN)
+    public void g_V_projectXa_b_cX_byXbothE_weight_sumX_byXbothE_countX_byXnameX_order_byXmathXa_div_bX_decrX_selectXcX() {
+        final Traversal<Vertex, String> traversal = get_g_V_projectXa_b_cX_byXbothE_weight_sumX_byXbothE_countX_byXnameX_order_byXmathXa_div_bX_decrX_selectXcX();
+        printTraversalForm(traversal);
+        checkResults(Arrays.asList("ripple", "josh", "marko", "vadas", "lop", "peter"), traversal);
+    }
+
     public static class Traversals extends MathTest {
 
         @Override
@@ -108,5 +121,10 @@ public abstract class MathTest extends AbstractGremlinProcessTest {
         public Traversal<Integer, Double> get_g_withSackX1X_injectX1X_repeatXsackXsumX_byXconstantX1XXX_timesX5X_emit_mathXsin__X_byXsackX() {
             return g.withSack(1).inject(1).repeat(__.sack((BiFunction) sum).by(__.constant(1))).times(10).emit().math("sin _").by(sack());
         }
+
+        @Override
+        public Traversal<Vertex, String> get_g_V_projectXa_b_cX_byXbothE_weight_sumX_byXbothE_countX_byXnameX_order_byXmathXa_div_bX_decrX_selectXcX() {
+            return g.V().project("a", "b", "c").by(bothE().values("weight").sum()).by(bothE().count()).by("name").order().by(math("a / b"), decr).select("c");
+        }
     }
 }
\ No newline at end of file