aboutsummaryrefslogtreecommitdiffstats
path: root/eval/src/tests/tensor
diff options
context:
space:
mode:
authorArne Juul <arnej@verizonmedia.com>2020-12-03 19:27:47 +0000
committerArne Juul <arnej@verizonmedia.com>2020-12-03 19:27:47 +0000
commit9e7eacc5694ceb32f845df7a0036781c88b0cc15 (patch)
tree1ab39d22962e9bda4df0bba04bd1bb8365c34870 /eval/src/tests/tensor
parent0127a1e99d83b707957b099dd436889583f2b53f (diff)
remove DefaultTensorEngine
Diffstat (limited to 'eval/src/tests/tensor')
-rw-r--r--eval/src/tests/tensor/partial_add/partial_add_test.cpp1
-rw-r--r--eval/src/tests/tensor/partial_modify/partial_modify_test.cpp1
-rw-r--r--eval/src/tests/tensor/partial_remove/partial_remove_test.cpp1
-rw-r--r--eval/src/tests/tensor/tensor_add_operation/CMakeLists.txt9
-rw-r--r--eval/src/tests/tensor/tensor_add_operation/tensor_add_operation_test.cpp85
-rw-r--r--eval/src/tests/tensor/tensor_modify_operation/CMakeLists.txt9
-rw-r--r--eval/src/tests/tensor/tensor_modify_operation/tensor_modify_operation_test.cpp111
-rw-r--r--eval/src/tests/tensor/tensor_remove_operation/CMakeLists.txt9
-rw-r--r--eval/src/tests/tensor/tensor_remove_operation/tensor_remove_operation_test.cpp95
-rw-r--r--eval/src/tests/tensor/tensor_serialization/.gitignore1
-rw-r--r--eval/src/tests/tensor/tensor_serialization/CMakeLists.txt8
-rw-r--r--eval/src/tests/tensor/tensor_serialization/tensor_serialization_test.cpp243
12 files changed, 0 insertions, 573 deletions
diff --git a/eval/src/tests/tensor/partial_add/partial_add_test.cpp b/eval/src/tests/tensor/partial_add/partial_add_test.cpp
index 711bf7a1c49..42db77a311f 100644
--- a/eval/src/tests/tensor/partial_add/partial_add_test.cpp
+++ b/eval/src/tests/tensor/partial_add/partial_add_test.cpp
@@ -3,7 +3,6 @@
#include <vespa/eval/eval/simple_value.h>
#include <vespa/eval/eval/test/tensor_model.hpp>
#include <vespa/eval/eval/value_codec.h>
-#include <vespa/eval/tensor/default_tensor_engine.h>
#include <vespa/eval/tensor/partial_update.h>
#include <vespa/eval/tensor/tensor.h>
#include <vespa/vespalib/util/stringfmt.h>
diff --git a/eval/src/tests/tensor/partial_modify/partial_modify_test.cpp b/eval/src/tests/tensor/partial_modify/partial_modify_test.cpp
index ab04f195b1f..a39bcc87ab3 100644
--- a/eval/src/tests/tensor/partial_modify/partial_modify_test.cpp
+++ b/eval/src/tests/tensor/partial_modify/partial_modify_test.cpp
@@ -3,7 +3,6 @@
#include <vespa/eval/eval/simple_value.h>
#include <vespa/eval/eval/test/tensor_model.hpp>
#include <vespa/eval/eval/value_codec.h>
-#include <vespa/eval/tensor/default_tensor_engine.h>
#include <vespa/eval/tensor/partial_update.h>
#include <vespa/eval/tensor/tensor.h>
#include <vespa/vespalib/util/stringfmt.h>
diff --git a/eval/src/tests/tensor/partial_remove/partial_remove_test.cpp b/eval/src/tests/tensor/partial_remove/partial_remove_test.cpp
index fc22a364e5c..410331c5eb7 100644
--- a/eval/src/tests/tensor/partial_remove/partial_remove_test.cpp
+++ b/eval/src/tests/tensor/partial_remove/partial_remove_test.cpp
@@ -3,7 +3,6 @@
#include <vespa/eval/eval/simple_value.h>
#include <vespa/eval/eval/test/tensor_model.hpp>
#include <vespa/eval/eval/value_codec.h>
-#include <vespa/eval/tensor/default_tensor_engine.h>
#include <vespa/eval/tensor/partial_update.h>
#include <vespa/eval/tensor/tensor.h>
#include <vespa/vespalib/util/stringfmt.h>
diff --git a/eval/src/tests/tensor/tensor_add_operation/CMakeLists.txt b/eval/src/tests/tensor/tensor_add_operation/CMakeLists.txt
deleted file mode 100644
index 275043c8c54..00000000000
--- a/eval/src/tests/tensor/tensor_add_operation/CMakeLists.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-# 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_add_operation_test_app TEST
- SOURCES
- tensor_add_operation_test.cpp
- DEPENDS
- vespaeval
- GTest::GTest
-)
-vespa_add_test(NAME eval_tensor_add_operation_test_app COMMAND eval_tensor_add_operation_test_app)
diff --git a/eval/src/tests/tensor/tensor_add_operation/tensor_add_operation_test.cpp b/eval/src/tests/tensor/tensor_add_operation/tensor_add_operation_test.cpp
deleted file mode 100644
index 1d39a557114..00000000000
--- a/eval/src/tests/tensor/tensor_add_operation/tensor_add_operation_test.cpp
+++ /dev/null
@@ -1,85 +0,0 @@
-// Copyright 2019 Oath Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-
-#include <vespa/eval/eval/tensor_spec.h>
-#include <vespa/eval/tensor/default_tensor_engine.h>
-#include <vespa/eval/tensor/sparse/sparse_tensor.h>
-#include <vespa/eval/tensor/test/test_utils.h>
-#include <vespa/vespalib/gtest/gtest.h>
-
-using vespalib::eval::Value;
-using vespalib::eval::TensorSpec;
-using vespalib::tensor::test::makeTensor;
-using namespace vespalib::tensor;
-
-void
-assertAdd(const TensorSpec &source, const TensorSpec &arg, const TensorSpec &expected)
-{
- auto sourceTensor = makeTensor<Tensor>(source);
- auto argTensor = makeTensor<Tensor>(arg);
- auto resultTensor = sourceTensor->add(*argTensor);
- auto actual = resultTensor->toSpec();
- EXPECT_EQ(actual, expected);
-}
-
-void
-assertNullTensor(const TensorSpec &source, const TensorSpec &arg)
-{
- auto sourceTensor = makeTensor<Tensor>(source);
- auto argTensor = makeTensor<Tensor>(arg);
- auto resultTensor = sourceTensor->add(*argTensor);
- EXPECT_FALSE(resultTensor);
-}
-
-TEST(TensorAddTest, cells_can_be_added_to_a_sparse_tensor)
-{
- assertAdd(TensorSpec("tensor(x{},y{})")
- .add({{"x","a"},{"y","b"}}, 2)
- .add({{"x","c"},{"y","d"}}, 3),
- TensorSpec("tensor(x{},y{})")
- .add({{"x","a"},{"y","b"}}, 5)
- .add({{"x","e"},{"y","f"}}, 7),
- TensorSpec("tensor(x{},y{})")
- .add({{"x","a"},{"y","b"}}, 5)
- .add({{"x","c"},{"y","d"}}, 3)
- .add({{"x","e"},{"y","f"}}, 7));
-}
-
-TEST(TensorAddTest, cells_can_be_added_to_a_mixed_tensor)
-{
- assertAdd(TensorSpec("tensor(x{},y[2])")
- .add({{"x","a"},{"y",0}}, 2)
- .add({{"x","a"},{"y",1}}, 3)
- .add({{"x","b"},{"y",0}}, 4)
- .add({{"x","b"},{"y",1}}, 5),
- TensorSpec("tensor(x{},y[2])")
- .add({{"x","b"},{"y",0}}, 6)
- .add({{"x","b"},{"y",1}}, 7)
- .add({{"x","c"},{"y",0}}, 8)
- .add({{"x","c"},{"y",1}}, 9),
- TensorSpec("tensor(x{},y[2])")
- .add({{"x","a"},{"y",0}}, 2)
- .add({{"x","a"},{"y",1}}, 3)
- .add({{"x","b"},{"y",0}}, 6)
- .add({{"x","b"},{"y",1}}, 7)
- .add({{"x","c"},{"y",0}}, 8)
- .add({{"x","c"},{"y",1}}, 9));
-}
-
-TEST(TensorAddTest, cells_can_be_added_to_empty_mixed_tensor)
-{
- assertAdd(TensorSpec("tensor(x{},y[2])"),
- TensorSpec("tensor(x{},y[2])")
- .add({{"x","b"},{"y",0}}, 6)
- .add({{"x","b"},{"y",1}}, 7),
- TensorSpec("tensor(x{},y[2])")
- .add({{"x","b"},{"y",0}}, 6)
- .add({{"x","b"},{"y",1}}, 7));
-}
-
-TEST(TensorAddTest, tensors_of_different_types_cannot_be_added_together)
-{
- assertNullTensor(TensorSpec("tensor(x{},y[2])"), TensorSpec("tensor(x{},y{})"));
- assertNullTensor(TensorSpec("tensor(x{},y[2])"), TensorSpec("tensor(x{},y[3])"));
-}
-
-GTEST_MAIN_RUN_ALL_TESTS()
diff --git a/eval/src/tests/tensor/tensor_modify_operation/CMakeLists.txt b/eval/src/tests/tensor/tensor_modify_operation/CMakeLists.txt
deleted file mode 100644
index cd4643deae0..00000000000
--- a/eval/src/tests/tensor/tensor_modify_operation/CMakeLists.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-# 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_operation_test_app TEST
- SOURCES
- tensor_modify_operation_test.cpp
- DEPENDS
- vespaeval
- GTest::GTest
-)
-vespa_add_test(NAME eval_tensor_modify_operation_test_app COMMAND eval_tensor_modify_operation_test_app)
diff --git a/eval/src/tests/tensor/tensor_modify_operation/tensor_modify_operation_test.cpp b/eval/src/tests/tensor/tensor_modify_operation/tensor_modify_operation_test.cpp
deleted file mode 100644
index 00ee55ed7af..00000000000
--- a/eval/src/tests/tensor/tensor_modify_operation/tensor_modify_operation_test.cpp
+++ /dev/null
@@ -1,111 +0,0 @@
-// Copyright 2019 Oath Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-
-#include <vespa/eval/eval/operation.h>
-#include <vespa/eval/eval/tensor_spec.h>
-#include <vespa/eval/tensor/cell_values.h>
-#include <vespa/eval/tensor/default_tensor_engine.h>
-#include <vespa/eval/tensor/sparse/sparse_tensor.h>
-#include <vespa/eval/tensor/test/test_utils.h>
-#include <vespa/vespalib/gtest/gtest.h>
-#include <vespa/vespalib/util/stringfmt.h>
-
-using vespalib::eval::Value;
-using vespalib::eval::TensorSpec;
-using vespalib::tensor::test::makeTensor;
-using namespace vespalib::tensor;
-
-void
-checkUpdate(const TensorSpec &source, const TensorSpec &update, const TensorSpec &expect)
-{
- auto sourceTensor = makeTensor<Tensor>(source);
- auto updateTensor = makeTensor<SparseTensor>(update);
- const CellValues cellValues(*updateTensor);
-
- auto actualTensor = sourceTensor->modify(vespalib::eval::operation::Add::f, cellValues);
- auto actual = actualTensor->toSpec();
- auto expectTensor = makeTensor<Tensor>(expect);
- auto expectPadded = expectTensor->toSpec();
- EXPECT_EQ(actual, expectPadded);
-}
-
-TEST(TensorModifyTest, 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"}}, 13)
- .add({{"x","9"},{"y","9"}}, 11));
-}
-
-TEST(TensorModifyTest, 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}}, 13)
- .add({{"x",9},{"y",9}}, 11));
-}
-
-TEST(TensorModifyTest, mixed_tensors_can_be_modified)
-{
- checkUpdate(TensorSpec("tensor(x{},y[2])")
- .add({{"x","a"},{"y",0}}, 2)
- .add({{"x","a"},{"y",1}}, 3)
- .add({{"x","b"},{"y",0}}, 4)
- .add({{"x","b"},{"y",1}}, 5),
- TensorSpec("tensor(x{},y{})")
- .add({{"x","a"},{"y","0"}}, 6)
- .add({{"x","b"},{"y","1"}}, 7),
- TensorSpec("tensor(x{},y[2])")
- .add({{"x","a"},{"y",0}}, 8)
- .add({{"x","a"},{"y",1}}, 3)
- .add({{"x","b"},{"y",0}}, 4)
- .add({{"x","b"},{"y",1}}, 12));
-}
-
-TEST(TensorModifyTest, sparse_tensors_ignore_updates_to_missing_cells)
-{
- checkUpdate(TensorSpec("tensor(x{},y{})")
- .add({{"x","8"},{"y","9"}}, 11)
- .add({{"x","9"},{"y","9"}}, 11),
- TensorSpec("tensor(x{},y{})")
- .add({{"x","7"},{"y","9"}}, 2)
- .add({{"x","8"},{"y","9"}}, 2),
- TensorSpec("tensor(x{},y{})")
- .add({{"x","8"},{"y","9"}}, 13)
- .add({{"x","9"},{"y","9"}}, 11));
-}
-
-TEST(TensorModifyTest, dense_tensors_ignore_updates_to_out_of_range_cells)
-{
- 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)
- .add({{"x","10"},{"y","9"}}, 2),
- TensorSpec("tensor(x[10],y[10])")
- .add({{"x",8},{"y",9}}, 13)
- .add({{"x",9},{"y",9}}, 11));
-}
-
-TEST(TensorModifyTest, mixed_tensors_ignore_updates_to_missing_or_out_of_range_cells)
-{
- checkUpdate(TensorSpec("tensor(x{},y[2])")
- .add({{"x","a"},{"y",0}}, 2)
- .add({{"x","a"},{"y",1}}, 3),
- TensorSpec("tensor(x{},y{})")
- .add({{"x","a"},{"y","2"}}, 4)
- .add({{"x","c"},{"y","0"}}, 5),
- TensorSpec("tensor(x{},y[2])")
- .add({{"x","a"},{"y",0}}, 2)
- .add({{"x","a"},{"y",1}}, 3));
-}
-
-GTEST_MAIN_RUN_ALL_TESTS()
diff --git a/eval/src/tests/tensor/tensor_remove_operation/CMakeLists.txt b/eval/src/tests/tensor/tensor_remove_operation/CMakeLists.txt
deleted file mode 100644
index a302cc528e0..00000000000
--- a/eval/src/tests/tensor/tensor_remove_operation/CMakeLists.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-# 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_remove_operation_test_app TEST
- SOURCES
- tensor_remove_operation_test.cpp
- DEPENDS
- vespaeval
- GTest::GTest
-)
-vespa_add_test(NAME eval_tensor_remove_operation_test_app COMMAND eval_tensor_remove_operation_test_app)
diff --git a/eval/src/tests/tensor/tensor_remove_operation/tensor_remove_operation_test.cpp b/eval/src/tests/tensor/tensor_remove_operation/tensor_remove_operation_test.cpp
deleted file mode 100644
index ceeaf2c99da..00000000000
--- a/eval/src/tests/tensor/tensor_remove_operation/tensor_remove_operation_test.cpp
+++ /dev/null
@@ -1,95 +0,0 @@
-// Copyright 2019 Oath Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-
-#include <vespa/eval/eval/tensor_spec.h>
-#include <vespa/eval/tensor/cell_values.h>
-#include <vespa/eval/tensor/default_tensor_engine.h>
-#include <vespa/eval/tensor/sparse/sparse_tensor.h>
-#include <vespa/eval/tensor/test/test_utils.h>
-#include <vespa/vespalib/gtest/gtest.h>
-
-using vespalib::eval::Value;
-using vespalib::eval::TensorSpec;
-using vespalib::tensor::test::makeTensor;
-using namespace vespalib::tensor;
-
-void
-assertRemove(const TensorSpec &source, const TensorSpec &arg, const TensorSpec &expected)
-{
- auto sourceTensor = makeTensor<Tensor>(source);
- auto argTensor = makeTensor<SparseTensor>(arg);
- auto resultTensor = sourceTensor->remove(CellValues(*argTensor));
- auto actual = resultTensor->toSpec();
- EXPECT_EQ(actual, expected);
-}
-
-TEST(TensorRemoveTest, cells_can_be_removed_from_a_sparse_tensor)
-{
- assertRemove(TensorSpec("tensor(x{},y{})")
- .add({{"x","a"},{"y","b"}}, 2)
- .add({{"x","c"},{"y","d"}}, 3),
- TensorSpec("tensor(x{},y{})")
- .add({{"x","c"},{"y","d"}}, 1)
- .add({{"x","e"},{"y","f"}}, 1),
- TensorSpec("tensor(x{},y{})")
- .add({{"x","a"},{"y","b"}}, 2));
-}
-
-TEST(TensorRemoveTest, all_cells_can_be_removed_from_a_sparse_tensor)
-{
- assertRemove(TensorSpec("tensor(x{},y{})")
- .add({{"x","a"},{"y","b"}}, 2),
- TensorSpec("tensor(x{},y{})")
- .add({{"x","a"},{"y","b"}}, 1),
- TensorSpec("tensor(x{},y{})"));
-}
-
-TEST(TensorRemoveTest, cells_can_be_removed_from_a_mixed_tensor)
-{
- assertRemove(TensorSpec("tensor(x{},y[2])")
- .add({{"x","a"},{"y",0}}, 2)
- .add({{"x","a"},{"y",1}}, 3)
- .add({{"x","b"},{"y",0}}, 4)
- .add({{"x","b"},{"y",1}}, 5),
- TensorSpec("tensor(x{})")
- .add({{"x","b"}}, 1)
- .add({{"x","c"}}, 1),
- TensorSpec("tensor(x{},y[2])")
- .add({{"x","a"},{"y",0}}, 2)
- .add({{"x","a"},{"y",1}}, 3));
-
- assertRemove(TensorSpec("tensor(x{},y{},z[2])")
- .add({{"x","a"},{"y","c"},{"z",0}}, 2)
- .add({{"x","a"},{"y","c"},{"z",1}}, 3)
- .add({{"x","b"},{"y","c"},{"z",0}}, 4)
- .add({{"x","b"},{"y","c"},{"z",1}}, 5),
- TensorSpec("tensor(x{},y{})")
- .add({{"x","b"},{"y","c"}}, 1)
- .add({{"x","c"},{"y","c"}}, 1),
- TensorSpec("tensor(x{},y{},z[2])")
- .add({{"x","a"},{"y","c"},{"z",0}}, 2)
- .add({{"x","a"},{"y","c"},{"z",1}}, 3));
-
- assertRemove(TensorSpec("tensor(x{},y[1],z[2])")
- .add({{"x","a"},{"y",0},{"z",0}}, 2)
- .add({{"x","a"},{"y",0},{"z",1}}, 3)
- .add({{"x","b"},{"y",0},{"z",0}}, 4)
- .add({{"x","b"},{"y",0},{"z",1}}, 5),
- TensorSpec("tensor(x{})")
- .add({{"x","b"}}, 1)
- .add({{"x","c"}}, 1),
- TensorSpec("tensor(x{},y[1],z[2])")
- .add({{"x","a"},{"y",0},{"z",0}}, 2)
- .add({{"x","a"},{"y",0},{"z",1}}, 3));
-}
-
-TEST(TensorRemoveTest, all_cells_can_be_removed_from_a_mixed_tensor)
-{
- assertRemove(TensorSpec("tensor(x{},y[2])")
- .add({{"x","a"},{"y",0}}, 2)
- .add({{"x","a"},{"y",1}}, 3),
- TensorSpec("tensor(x{})")
- .add({{"x","a"}}, 1),
- TensorSpec("tensor(x{},y[2])"));
-}
-
-GTEST_MAIN_RUN_ALL_TESTS()
diff --git a/eval/src/tests/tensor/tensor_serialization/.gitignore b/eval/src/tests/tensor/tensor_serialization/.gitignore
deleted file mode 100644
index f8525561c6b..00000000000
--- a/eval/src/tests/tensor/tensor_serialization/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-vespalib_tensor_serialization_test_app
diff --git a/eval/src/tests/tensor/tensor_serialization/CMakeLists.txt b/eval/src/tests/tensor/tensor_serialization/CMakeLists.txt
deleted file mode 100644
index b9fc7e0d544..00000000000
--- a/eval/src/tests/tensor/tensor_serialization/CMakeLists.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-# Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-vespa_add_executable(eval_tensor_serialization_test_app TEST
- SOURCES
- tensor_serialization_test.cpp
- DEPENDS
- vespaeval
-)
-vespa_add_test(NAME eval_tensor_serialization_test_app COMMAND eval_tensor_serialization_test_app)
diff --git a/eval/src/tests/tensor/tensor_serialization/tensor_serialization_test.cpp b/eval/src/tests/tensor/tensor_serialization/tensor_serialization_test.cpp
deleted file mode 100644
index 358f5d36101..00000000000
--- a/eval/src/tests/tensor/tensor_serialization/tensor_serialization_test.cpp
+++ /dev/null
@@ -1,243 +0,0 @@
-// Copyright 2017 Yahoo Holdings. 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/eval/tensor/sparse/sparse_tensor.h>
-#include <vespa/eval/tensor/types.h>
-#include <vespa/eval/tensor/default_tensor_engine.h>
-#include <vespa/eval/tensor/serialization/typed_binary_format.h>
-#include <vespa/eval/tensor/serialization/sparse_binary_format.h>
-#include <vespa/vespalib/objects/nbostream.h>
-#include <vespa/vespalib/objects/hexdump.h>
-#include <ostream>
-#include <vespa/eval/tensor/dense/dense_tensor_view.h>
-#include <vespa/eval/eval/value_codec.h>
-#include <vespa/eval/eval/simple_value.h>
-
-using namespace vespalib::tensor;
-using vespalib::eval::TensorSpec;
-using vespalib::nbostream;
-using ExpBuffer = std::vector<uint8_t>;
-
-namespace std {
-
-bool operator==(const std::vector<uint8_t> &exp, const nbostream &stream)
-{
- return ((exp.size() == stream.size()) &&
- (memcmp(&exp[0], stream.peek(), exp.size()) == 0));
-}
-
-std::ostream &operator<<(std::ostream &out, const std::vector<uint8_t> &rhs)
-{
- out << vespalib::HexDump(&rhs[0], rhs.size());
- return out;
-}
-
-}
-
-//-----------------------------------------------------------------------------
-
-template <typename T>
-void verify_cells_only(const ExpBuffer &exp, const TensorSpec &spec) {
- nbostream input(&exp[0], exp.size());
- std::vector<T> cells;
- TypedBinaryFormat::deserializeCellsOnlyFromDenseTensors(input, cells);
- ASSERT_EQUAL(cells.size(), spec.cells().size());
- size_t i = 0;
- for (const auto &cell: spec.cells()) {
- EXPECT_EQUAL(cells[i++], cell.second.value);
- }
- ASSERT_EQUAL(i, cells.size());
-}
-
-TensorSpec verify_new_value_serialized(const ExpBuffer &exp, const TensorSpec &spec) {
- const auto &factory = vespalib::eval::SimpleValueBuilderFactory::get();
- auto new_value = vespalib::eval::value_from_spec(spec, factory);
- auto new_value_spec = vespalib::eval::spec_from_value(*new_value);
- nbostream actual;
- vespalib::eval::encode_value(*new_value, actual);
- ASSERT_EQUAL(exp, actual);
- auto new_decoded = vespalib::eval::decode_value(actual, factory);
- auto new_decoded_spec = vespalib::eval::spec_from_value(*new_decoded);
- EXPECT_EQUAL(0u, actual.size());
- EXPECT_EQUAL(new_value_spec, new_decoded_spec);
- if (new_value->type().is_dense()) {
- TEST_DO(verify_cells_only<float>(exp, new_value_spec));
- TEST_DO(verify_cells_only<double>(exp, new_value_spec));
- }
- return new_decoded_spec;
-}
-
-void verify_serialized(const ExpBuffer &exp, const TensorSpec &spec) {
- auto &engine = DefaultTensorEngine::ref();
- auto value = engine.from_spec(spec);
- auto value_spec = engine.to_spec(*value);
- nbostream actual;
- engine.encode(*value, actual);
- EXPECT_EQUAL(exp, actual);
- auto decoded = engine.decode(actual);
- auto decoded_spec = engine.to_spec(*decoded);
- EXPECT_EQUAL(0u, actual.size());
- EXPECT_EQUAL(value_spec, decoded_spec);
- if (value->type().is_dense()) {
- TEST_DO(verify_cells_only<float>(exp, value_spec));
- TEST_DO(verify_cells_only<double>(exp, value_spec));
- }
- auto new_value_spec = verify_new_value_serialized(exp, spec);
- EXPECT_EQUAL(value_spec, new_value_spec);
-}
-
-//-----------------------------------------------------------------------------
-
-TEST("test tensor serialization for SparseTensor") {
- TEST_DO(verify_serialized({ 0x01, 0x01, 0x01, 0x78, 0x00 },
- TensorSpec("tensor(x{})")));
- TEST_DO(verify_serialized({ 0x01, 0x02, 0x01, 0x78, 0x01, 0x79, 0x00 },
- TensorSpec("tensor(x{},y{})")));
- TEST_DO(verify_serialized({ 0x01, 0x01, 0x01, 0x78, 0x01, 0x01, 0x31, 0x40,
- 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
- TensorSpec("tensor(x{})")
- .add({{"x", "1"}}, 3)));
- TEST_DO(verify_serialized({ 0x01, 0x02, 0x01, 0x78, 0x01, 0x79, 0x01, 0x00,
- 0x00, 0x40, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00 },
- TensorSpec("tensor(x{},y{})")
- .add({{"x", ""}, {"y", ""}}, 3)));
- TEST_DO(verify_serialized({ 0x01, 0x02, 0x01, 0x78, 0x01, 0x79, 0x01, 0x01,
- 0x31, 0x00, 0x40, 0x08, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00 },
- TensorSpec("tensor(x{},y{})")
- .add({{"x", "1"}, {"y", ""}}, 3)));
- TEST_DO(verify_serialized({ 0x01, 0x02, 0x01, 0x78, 0x01, 0x79, 0x01, 0x00,
- 0x01, 0x33, 0x40, 0x08, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00 },
- TensorSpec("tensor(x{},y{})")
- .add({{"x", ""}, {"y", "3"}}, 3)));
- TEST_DO(verify_serialized({ 0x01, 0x02, 0x01, 0x78, 0x01, 0x79, 0x01, 0x01,
- 0x32, 0x01, 0x34, 0x40, 0x08, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00 },
- TensorSpec("tensor(x{},y{})")
- .add({{"x", "2"}, {"y", "4"}}, 3)));
- TEST_DO(verify_serialized({ 0x01, 0x02, 0x01, 0x78, 0x01, 0x79,
- 0x01, 0x01, 0x31, 0x00, 0x40, 0x08,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
- TensorSpec("tensor(x{},y{})")
- .add({{"x", "1"}, {"y", ""}}, 3)));
-}
-
-TEST("test float cells from sparse tensor") {
- TEST_DO(verify_serialized({ 0x05, 0x01,
- 0x02, 0x01, 0x78, 0x01, 0x79,
- 0x01, 0x01, 0x31, 0x00,
- 0x40, 0x40, 0x00, 0x00 },
- TensorSpec("tensor<float>(x{},y{})")
- .add({{"x", "1"}, {"y", ""}}, 3)));
-}
-
-TEST("test tensor serialization for DenseTensor") {
- TEST_DO(verify_serialized({0x02, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00},
- TensorSpec("double")));
- TEST_DO(verify_serialized({0x02, 0x01, 0x01, 0x78, 0x01,
- 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00},
- TensorSpec("tensor(x[1])")
- .add({{"x", 0}}, 0)));
- TEST_DO(verify_serialized({0x02, 0x02, 0x01, 0x78, 0x01,
- 0x01, 0x79, 0x01,
- 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00},
- TensorSpec("tensor(x[1],y[1])")
- .add({{"x", 0}, {"y", 0}}, 0)));
- TEST_DO(verify_serialized({0x02, 0x01, 0x01, 0x78, 0x02,
- 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x40, 0x08, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00},
- TensorSpec("tensor(x[2])")
- .add({{"x", 1}}, 3)));
- TEST_DO(verify_serialized({0x02, 0x02, 0x01, 0x78, 0x01,
- 0x01, 0x79, 0x01,
- 0x40, 0x08, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00},
- TensorSpec("tensor(x[1],y[1])")
- .add({{"x", 0}, {"y", 0}}, 3)));
- TEST_DO(verify_serialized({0x02, 0x02, 0x01, 0x78, 0x02,
- 0x01, 0x79, 0x01,
- 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x40, 0x08, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00},
- TensorSpec("tensor(x[2],y[1])")
- .add({{"x", 1}, {"y", 0}}, 3)));
- TEST_DO(verify_serialized({0x02, 0x02, 0x01, 0x78, 0x01,
- 0x01, 0x79, 0x04,
- 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x40, 0x08, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00},
- TensorSpec("tensor(x[1],y[4])")
- .add({{"x", 0}, {"y", 3}}, 3)));
- TEST_DO(verify_serialized({0x02, 0x02, 0x01, 0x78, 0x03,
- 0x01, 0x79, 0x05,
- 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x40, 0x08, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00},
- TensorSpec("tensor(x[3],y[5])")
- .add({{"x", 2}, {"y", 4}}, 3)));
-}
-
-TEST("test float cells for dense tensor") {
- TEST_DO(verify_serialized({0x06, 0x01, 0x02, 0x01, 0x78, 0x03,
- 0x01, 0x79, 0x05,
- 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x40, 0x40, 0x00, 0x00 },
- TensorSpec("tensor<float>(x[3],y[5])")
- .add({{"x", 2}, {"y", 4}}, 3)));
-}
-
-TEST_MAIN() { TEST_RUN_ALL(); }