diff options
author | Tor Egge <Tor.Egge@broadpark.no> | 2019-02-01 12:25:36 +0100 |
---|---|---|
committer | Tor Egge <Tor.Egge@broadpark.no> | 2019-02-01 13:02:28 +0100 |
commit | 258e4535079ce1af74bdc114df0ed9b5e818eb7c (patch) | |
tree | 285b62d9679558487b1a8d2cc2a9da1e14c1f560 /eval/src/tests/tensor | |
parent | 809e726cb714fd357eec4de4553e0b5d331423ba (diff) |
Apply tensor modify update to given field value.
Diffstat (limited to 'eval/src/tests/tensor')
-rw-r--r-- | eval/src/tests/tensor/tensor_modify/CMakeLists.txt | 8 | ||||
-rw-r--r-- | eval/src/tests/tensor/tensor_modify/tensor_modify_test.cpp | 68 |
2 files changed, 76 insertions, 0 deletions
diff --git a/eval/src/tests/tensor/tensor_modify/CMakeLists.txt b/eval/src/tests/tensor/tensor_modify/CMakeLists.txt new file mode 100644 index 00000000000..2d4055db7e2 --- /dev/null +++ b/eval/src/tests/tensor/tensor_modify/CMakeLists.txt @@ -0,0 +1,8 @@ +# Copyright 2019 Oath Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +vespa_add_executable(eval_tensor_modify_test_app TEST + SOURCES + tensor_modify_test.cpp + DEPENDS + vespaeval +) +vespa_add_test(NAME eval_tensor_modify_test_app COMMAND eval_tensor_modify_test_app) diff --git a/eval/src/tests/tensor/tensor_modify/tensor_modify_test.cpp b/eval/src/tests/tensor/tensor_modify/tensor_modify_test.cpp new file mode 100644 index 00000000000..67dc033fb80 --- /dev/null +++ b/eval/src/tests/tensor/tensor_modify/tensor_modify_test.cpp @@ -0,0 +1,68 @@ +// Copyright 2019 Oath Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. + +#include <vespa/vespalib/testkit/test_kit.h> +#include <vespa/vespalib/util/stringfmt.h> +#include <vespa/eval/tensor/cell_values.h> +#include <vespa/eval/tensor/sparse/sparse_tensor.h> +#include <vespa/eval/tensor/default_tensor_engine.h> +#include <vespa/eval/eval/tensor_spec.h> + +using vespalib::eval::Value; +using vespalib::eval::TensorSpec; +using namespace vespalib::tensor; + +namespace { + +double +replace(double, double b) +{ + return b; +} + +template <typename Tensor> +const Tensor *asTensor(Value &value) +{ + auto *tensor = dynamic_cast<const Tensor *>(value.as_tensor()); + ASSERT_TRUE(tensor); + return tensor; +} + +} + +void checkUpdate(const TensorSpec &source, const TensorSpec &update, const TensorSpec &expect) { + auto sourceValue = DefaultTensorEngine::ref().from_spec(source); + auto sourceTensor = asTensor<Tensor>(*sourceValue); + auto updateValue = DefaultTensorEngine::ref().from_spec(update); + auto updateTensor = asTensor<SparseTensor>(*updateValue); + const CellValues cellValues(*updateTensor); + auto actualTensor = sourceTensor->modify(replace, cellValues); + auto actual = actualTensor->toSpec(); + auto expectValue = DefaultTensorEngine::ref().from_spec(expect); + auto expectTensor = asTensor<Tensor>(*expectValue); + auto expectPadded = expectTensor->toSpec(); + EXPECT_EQUAL(actual, expectPadded); +} + +TEST("require that sparse tensors can be modified") { + checkUpdate(TensorSpec("tensor(x{},y{})") + .add({{"x","8"},{"y","9"}}, 11) + .add({{"x","9"},{"y","9"}}, 11), + TensorSpec("tensor(x{},y{})") + .add({{"x","8"},{"y","9"}}, 2), + TensorSpec("tensor(x{},y{})") + .add({{"x","8"},{"y","9"}}, 2) + .add({{"x","9"},{"y","9"}}, 11)); +} + +TEST("require that dense tensors can be modified") { + checkUpdate(TensorSpec("tensor(x[10],y[10])") + .add({{"x",8},{"y",9}}, 11) + .add({{"x",9},{"y",9}}, 11), + TensorSpec("tensor(x{},y{})") + .add({{"x","8"},{"y","9"}}, 2), + TensorSpec("tensor(x[10],y[10])") + .add({{"x",8},{"y",9}}, 2) + .add({{"x",9},{"y",9}}, 11)); +} + +TEST_MAIN() { TEST_RUN_ALL(); } |