aboutsummaryrefslogtreecommitdiffstats
path: root/document/src/tests/tensor_fieldvalue
diff options
context:
space:
mode:
authorTor Egge <Tor.Egge@broadpark.no>2019-03-06 18:14:03 +0100
committerTor Egge <Tor.Egge@broadpark.no>2019-03-07 13:28:48 +0100
commit93c5cb44ba9f8fa36314b8a4d6d57b75422f8c29 (patch)
tree0aabf97b84256fe9c10d3d22de0b9ddcf73d9129 /document/src/tests/tensor_fieldvalue
parent99bcfb517bd0b57c24f81478c3767f1b8d369fb3 (diff)
Check for assignable tensor type when setting tensor in TensorFieldValue.
Diffstat (limited to 'document/src/tests/tensor_fieldvalue')
-rw-r--r--document/src/tests/tensor_fieldvalue/tensor_fieldvalue_test.cpp53
1 files changed, 47 insertions, 6 deletions
diff --git a/document/src/tests/tensor_fieldvalue/tensor_fieldvalue_test.cpp b/document/src/tests/tensor_fieldvalue/tensor_fieldvalue_test.cpp
index 7a929ae26b4..08e615bccaf 100644
--- a/document/src/tests/tensor_fieldvalue/tensor_fieldvalue_test.cpp
+++ b/document/src/tests/tensor_fieldvalue/tensor_fieldvalue_test.cpp
@@ -4,26 +4,42 @@
#include <vespa/log/log.h>
LOG_SETUP("fieldvalue_test");
+#include <vespa/document/base/exceptions.h>
+#include <vespa/document/datatype/tensor_data_type.h>
#include <vespa/document/fieldvalue/tensorfieldvalue.h>
#include <vespa/eval/tensor/tensor.h>
#include <vespa/eval/tensor/types.h>
#include <vespa/eval/tensor/default_tensor.h>
#include <vespa/eval/tensor/tensor_factory.h>
+#include <vespa/eval/tensor/test/test_utils.h>
#include <vespa/vespalib/testkit/testapp.h>
using namespace document;
using namespace vespalib::tensor;
+using vespalib::eval::TensorSpec;
+using vespalib::eval::ValueType;
+using vespalib::tensor::test::makeTensor;
namespace
{
+TensorDataType xSparseTensorDataType(ValueType::from_spec("tensor(x{})"));
+TensorDataType xySparseTensorDataType(ValueType::from_spec("tensor(x{},y{})"));
+
Tensor::UP
createTensor(const TensorCells &cells, const TensorDimensions &dimensions) {
vespalib::tensor::DefaultTensor::builder builder;
return vespalib::tensor::TensorFactory::create(cells, dimensions, builder);
}
+std::unique_ptr<Tensor>
+makeSimpleTensor()
+{
+ return makeTensor<Tensor>(TensorSpec("tensor(x{},y{})").
+ add({{"x", "4"}, {"y", "5"}}, 7));
+}
+
FieldValue::UP clone(FieldValue &fv) {
auto ret = FieldValue::UP(fv.clone());
EXPECT_NOT_EQUAL(ret.get(), &fv);
@@ -35,10 +51,10 @@ FieldValue::UP clone(FieldValue &fv) {
}
TEST("require that TensorFieldValue can be assigned tensors and cloned") {
- TensorFieldValue noTensorValue;
- TensorFieldValue emptyTensorValue;
- TensorFieldValue twoCellsTwoDimsValue;
- emptyTensorValue = createTensor({}, {});
+ TensorFieldValue noTensorValue(xySparseTensorDataType);
+ TensorFieldValue emptyTensorValue(xySparseTensorDataType);
+ TensorFieldValue twoCellsTwoDimsValue(xySparseTensorDataType);
+ emptyTensorValue = createTensor({}, {"x", "y"});
twoCellsTwoDimsValue = createTensor({ {{{"y", "3"}}, 3},
{{{"x", "4"}, {"y", "5"}}, 7} },
{"x", "y"});
@@ -57,7 +73,7 @@ TEST("require that TensorFieldValue can be assigned tensors and cloned") {
EXPECT_NOT_EQUAL(*emptyClone, *twoClone);
EXPECT_NOT_EQUAL(*twoClone, *noneClone);
EXPECT_NOT_EQUAL(*twoClone, *emptyClone);
- TensorFieldValue twoCellsTwoDimsValue2;
+ TensorFieldValue twoCellsTwoDimsValue2(xySparseTensorDataType);
twoCellsTwoDimsValue2 =
createTensor({ {{{"y", "3"}}, 3},
{{{"x", "4"}, {"y", "5"}}, 7} },
@@ -69,11 +85,36 @@ TEST("require that TensorFieldValue can be assigned tensors and cloned") {
TEST("require that TensorFieldValue::toString works")
{
- TensorFieldValue tensorFieldValue;
+ TensorFieldValue tensorFieldValue(xSparseTensorDataType);
EXPECT_EQUAL("{TensorFieldValue: null}", tensorFieldValue.toString());
tensorFieldValue = createTensor({{{{"x","a"}}, 3}}, {"x"});
EXPECT_EQUAL("{TensorFieldValue: {\"dimensions\":[\"x\"],\"cells\":[{\"address\":{\"x\":\"a\"},\"value\":3}]}}", tensorFieldValue.toString());
}
+TEST("require that wrong tensor type for special case assign throws exception")
+{
+ TensorFieldValue tensorFieldValue(xSparseTensorDataType);
+ EXPECT_EXCEPTION(tensorFieldValue = makeSimpleTensor(),
+ document::WrongTensorTypeException,
+ "WrongTensorTypeException: Field tensor type is 'tensor(x{})' but tensor type is 'tensor(x{},y{})'");
+}
+
+TEST("require that wrong tensor type for copy assign throws exception")
+{
+ TensorFieldValue tensorFieldValue(xSparseTensorDataType);
+ TensorFieldValue simpleTensorFieldValue(xySparseTensorDataType);
+ simpleTensorFieldValue = makeSimpleTensor();
+ EXPECT_EXCEPTION(tensorFieldValue = simpleTensorFieldValue,
+ document::WrongTensorTypeException,
+ "WrongTensorTypeException: Field tensor type is 'tensor(x{})' but tensor type is 'tensor(x{},y{})'");
+}
+
+TEST("require that wrong tensor type for assignDeserialized throws exception")
+{
+ TensorFieldValue tensorFieldValue(xSparseTensorDataType);
+ EXPECT_EXCEPTION(tensorFieldValue.assignDeserialized(makeSimpleTensor()),
+ document::WrongTensorTypeException,
+ "WrongTensorTypeException: Field tensor type is 'tensor(x{})' but tensor type is 'tensor(x{},y{})'");
+}
TEST_MAIN() { TEST_RUN_ALL(); }