summaryrefslogtreecommitdiffstats
path: root/searchlib/src/tests/queryeval/weighted_set_term/weighted_set_term_test.cpp
diff options
context:
space:
mode:
authorHåvard Pettersen <havardpe@oath.com>2017-09-25 13:22:39 +0000
committerHåvard Pettersen <havardpe@oath.com>2017-09-25 15:23:48 +0000
commit050f6822e82adcdd7c6e8d970f8ed976c7e5962b (patch)
tree49c877263f593c89b76014979b546c1ab1dd1bec /searchlib/src/tests/queryeval/weighted_set_term/weighted_set_term_test.cpp
parent835d135a7c4ac42d7c4d6017c0da6a6684908d9d (diff)
use internal match data for common dummy term field match data
Diffstat (limited to 'searchlib/src/tests/queryeval/weighted_set_term/weighted_set_term_test.cpp')
-rw-r--r--searchlib/src/tests/queryeval/weighted_set_term/weighted_set_term_test.cpp47
1 files changed, 45 insertions, 2 deletions
diff --git a/searchlib/src/tests/queryeval/weighted_set_term/weighted_set_term_test.cpp b/searchlib/src/tests/queryeval/weighted_set_term/weighted_set_term_test.cpp
index 003c9935716..78195f19427 100644
--- a/searchlib/src/tests/queryeval/weighted_set_term/weighted_set_term_test.cpp
+++ b/searchlib/src/tests/queryeval/weighted_set_term/weighted_set_term_test.cpp
@@ -7,7 +7,9 @@
#include <vespa/searchlib/query/tree/simplequery.h>
#include <vespa/searchlib/queryeval/field_spec.h>
#include <vespa/searchlib/queryeval/blueprint.h>
+#include <vespa/searchlib/queryeval/weighted_set_term_blueprint.h>
#include <vespa/searchlib/queryeval/fake_result.h>
+#include <vespa/searchlib/queryeval/emptysearch.h>
#include <vespa/searchlib/queryeval/fake_searchable.h>
#include <vespa/searchlib/queryeval/fake_requestcontext.h>
#include <vespa/searchlib/test/weightedchildrenverifiers.h>
@@ -121,7 +123,7 @@ struct MockFixture {
mock = new MockSearch(initial);
children.push_back(mock);
weights.push_back(1);
- search.reset(WeightedSetTermSearch::create(children, tfmd, weights));
+ search.reset(WeightedSetTermSearch::create(children, tfmd, weights, MatchData::UP(nullptr)));
}
};
@@ -192,7 +194,7 @@ TEST_F("test Eager Matching Child", MockFixture(5)) {
class IteratorChildrenVerifier : public search::test::IteratorChildrenVerifier {
private:
SearchIterator::UP create(const std::vector<SearchIterator*> &children) const override {
- return SearchIterator::UP(WeightedSetTermSearch::create(children, _tfmd, _weights));
+ return SearchIterator::UP(WeightedSetTermSearch::create(children, _tfmd, _weights, MatchData::UP(nullptr)));
}
};
@@ -213,4 +215,45 @@ TEST("verify search iterator conformance with document weight iterator children"
verifier.verify();
}
+struct VerifyMatchData {
+ struct MyBlueprint : search::queryeval::SimpleLeafBlueprint {
+ VerifyMatchData &vmd;
+ MyBlueprint(VerifyMatchData &vmd_in, FieldSpec spec_in)
+ : SimpleLeafBlueprint(spec_in), vmd(vmd_in) {}
+ SearchIterator::UP createLeafSearch(const fef::TermFieldMatchDataArray &tfmda, bool) const override {
+ EXPECT_EQUAL(tfmda.size(), 1u);
+ EXPECT_TRUE(tfmda[0] != nullptr);
+ if (vmd.child_tfmd == nullptr) {
+ vmd.child_tfmd = tfmda[0];
+ } else {
+ EXPECT_EQUAL(vmd.child_tfmd, tfmda[0]);
+ }
+ ++vmd.child_cnt;
+ return std::make_unique<EmptySearch>();
+ }
+ };
+ size_t child_cnt = 0;
+ TermFieldMatchData *child_tfmd = nullptr;
+ search::queryeval::Blueprint::UP create(const FieldSpec &spec) {
+ return std::make_unique<MyBlueprint>(*this, spec);
+ }
+};
+
+TEST("require that children get a common (yet separate) term field match data") {
+ VerifyMatchData vmd;
+ MatchDataLayout layout;
+ auto top_handle = layout.allocTermField(42);
+ FieldSpec top_spec("foo", 42, top_handle);
+ WeightedSetTermBlueprint blueprint(top_spec);
+ for (size_t i = 0; i < 5; ++i) {
+ blueprint.addTerm(vmd.create(blueprint.getNextChildField(top_spec)), 1);
+ }
+ auto match_data = layout.createMatchData();
+ auto search = blueprint.createSearch(*match_data, true);
+ auto top_tfmd = match_data->resolveTermField(top_handle);
+ EXPECT_EQUAL(vmd.child_cnt, 5u);
+ EXPECT_TRUE(vmd.child_tfmd != nullptr);
+ EXPECT_NOT_EQUAL(top_tfmd, vmd.child_tfmd);
+}
+
TEST_MAIN() { TEST_RUN_ALL(); }