summaryrefslogtreecommitdiffstats
path: root/eval
diff options
context:
space:
mode:
authorArne Juul <arnej@verizonmedia.com>2020-11-02 09:06:09 +0000
committerArne Juul <arnej@verizonmedia.com>2020-11-02 09:45:10 +0000
commit1163c6cf86a418216af628ec7f1cbaef60bb4f53 (patch)
treeab3d6e682c419a75ef29d907c581e0a944c8d5a1 /eval
parent8954a35cab895a766aca2d01c6fe5e6cfaff71b3 (diff)
test add_subspace robustness for FastValue
Diffstat (limited to 'eval')
-rw-r--r--eval/src/tests/eval/fast_value/fast_value_test.cpp55
1 files changed, 55 insertions, 0 deletions
diff --git a/eval/src/tests/eval/fast_value/fast_value_test.cpp b/eval/src/tests/eval/fast_value/fast_value_test.cpp
index 19ddcb3d788..7b06f02a569 100644
--- a/eval/src/tests/eval/fast_value/fast_value_test.cpp
+++ b/eval/src/tests/eval/fast_value/fast_value_test.cpp
@@ -1,6 +1,8 @@
// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
#include <vespa/eval/eval/fast_value.hpp>
+#include <vespa/eval/eval/fast_value.h>
+#include <vespa/eval/eval/value_codec.h>
#include <vespa/vespalib/gtest/gtest.h>
using namespace vespalib;
@@ -56,4 +58,57 @@ TEST(FastCellsTest, add_cells_works) {
EXPECT_EQ(*cells.get(5), 6.0);
}
+using SA = std::vector<vespalib::stringref>;
+
+TEST(FastValueTest, add_subspace_robustness) {
+ auto factory = FastValueBuilderFactory::get();
+ ValueType type = ValueType::from_spec("tensor(x[2])");
+ auto builder = factory.create_value_builder<double>(type);
+ auto subspace = builder->add_subspace({});
+ subspace[0] = 17.0;
+ subspace[1] = 666;
+ auto other = builder->add_subspace({});
+ other[1] = 42.0;
+ auto value = builder->build(std::move(builder));
+ auto actual = spec_from_value(*value);
+ auto expected = TensorSpec("tensor(x[2])").
+ add({{"x", 0}}, 17.0).
+ add({{"x", 1}}, 42.0);
+ EXPECT_EQ(actual, expected);
+
+ type = ValueType::from_spec("tensor(x{})");
+ builder = factory.create_value_builder<double>(type);
+ subspace = builder->add_subspace(SA{"foo"});
+ subspace[0] = 17.0;
+ subspace = builder->add_subspace(SA{"bar"});
+ subspace[0] = 18.0;
+ other = builder->add_subspace(SA{"foo"});
+ other[0] = 42.0;
+ value = builder->build(std::move(builder));
+ actual = spec_from_value(*value);
+ expected = TensorSpec("tensor(x{})").
+ add({{"x", "bar"}}, 18.0).
+ add({{"x", "foo"}}, 42.0);
+ EXPECT_EQ(actual, expected);
+
+ type = ValueType::from_spec("tensor(x{},y[2])");
+ builder = factory.create_value_builder<double>(type);
+ subspace = builder->add_subspace(SA{"foo"});
+ subspace[0] = 17.0;
+ subspace[1] = 666;
+ subspace = builder->add_subspace(SA{"bar"});
+ subspace[0] = 18.0;
+ subspace[1] = 19.0;
+ other = builder->add_subspace(SA{"foo"});
+ other[1] = 42.0;
+ value = builder->build(std::move(builder));
+ actual = spec_from_value(*value);
+ expected = TensorSpec("tensor(x{},y[2])").
+ add({{"x", "foo"}, {"y", 0}}, 17.0).
+ add({{"x", "bar"}, {"y", 0}}, 18.0).
+ add({{"x", "bar"}, {"y", 1}}, 19.0).
+ add({{"x", "foo"}, {"y", 1}}, 42.0);
+ EXPECT_EQ(actual, expected);
+}
+
GTEST_MAIN_RUN_ALL_TESTS()