summaryrefslogtreecommitdiffstats
path: root/searchlib/src/tests/attribute/sourceselector
diff options
context:
space:
mode:
authorTor Egge <tegge@oath.com>2019-01-15 23:42:34 +0000
committerTor Egge <tegge@oath.com>2019-01-15 23:44:10 +0000
commit9c0828f85af631b339182a5e81ef0b672fd67829 (patch)
treea222b51d133a40f4410732568fea90ee90f61767 /searchlib/src/tests/attribute/sourceselector
parenteda8c867de1695a59ab96887d42b5fd158dcb038 (diff)
Set source to default source from committed docid limit to new guard
when reserving space for source mapping. This reinitializes data that was set to "undefined" value (-128) in the backing int8_t single value attribute when compacting lid space.
Diffstat (limited to 'searchlib/src/tests/attribute/sourceselector')
-rw-r--r--searchlib/src/tests/attribute/sourceselector/sourceselector_test.cpp25
1 files changed, 25 insertions, 0 deletions
diff --git a/searchlib/src/tests/attribute/sourceselector/sourceselector_test.cpp b/searchlib/src/tests/attribute/sourceselector/sourceselector_test.cpp
index 75a0ccf6ab9..3ad3607ab23 100644
--- a/searchlib/src/tests/attribute/sourceselector/sourceselector_test.cpp
+++ b/searchlib/src/tests/attribute/sourceselector/sourceselector_test.cpp
@@ -3,6 +3,7 @@
#include <vespa/searchlib/attribute/fixedsourceselector.h>
#include <vespa/searchlib/index/dummyfileheadercontext.h>
+#include <vespa/searchcommon/common/undefinedvalues.h>
#include <vespa/vespalib/testkit/testapp.h>
#include <vespa/fastos/file.h>
@@ -28,6 +29,7 @@ const string index_dir = "test_data";
const string base_file_name = "test_data/sourcelist";
const string base_file_name2 = "test_data/sourcelist2";
const uint32_t default_source = 7;
+const uint32_t invalid_source = (uint8_t)search::attribute::getUndefined<int8_t>();
const uint32_t base_id = 42;
class Test : public vespalib::TestApp
@@ -50,6 +52,7 @@ private:
void requireThatSourcesAreCountedCorrectly();
void requireThatSourcesAreCountedCorrectly();
void requireThatDocIdLimitIsCorrect();
+ void requireThatCorrectDefaultValueIsUsedAfterCompaction();
};
int
@@ -66,6 +69,7 @@ Test::Main()
TEST_DO(requireThatCompleteSourceRangeIsHandled());
TEST_DO(requireThatSourcesAreCountedCorrectly());
TEST_DO(requireThatDocIdLimitIsCorrect());
+ TEST_DO(requireThatCorrectDefaultValueIsUsedAfterCompaction());
TEST_DONE();
}
@@ -236,6 +240,27 @@ Test::requireThatDocIdLimitIsCorrect()
EXPECT_EQUAL(7u, selector2->getDocIdLimit());
}
+void
+Test::requireThatCorrectDefaultValueIsUsedAfterCompaction()
+{
+ FixedSourceSelector selector(default_source, base_file_name);
+ EXPECT_EQUAL(0u, selector.getDocIdLimit());
+ auto it(selector.createIterator());
+ selector.setSource(8, 4);
+ EXPECT_EQUAL(default_source, (uint32_t) it->getSource(9));
+ EXPECT_EQUAL(default_source, (uint32_t) it->getSource(6));
+ selector.compactLidSpace(4);
+ EXPECT_EQUAL(4u, selector.getDocIdLimit());
+ EXPECT_EQUAL(default_source, (uint32_t) it->getSource(4));
+ EXPECT_EQUAL(invalid_source, (uint32_t) it->getSource(5)); // beyond guard
+ selector.setSource(6, 4);
+ EXPECT_EQUAL(7u, selector.getDocIdLimit());
+ EXPECT_EQUAL(default_source, (uint32_t) it->getSource(5));
+ EXPECT_EQUAL(4u, (uint8_t) it->getSource(6));
+ EXPECT_EQUAL(default_source, (uint32_t) it->getSource(7));
+}
+
+
} // namespace
TEST_APPHOOK(Test);