aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2020-05-16 15:01:55 +0200
committerGitHub <noreply@github.com>2020-05-16 15:01:55 +0200
commit6002e2b521890f1f401364c8fee1f94bd7c3b614 (patch)
treea028e23aa6ebf784ada631cba0e6973f868f1fe8
parent7127cf4ab9e502bb68473574328669ecdb783033 (diff)
parente4f3663cdb2c7a419de334dfcbd4b29b02e4751c (diff)
Merge pull request #13271 from vespa-engine/balder/if-you-need-more-than-1-make-room-for-42
If we need a dynamic allocation, just as well take 1k giving 42 entries.
-rw-r--r--searchlib/src/tests/fef/fef_test.cpp15
-rw-r--r--searchlib/src/tests/fef/termfieldmodel/termfieldmodel_test.cpp4
-rw-r--r--searchlib/src/vespa/searchlib/fef/termfieldmatchdata.cpp5
3 files changed, 13 insertions, 11 deletions
diff --git a/searchlib/src/tests/fef/fef_test.cpp b/searchlib/src/tests/fef/fef_test.cpp
index 4d1163de6ee..50f8a770618 100644
--- a/searchlib/src/tests/fef/fef_test.cpp
+++ b/searchlib/src/tests/fef/fef_test.cpp
@@ -67,12 +67,11 @@ TEST("test TermFieldMatchDataAppend")
EXPECT_EQUAL(1u, tmd.capacity());
tmd.appendPosition(pos);
EXPECT_EQUAL(2u, tmd.size());
- EXPECT_EQUAL(2u, tmd.capacity());
+ EXPECT_EQUAL(42u, tmd.capacity());
uint32_t resizeCount(0);
const TermFieldMatchDataPosition * prev = tmd.begin();
for (size_t i(2); i < std::numeric_limits<uint16_t>::max(); i++) {
EXPECT_EQUAL(i, tmd.size());
- EXPECT_EQUAL(std::min(size_t(std::numeric_limits<uint16_t>::max()), vespalib::roundUp2inN(i)), tmd.capacity());
tmd.appendPosition(pos);
const TermFieldMatchDataPosition * cur = tmd.begin();
if (cur != prev) {
@@ -80,13 +79,15 @@ TEST("test TermFieldMatchDataAppend")
resizeCount++;
}
}
- EXPECT_EQUAL(15u, resizeCount);
- EXPECT_EQUAL(std::numeric_limits<uint16_t>::max(), tmd.size());
- EXPECT_EQUAL(std::numeric_limits<uint16_t>::max(), tmd.capacity());
- tmd.appendPosition(pos);
- EXPECT_EQUAL(prev, tmd.begin());
+ EXPECT_EQUAL(11u, resizeCount);
EXPECT_EQUAL(std::numeric_limits<uint16_t>::max(), tmd.size());
EXPECT_EQUAL(std::numeric_limits<uint16_t>::max(), tmd.capacity());
+ for (size_t i(0); i < 10; i++) {
+ tmd.appendPosition(pos);
+ EXPECT_EQUAL(prev, tmd.begin());
+ EXPECT_EQUAL(std::numeric_limits<uint16_t>::max(), tmd.size());
+ EXPECT_EQUAL(std::numeric_limits<uint16_t>::max(), tmd.capacity());
+ }
}
TEST("verify size of essential fef classes") {
diff --git a/searchlib/src/tests/fef/termfieldmodel/termfieldmodel_test.cpp b/searchlib/src/tests/fef/termfieldmodel/termfieldmodel_test.cpp
index a75b91cb78a..3de34047ecd 100644
--- a/searchlib/src/tests/fef/termfieldmodel/termfieldmodel_test.cpp
+++ b/searchlib/src/tests/fef/termfieldmodel/termfieldmodel_test.cpp
@@ -215,11 +215,11 @@ TEST("append positions") {
tfmd.appendPosition(pos);
tfmd.appendPosition(pos2);
EXPECT_EQUAL(2u, tfmd.size());
- EXPECT_EQUAL(2u, tfmd.capacity());
+ EXPECT_EQUAL(42u, tfmd.capacity());
TermFieldMatchDataPosition pos3(0x31020304, 0x30203040, 0x31223344, 0x32345678);
tfmd.appendPosition(pos3);
EXPECT_EQUAL(3u, tfmd.size());
- EXPECT_EQUAL(4u, tfmd.capacity());
+ EXPECT_EQUAL(42u, tfmd.capacity());
EXPECT_EQUAL(0x01020304u, tfmd.begin()->getElementId());
EXPECT_EQUAL(0x10203040u, tfmd.begin()->getPosition());
EXPECT_EQUAL(0x11223344, tfmd.begin()->getElementWeight());
diff --git a/searchlib/src/vespa/searchlib/fef/termfieldmatchdata.cpp b/searchlib/src/vespa/searchlib/fef/termfieldmatchdata.cpp
index 781135bf246..7e3e0f5e4bc 100644
--- a/searchlib/src/vespa/searchlib/fef/termfieldmatchdata.cpp
+++ b/searchlib/src/vespa/searchlib/fef/termfieldmatchdata.cpp
@@ -104,7 +104,8 @@ TermFieldMatchData::swap(TermFieldMatchData &rhs)
namespace {
-constexpr size_t MAX_ELEMS = std::numeric_limits<uint16_t>::max();
+constexpr size_t MAX_ELEMS = std::numeric_limits<uint16_t>::max();
+constexpr size_t INITIAL_ELEMS = 1024/sizeof(TermFieldMatchDataPosition);
}
@@ -128,7 +129,7 @@ TermFieldMatchData::allocateVector()
{
assert(_sz < 2);
assert(!allocated());
- size_t newSize = 2;
+ size_t newSize = INITIAL_ELEMS;
TermFieldMatchDataPosition * n = new TermFieldMatchDataPosition[newSize];
if (_sz > 0) {
n[0] = *getFixed();