aboutsummaryrefslogtreecommitdiffstats
path: root/searchlib/src/main
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@verizonmedia.com>2019-12-14 10:22:01 +0100
committerJon Bratseth <bratseth@verizonmedia.com>2019-12-14 10:22:01 +0100
commit6645edd5b11f011b85a798dcf65fbd771d9509f2 (patch)
treebe0e16c8ed1f8e04ea5c3ebce92e823d6634e292 /searchlib/src/main
parentdba82f117a82c404c63c14884517c838a6fa500d (diff)
Error checking
Diffstat (limited to 'searchlib/src/main')
-rw-r--r--searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/rule/TensorFunctionNode.java10
-rwxr-xr-xsearchlib/src/main/javacc/RankingExpressionParser.jj2
2 files changed, 9 insertions, 3 deletions
diff --git a/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/rule/TensorFunctionNode.java b/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/rule/TensorFunctionNode.java
index a248fa6dd45..6200515462b 100644
--- a/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/rule/TensorFunctionNode.java
+++ b/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/rule/TensorFunctionNode.java
@@ -103,6 +103,9 @@ public class TensorFunctionNode extends CompositeNode {
List<String> denseDimensionOrder = new ArrayList<>(dimensionOrder);
denseDimensionOrder.retainAll(denseSubtype.dimensionNames());
IndexedTensor.Indexes indexes = IndexedTensor.Indexes.of(denseSubtype, denseDimensionOrder);
+ if (indexes.size() != nodes.size())
+ throw new IllegalArgumentException("At '" + mappedDimensionLabel + "': Need " + indexes.size() +
+ " values to fill a dense subspace of " + type + " but got " + nodes.size());
for (ExpressionNode node : nodes) {
indexes.next();
@@ -125,12 +128,15 @@ public class TensorFunctionNode extends CompositeNode {
List<String> dimensionOrder,
List<ExpressionNode> nodes) {
IndexedTensor.Indexes indexes = IndexedTensor.Indexes.of(type, dimensionOrder);
- List<ScalarFunction<Reference>> wrapped = new ArrayList<>();
+ if (indexes.size() != nodes.size())
+ throw new IllegalArgumentException("Need " + indexes.size() + " values to fill " + type + " but got " + nodes.size());
+
+ List<ScalarFunction<Reference>> wrapped = new ArrayList<>(nodes.size());
while (indexes.hasNext()) {
indexes.next();
wrapped.add(wrapScalar(nodes.get((int)indexes.toSourceValueIndex())));
}
- return nodes.stream().map(node -> wrapScalar(node)).collect(Collectors.toList());
+ return wrapped;
}
public static ScalarFunction<Reference> wrapScalar(ExpressionNode node) {
diff --git a/searchlib/src/main/javacc/RankingExpressionParser.jj b/searchlib/src/main/javacc/RankingExpressionParser.jj
index 22d2abd4aef..1bfb13cff6f 100755
--- a/searchlib/src/main/javacc/RankingExpressionParser.jj
+++ b/searchlib/src/main/javacc/RankingExpressionParser.jj
@@ -880,7 +880,7 @@ DynamicTensor indexedTensorValueBody(TensorType type, List dimensionOrder) :
}
{
cells = indexedTensorCells()
- { return DynamicTensor.from(type, TensorFunctionNode.wrapScalars(cells, type, dimensionOrder)); }
+ { return DynamicTensor.from(type, TensorFunctionNode.wrapScalars(type, dimensionOrder, cells)); }
}
void mixedBlock(TensorType type, List dimensionOrder, java.util.Map cellMap) :