aboutsummaryrefslogtreecommitdiffstats
path: root/searchlib/src/tests/tensor/tensor_buffer_type_mapper/tensor_buffer_type_mapper_test.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'searchlib/src/tests/tensor/tensor_buffer_type_mapper/tensor_buffer_type_mapper_test.cpp')
-rw-r--r--searchlib/src/tests/tensor/tensor_buffer_type_mapper/tensor_buffer_type_mapper_test.cpp54
1 files changed, 46 insertions, 8 deletions
diff --git a/searchlib/src/tests/tensor/tensor_buffer_type_mapper/tensor_buffer_type_mapper_test.cpp b/searchlib/src/tests/tensor/tensor_buffer_type_mapper/tensor_buffer_type_mapper_test.cpp
index d7eaa6b633d..17612f08271 100644
--- a/searchlib/src/tests/tensor/tensor_buffer_type_mapper/tensor_buffer_type_mapper_test.cpp
+++ b/searchlib/src/tests/tensor/tensor_buffer_type_mapper/tensor_buffer_type_mapper_test.cpp
@@ -15,14 +15,18 @@ const vespalib::string tensor_type_2d_mixed_spec("tensor(x{},y[2])");
const vespalib::string float_tensor_type_spec("tensor<float>(y{})");
const vespalib::string tensor_type_dense_spec("tensor(x[2])");
+constexpr double grow_factor = 1.02;
+
struct TestParam
{
vespalib::string _name;
std::vector<size_t> _array_sizes;
+ std::vector<size_t> _large_array_sizes;
vespalib::string _tensor_type_spec;
- TestParam(vespalib::string name, std::vector<size_t> array_sizes, const vespalib::string& tensor_type_spec)
+ TestParam(vespalib::string name, std::vector<size_t> array_sizes, std::vector<size_t> large_array_sizes, const vespalib::string& tensor_type_spec)
: _name(std::move(name)),
_array_sizes(std::move(array_sizes)),
+ _large_array_sizes(std::move(large_array_sizes)),
_tensor_type_spec(tensor_type_spec)
{
}
@@ -49,6 +53,7 @@ protected:
TensorBufferTypeMapperTest();
~TensorBufferTypeMapperTest() override;
std::vector<size_t> get_array_sizes();
+ std::vector<size_t> get_large_array_sizes();
void select_type_ids();
};
@@ -56,7 +61,7 @@ TensorBufferTypeMapperTest::TensorBufferTypeMapperTest()
: testing::TestWithParam<TestParam>(),
_tensor_type(ValueType::from_spec(GetParam()._tensor_type_spec)),
_ops(_tensor_type),
- _mapper(GetParam()._array_sizes.size(), &_ops)
+ _mapper(GetParam()._array_sizes.size(), grow_factor, &_ops)
{
}
@@ -70,11 +75,33 @@ TensorBufferTypeMapperTest::get_array_sizes()
for (uint32_t type_id = 1; type_id <= max_small_subspaces_type_id; ++type_id) {
auto num_subspaces = type_id - 1;
array_sizes.emplace_back(_mapper.get_array_size(type_id));
- EXPECT_EQ(_ops.get_array_size(num_subspaces), array_sizes.back());
+ EXPECT_EQ(_ops.get_buffer_size(num_subspaces), array_sizes.back());
}
return array_sizes;
}
+std::vector<size_t>
+TensorBufferTypeMapperTest::get_large_array_sizes()
+{
+ auto& large_array_sizes = GetParam()._large_array_sizes;
+ uint32_t max_large = large_array_sizes.size();
+ TensorBufferTypeMapper mapper(max_large * 100, grow_factor, &_ops);
+ std::vector<size_t> result;
+ for (uint32_t i = 0; i < max_large; ++i) {
+ uint32_t type_id = (i + 1) * 100;
+ auto array_size = mapper.get_array_size(type_id);
+ result.emplace_back(array_size);
+ EXPECT_EQ(type_id, mapper.get_type_id(array_size));
+ EXPECT_EQ(type_id, mapper.get_type_id(array_size - 1));
+ if (array_size == large_array_sizes.back()) {
+ EXPECT_EQ(0u, mapper.get_type_id(array_size + 1));
+ } else {
+ EXPECT_EQ(type_id + 1, mapper.get_type_id(array_size + 1));
+ }
+ }
+ return result;
+}
+
void
TensorBufferTypeMapperTest::select_type_ids()
{
@@ -101,11 +128,11 @@ TensorBufferTypeMapperTest::select_type_ids()
INSTANTIATE_TEST_SUITE_P(TensorBufferTypeMapperMultiTest,
TensorBufferTypeMapperTest,
- testing::Values(TestParam("1d", {8, 16, 32, 40, 64}, tensor_type_sparse_spec),
- TestParam("1dfloat", {4, 12, 20, 28, 36}, float_tensor_type_spec),
- TestParam("2d", {8, 24, 40, 56, 80}, tensor_type_2d_spec),
- TestParam("2dmixed", {8, 24, 48, 64, 96}, tensor_type_2d_mixed_spec),
- TestParam("dense", {8, 24}, tensor_type_dense_spec)),
+ testing::Values(TestParam("1d", {8, 16, 32, 40, 64}, {1760, 10880, 76896, 555248, 4020512}, tensor_type_sparse_spec),
+ TestParam("1dfloat", {4, 12, 20, 28, 36}, {1728, 11104, 79168, 572128, 4143664}, float_tensor_type_spec),
+ TestParam("2d", {8, 24, 40, 56, 80}, {1600, 9184, 63872, 460416, 3332976}, tensor_type_2d_spec),
+ TestParam("2dmixed", {8, 24, 48, 64, 96}, {1984, 11472, 79824, 575504, 4166208}, tensor_type_2d_mixed_spec),
+ TestParam("dense", {8, 24}, {}, tensor_type_dense_spec)),
testing::PrintToStringParamName());
TEST_P(TensorBufferTypeMapperTest, array_sizes_are_calculated)
@@ -118,4 +145,15 @@ TEST_P(TensorBufferTypeMapperTest, type_ids_are_selected)
select_type_ids();
}
+TEST_P(TensorBufferTypeMapperTest, large_arrays_grows_exponentially)
+{
+ EXPECT_EQ(GetParam()._large_array_sizes, get_large_array_sizes());
+}
+
+TEST_P(TensorBufferTypeMapperTest, avoid_array_size_overflow)
+{
+ TensorBufferTypeMapper mapper(400, 2.0, &_ops);
+ EXPECT_GE(30, mapper.get_max_small_array_type_id(1000));
+}
+
GTEST_MAIN_RUN_ALL_TESTS()