aboutsummaryrefslogtreecommitdiffstats
path: root/searchlib/src/tests/fef
diff options
context:
space:
mode:
authorHåvard Pettersen <havardpe@oath.com>2017-09-07 12:26:22 +0000
committerHåvard Pettersen <havardpe@oath.com>2017-09-20 09:16:17 +0000
commit07145ad5ee9cc0f6d1bef0c76fd93a1053d9dde2 (patch)
tree8d3a391aef94fd7d8010820fb7f4f7947f97b660 /searchlib/src/tests/fef
parentf1018cb802aeb7b7731a0fc29ee7c708b665148d (diff)
enable re-using termwise bitvectors in second phase
detach match data from rank program and refactor match loop re-use bitvector in termwise search if range is the same
Diffstat (limited to 'searchlib/src/tests/fef')
-rw-r--r--searchlib/src/tests/fef/featureoverride/featureoverride.cpp3
-rw-r--r--searchlib/src/tests/fef/object_passing/object_passing_test.cpp4
-rw-r--r--searchlib/src/tests/fef/rank_program/rank_program_test.cpp7
-rw-r--r--searchlib/src/tests/fef/termfieldmodel/termfieldmodel_test.cpp35
4 files changed, 45 insertions, 4 deletions
diff --git a/searchlib/src/tests/fef/featureoverride/featureoverride.cpp b/searchlib/src/tests/fef/featureoverride/featureoverride.cpp
index 0ff7e0899e9..e55bd7081a1 100644
--- a/searchlib/src/tests/fef/featureoverride/featureoverride.cpp
+++ b/searchlib/src/tests/fef/featureoverride/featureoverride.cpp
@@ -141,7 +141,8 @@ TEST("test overrides")
overrides.add("value(1,2,3).2", "6.0");
overrides.add("bogus(feature)", "10.0");
- rankProgram->setup(mdl, queryEnv, overrides);
+ MatchData::UP match_data = mdl.createMatchData();
+ rankProgram->setup(*match_data, queryEnv, overrides);
std::map<vespalib::string, feature_t> res = Utils::getAllFeatures(*rankProgram, 2);
diff --git a/searchlib/src/tests/fef/object_passing/object_passing_test.cpp b/searchlib/src/tests/fef/object_passing/object_passing_test.cpp
index 5c0f09a1203..3ae5932889a 100644
--- a/searchlib/src/tests/fef/object_passing/object_passing_test.cpp
+++ b/searchlib/src/tests/fef/object_passing/object_passing_test.cpp
@@ -7,6 +7,7 @@
#include <vespa/searchlib/fef/test/indexenvironment.h>
#include <vespa/searchlib/fef/test/queryenvironment.h>
#include <vespa/searchlib/fef/test/plugin/unbox.h>
+#include <vespa/searchlib/fef/matchdatalayout.h>
#include <vespa/searchlib/fef/rank_program.h>
#include <vespa/searchlib/fef/verify_feature.h>
#include <vespa/eval/eval/value_type.h>
@@ -87,10 +88,11 @@ struct Fixture {
return vespalib::eval::error_value;
}
MatchDataLayout mdl;
+ MatchData::UP md = mdl.createMatchData();
QueryEnvironment queryEnv(&indexEnv);
Properties overrides;
RankProgram program(resolver);
- program.setup(mdl, queryEnv, overrides);
+ program.setup(*md, queryEnv, overrides);
auto result = program.get_seeds();
EXPECT_EQUAL(1u, result.num_features());
EXPECT_TRUE(!result.is_object(0)); // verifies auto-unboxing
diff --git a/searchlib/src/tests/fef/rank_program/rank_program_test.cpp b/searchlib/src/tests/fef/rank_program/rank_program_test.cpp
index 8e23731e961..7e28178e5f7 100644
--- a/searchlib/src/tests/fef/rank_program/rank_program_test.cpp
+++ b/searchlib/src/tests/fef/rank_program/rank_program_test.cpp
@@ -6,6 +6,7 @@
#include <vespa/searchlib/features/rankingexpressionfeature.h>
#include <vespa/searchlib/fef/blueprintfactory.h>
#include <vespa/searchlib/fef/indexproperties.h>
+#include <vespa/searchlib/fef/matchdatalayout.h>
#include <vespa/searchlib/fef/test/indexenvironment.h>
#include <vespa/searchlib/fef/test/queryenvironment.h>
#include <vespa/searchlib/fef/test/plugin/sum.h>
@@ -69,10 +70,11 @@ struct Fixture {
IndexEnvironment indexEnv;
BlueprintResolver::SP resolver;
Properties overrides;
+ MatchData::UP match_data;
RankProgram program;
size_t track_cnt;
Fixture() : factory(), indexEnv(), resolver(new BlueprintResolver(factory, indexEnv)),
- overrides(), program(resolver), track_cnt(0)
+ overrides(), match_data(), program(resolver), track_cnt(0)
{
factory.addPrototype(Blueprint::SP(new BoxingBlueprint()));
factory.addPrototype(Blueprint::SP(new DocidBlueprint()));
@@ -107,7 +109,8 @@ struct Fixture {
ASSERT_TRUE(resolver->compile());
MatchDataLayout mdl;
QueryEnvironment queryEnv(&indexEnv);
- program.setup(mdl, queryEnv, overrides);
+ match_data = mdl.createMatchData();
+ program.setup(*match_data, queryEnv, overrides);
return *this;
}
double get(uint32_t docid = default_docid) {
diff --git a/searchlib/src/tests/fef/termfieldmodel/termfieldmodel_test.cpp b/searchlib/src/tests/fef/termfieldmodel/termfieldmodel_test.cpp
index 57fb19b7b23..01c72497246 100644
--- a/searchlib/src/tests/fef/termfieldmodel/termfieldmodel_test.cpp
+++ b/searchlib/src/tests/fef/termfieldmodel/termfieldmodel_test.cpp
@@ -207,4 +207,39 @@ TEST("Access subqueries") {
EXPECT_EQUAL(0ULL, state.f3->getSubqueries());
}
+TEST("require that TermFieldMatchData can be tagged as needed or not") {
+ TermFieldMatchData tfmd;
+ tfmd.setFieldId(123);
+ EXPECT_EQUAL(tfmd.getFieldId(),123u);
+ EXPECT_TRUE(!tfmd.isNotNeeded());
+ tfmd.tagAsNotNeeded();
+ EXPECT_EQUAL(tfmd.getFieldId(),123u);
+ EXPECT_TRUE(tfmd.isNotNeeded());
+ tfmd.tagAsNeeded();
+ EXPECT_EQUAL(tfmd.getFieldId(),123u);
+ EXPECT_TRUE(!tfmd.isNotNeeded());
+}
+
+TEST("require that MatchData soft_reset retains appropriate state") {
+ auto md = MatchData::makeTestInstance(10, 10);
+ md->set_termwise_limit(0.5);
+ auto *old_term = md->resolveTermField(7);
+ old_term->tagAsNotNeeded();
+ old_term->populate_fixed()->setElementWeight(21);
+ old_term->resetOnlyDocId(42);
+ EXPECT_EQUAL(md->get_termwise_limit(), 0.5);
+ EXPECT_TRUE(old_term->isNotNeeded());
+ EXPECT_EQUAL(old_term->getFieldId(), 7u);
+ EXPECT_EQUAL(old_term->getWeight(), 21);
+ EXPECT_EQUAL(old_term->getDocId(), 42u);
+ md->soft_reset();
+ auto *new_term = md->resolveTermField(7);
+ EXPECT_EQUAL(new_term, old_term);
+ EXPECT_EQUAL(md->get_termwise_limit(), 1.0);
+ EXPECT_TRUE(!new_term->isNotNeeded());
+ EXPECT_EQUAL(new_term->getFieldId(), 7u);
+ EXPECT_EQUAL(new_term->getWeight(), 21);
+ EXPECT_EQUAL(new_term->getDocId(), TermFieldMatchData::invalidId());
+}
+
TEST_MAIN() { TEST_RUN_ALL(); }