diff options
author | Arne Juul <arnej@vespa.ai> | 2023-11-02 19:07:53 +0000 |
---|---|---|
committer | Arne Juul <arnej@vespa.ai> | 2023-11-02 19:54:24 +0000 |
commit | 6fc0b6843b01fa06b1b6719b7640045e29ec40a7 (patch) | |
tree | 653b7b5c65e3762d8182b523464c7b7b4cbe3cb7 /searchlib | |
parent | 26e86a13565abc14337a97a94900d705af5bd0dd (diff) |
test map_subspaces, and test parse of toString()
Diffstat (limited to 'searchlib')
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) { |