From 6645edd5b11f011b85a798dcf65fbd771d9509f2 Mon Sep 17 00:00:00 2001 From: Jon Bratseth Date: Sat, 14 Dec 2019 10:22:01 +0100 Subject: Error checking --- .../searchlib/rankingexpression/rule/TensorFunctionNode.java | 10 ++++++++-- searchlib/src/main/javacc/RankingExpressionParser.jj | 2 +- 2 files changed, 9 insertions(+), 3 deletions(-) (limited to 'searchlib/src/main') 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 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 dimensionOrder, List nodes) { IndexedTensor.Indexes indexes = IndexedTensor.Indexes.of(type, dimensionOrder); - List> wrapped = new ArrayList<>(); + if (indexes.size() != nodes.size()) + throw new IllegalArgumentException("Need " + indexes.size() + " values to fill " + type + " but got " + nodes.size()); + + List> 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 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) : -- cgit v1.2.3