aboutsummaryrefslogtreecommitdiffstats
path: root/searchlib
diff options
context:
space:
mode:
authorArne Juul <arnej@vespa.ai>2023-11-02 19:07:53 +0000
committerArne Juul <arnej@vespa.ai>2023-11-02 19:54:24 +0000
commit6fc0b6843b01fa06b1b6719b7640045e29ec40a7 (patch)
tree653b7b5c65e3762d8182b523464c7b7b4cbe3cb7 /searchlib
parent26e86a13565abc14337a97a94900d705af5bd0dd (diff)
test map_subspaces, and test parse of toString()
Diffstat (limited to 'searchlib')
-rw-r--r--searchlib/src/test/java/com/yahoo/searchlib/rankingexpression/evaluation/EvaluationTestCase.java21
-rw-r--r--searchlib/src/test/java/com/yahoo/searchlib/rankingexpression/evaluation/EvaluationTester.java20
2 files changed, 39 insertions, 2 deletions
diff --git a/searchlib/src/test/java/com/yahoo/searchlib/rankingexpression/evaluation/EvaluationTestCase.java b/searchlib/src/test/java/com/yahoo/searchlib/rankingexpression/evaluation/EvaluationTestCase.java
index 6aac6ce0983..f9ba7552560 100644
--- a/searchlib/src/test/java/com/yahoo/searchlib/rankingexpression/evaluation/EvaluationTestCase.java
+++ b/searchlib/src/test/java/com/yahoo/searchlib/rankingexpression/evaluation/EvaluationTestCase.java
@@ -177,6 +177,25 @@ public class EvaluationTestCase {
}
@Test
+ public void testMapSubspaces() {
+ EvaluationTester tester = new EvaluationTester();
+ tester.assertEvaluates("tensor<float>(a{},x[2]):{foo:[2,3],bar:[7,10]}",
+ "map_subspaces(tensor0, f(t)(t))",
+ "tensor<float>(a{},x[2]):{foo:[2,3],bar:[7,10]}");
+ tester.assertEvaluates("tensor<float>(a{},x[2]):{foo:[2,3],bar:[7,10]}",
+ "map_subspaces(tensor0, f(t)(t+2))",
+ "tensor<float>(a{},x[2]):{foo:[0,1],bar:[5,8]}");
+
+ tester.assertEvaluates("tensor<float>(a{},y[2]):{foo:[3,5],bar:[9,11]}",
+ "map_subspaces(tensor0, f(t)(tensor<float>(y[2])(t{x:(y)}+t{x:(y+1)})))",
+ "tensor(a{},x[3]):{foo:[1,2,3],bar:[4,5,6]}");
+
+ tester.assertEvaluates("tensor<double>(a{},x[2]):{foo:[3,5],bar:[9,11]}",
+ "map_subspaces(tensor0, f(t)(tensor(x[2])(t{x:(x)}+t{x:(x+1)})))",
+ "tensor<float>(a{},x[3]):{foo:[1,2,3],bar:[4,5,6]}");
+ }
+
+ @Test
public void testTensorEvaluation() {
EvaluationTester tester = new EvaluationTester();
tester.assertEvaluates("{}", "tensor0", "{}");
@@ -296,7 +315,7 @@ public class EvaluationTestCase {
"{{x:0}:1}", "{}", "{{y:0,z:0}:1}");
tester.assertEvaluates("tensor(x{}):{}",
"tensor0 * tensor1", "{ {x:0}:3 }", "tensor(x{}):{ {x:1}:5 }");
- tester.assertEvaluates("tensor<float>(x{}):{}",
+ tester.assertEvaluates("tensor<double>(x{}):{}",
"tensor0 * tensor1", "{ {x:0}:3 }", "tensor<float>(x{}):{ {x:1}:5 }");
tester.assertEvaluates("{ {x:0}:15 }",
"tensor0 * tensor1", "{ {x:0}:3 }", "{ {x:0}:5 }");
diff --git a/searchlib/src/test/java/com/yahoo/searchlib/rankingexpression/evaluation/EvaluationTester.java b/searchlib/src/test/java/com/yahoo/searchlib/rankingexpression/evaluation/EvaluationTester.java
index cc278b3d73b..e1018e3b2a5 100644
--- a/searchlib/src/test/java/com/yahoo/searchlib/rankingexpression/evaluation/EvaluationTester.java
+++ b/searchlib/src/test/java/com/yahoo/searchlib/rankingexpression/evaluation/EvaluationTester.java
@@ -3,6 +3,7 @@ package com.yahoo.searchlib.rankingexpression.evaluation;
import com.yahoo.searchlib.rankingexpression.RankingExpression;
import com.yahoo.searchlib.rankingexpression.parser.ParseException;
+import com.yahoo.searchlib.rankingexpression.rule.TensorFunctionNode;
import com.yahoo.tensor.Tensor;
import com.yahoo.tensor.TensorType;
@@ -75,7 +76,24 @@ public class EvaluationTester {
RankingExpression expression = new RankingExpression(expressionString);
if ( ! explanation.isEmpty())
explanation = explanation + ": ";
- assertEquals(explanation + expression, value, expression.evaluate(context));
+ var result = expression.evaluate(context);
+ assertEquals(explanation + expression, value, result);
+ assertEquals(value.type().valueType(), result.type().valueType());
+ var root = expression.getRoot();
+ String asString = root.toString();
+ try {
+ expression = new RankingExpression(asString);
+ result = expression.evaluate(context);
+ assertEquals(explanation + expressionString + " -> " + asString, value, result);
+ assertEquals(value.type().valueType(), result.type().valueType());
+ } catch (Exception e) {
+ System.err.println("toString() failure, " + expressionString + " -> " + asString);
+ System.err.println("root: " + root.getClass());
+ if (root instanceof TensorFunctionNode tfn) {
+ System.err.println("root func: " + tfn.function().getClass());
+ }
+ throw new RuntimeException(e);
+ }
return expression;
}
catch (ParseException e) {