aboutsummaryrefslogtreecommitdiffstats
path: root/indexinglanguage
diff options
context:
space:
mode:
authorGeir Storli <geirst@verizonmedia.com>2019-02-14 10:36:11 +0100
committerGeir Storli <geirst@verizonmedia.com>2019-02-14 10:36:11 +0100
commit28649e6756b73c399ac498f2688fcfd86bb02c7e (patch)
treecd8def484b0dde0faac19ea1665104e79835a101 /indexinglanguage
parent3a83cb08d54ec3fe715f78333e7c26bff8564677 (diff)
Test that TensorModifyUpdate and TensorAddUpdate pass through unmodified.
Diffstat (limited to 'indexinglanguage')
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/FieldUpdateHelper.java2
-rw-r--r--indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/DocumentToValueUpdateTestCase.java62
2 files changed, 62 insertions, 2 deletions
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/FieldUpdateHelper.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/FieldUpdateHelper.java
index 40a3f832592..f38c3af05b8 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/FieldUpdateHelper.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/FieldUpdateHelper.java
@@ -91,10 +91,8 @@ public abstract class FieldUpdateHelper {
throw new IllegalArgumentException("Expected multi-value data type, got " + val.getDataType().getName() + ".");
}
} else if (upd instanceof TensorModifyUpdate) {
- // TODO: apply update to field value when supported in TensorModifyUpdate in Java?
return val;
} else if (upd instanceof TensorAddUpdate) {
- // TODO: apply update to field value when supported in TensorAddUpdate in Java?
return val;
}
throw new UnsupportedOperationException("Value update type " + upd.getClass().getName() + " not supported.");
diff --git a/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/DocumentToValueUpdateTestCase.java b/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/DocumentToValueUpdateTestCase.java
index 83947b5f64d..b9e9e54bc22 100644
--- a/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/DocumentToValueUpdateTestCase.java
+++ b/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/DocumentToValueUpdateTestCase.java
@@ -4,6 +4,8 @@ package com.yahoo.vespa.indexinglanguage;
import com.yahoo.document.*;
import com.yahoo.document.datatypes.*;
import com.yahoo.document.update.*;
+import com.yahoo.tensor.Tensor;
+import com.yahoo.tensor.TensorType;
import org.junit.Test;
import static org.junit.Assert.*;
@@ -337,4 +339,64 @@ public class DocumentToValueUpdateTestCase {
assertTrue(valueUpd instanceof RemoveValueUpdate);
assertEquals(new StringFieldValue("bar"), valueUpd.getValue());
}
+
+ private static class TensorFixture {
+
+ private DocumentType docType = new DocumentType("test");
+ private String tensorField;
+
+ public TensorFixture() {
+ this("sparse_tensor", "tensor(x{})");
+ }
+
+ public TensorFixture(String tensorField, String typeSpec) {
+ this.tensorField = tensorField;
+ docType.addField(new Field(tensorField, DataType.getTensor(TensorType.fromSpec(typeSpec))));
+ }
+
+ Document assertTensorUpdateNotApplied(ValueUpdate tensorUpdate) {
+ Document result = FieldUpdateHelper.newPartialDocument(docType, null, docType.getField(tensorField), tensorUpdate);
+ assertNotNull(result);
+
+ TensorFieldValue tensor = (TensorFieldValue) result.getFieldValue(tensorField);
+ assertTrue(tensor.getTensor().isEmpty());
+
+ return result;
+ }
+
+ public <T extends ValueUpdate> void assertTensorUpdatePassesThrough(T tensorUpdate, Document doc) {
+ UpdateAdapter adapter = FieldUpdateAdapter.fromPartialUpdate(new SimpleDocumentAdapter(null, doc), tensorUpdate);
+
+ DocumentUpdate docUpdate = adapter.getOutput();
+ assertNotNull(docUpdate);
+ assertEquals(1, docUpdate.fieldUpdates().size());
+
+ FieldUpdate fieldUpdate = docUpdate.fieldUpdates().iterator().next();
+ assertNotNull(fieldUpdate);
+ assertEquals(1, fieldUpdate.getValueUpdates().size());
+ ValueUpdate valueUpdate = fieldUpdate.getValueUpdate(0);
+ T actValueUpdate = (T) valueUpdate;
+ assertEquals(tensorUpdate, actValueUpdate);
+ }
+ }
+
+ @Test
+ public void tensor_modify_update_passes_through_unmodified() {
+ TensorFixture f = new TensorFixture();
+ TensorModifyUpdate modifyUpdate = new TensorModifyUpdate(TensorModifyUpdate.Operation.REPLACE,
+ new TensorFieldValue(Tensor.from("tensor(x{})", "{{x:a}:3}")));
+
+ Document doc = f.assertTensorUpdateNotApplied(modifyUpdate);
+ f.assertTensorUpdatePassesThrough(modifyUpdate, doc);
+ }
+
+ @Test
+ public void tensor_add_update_passes_through_unmodified() {
+ TensorFixture f = new TensorFixture();
+ TensorAddUpdate addUpdate = new TensorAddUpdate(new TensorFieldValue(Tensor.from("tensor(x{})", "{{x:a}:3}")));
+
+ Document doc = f.assertTensorUpdateNotApplied(addUpdate);
+ f.assertTensorUpdatePassesThrough(addUpdate, doc);
+ }
+
}