diff options
author | Tor Egge <Tor.Egge@broadpark.no> | 2019-03-06 18:14:03 +0100 |
---|---|---|
committer | Tor Egge <Tor.Egge@broadpark.no> | 2019-03-07 13:28:48 +0100 |
commit | 93c5cb44ba9f8fa36314b8a4d6d57b75422f8c29 (patch) | |
tree | 0aabf97b84256fe9c10d3d22de0b9ddcf73d9129 /document/src/tests/tensor_fieldvalue | |
parent | 99bcfb517bd0b57c24f81478c3767f1b8d369fb3 (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.cpp | 53 |
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(); } |