summaryrefslogtreecommitdiffstats
path: root/searchlib/src
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2017-02-02 23:28:33 +0100
committerHenning Baldersheim <balder@yahoo-inc.com>2017-02-03 14:51:09 +0100
commitcf2b1e1cc4e7729ed805388ef95794417eb74bfe (patch)
treef36f615dd2e8803799f87c4b1815956c058b0b45 /searchlib/src
parent3d9705732586af5cf9364b254566517d1aea5d77 (diff)
Use the iterator verifier and factor out common code for dotproduct and weighted set.
Diffstat (limited to 'searchlib/src')
-rw-r--r--searchlib/src/tests/attribute/document_weight_iterator/document_weight_iterator_test.cpp44
-rw-r--r--searchlib/src/tests/queryeval/dot_product/dot_product_test.cpp61
-rw-r--r--searchlib/src/tests/queryeval/termwise_eval/termwise_eval_test.cpp2
-rw-r--r--searchlib/src/tests/queryeval/weighted_set_term/weighted_set_term_test.cpp64
-rw-r--r--searchlib/src/vespa/searchlib/test/searchiteratorverifiers.h72
5 files changed, 127 insertions, 116 deletions
diff --git a/searchlib/src/tests/attribute/document_weight_iterator/document_weight_iterator_test.cpp b/searchlib/src/tests/attribute/document_weight_iterator/document_weight_iterator_test.cpp
index fbe62f80843..fcc22671a19 100644
--- a/searchlib/src/tests/attribute/document_weight_iterator/document_weight_iterator_test.cpp
+++ b/searchlib/src/tests/attribute/document_weight_iterator/document_weight_iterator_test.cpp
@@ -22,8 +22,7 @@
#include <vespa/searchlib/query/tree/location.h>
#include <vespa/searchlib/query/tree/point.h>
#include <vespa/searchlib/query/tree/simplequery.h>
-#include <vespa/searchlib/query/weight.h>
-#include <vespa/searchlib/test/initrange.h>
+#include <vespa/searchlib/test/searchiteratorverifier.h>
#include <vespa/searchlib/queryeval/document_weight_search_iterator.h>
using namespace search;
@@ -168,22 +167,33 @@ TEST_F("require that string iterators are created correctly", StringFixture) {
verify_posting(*f1.api, "foo");
}
-TEST("verify init range for document weight search iterator") {
- search::test::InitRangeVerifier ir;
- AttributeVector::SP attr(make_attribute(BasicType::INT64, CollectionType::WSET, true));
- add_docs(attr, ir.getDocIdLimit());
- auto docids = ir.getExpectedDocIds();
- IntegerAttribute *int_attr = static_cast<IntegerAttribute *>(attr.get());
- for (auto docid: docids) {
- set_doc(int_attr, docid, int64_t(123), 1);
+class Verifier : public search::test::SearchIteratorVerifier {
+public:
+ Verifier() :
+ _attr(make_attribute(BasicType::INT64, CollectionType::WSET, true))
+ {
+ add_docs(_attr, getDocIdLimit());
+ auto docids = getExpectedDocIds();
+ IntegerAttribute *int_attr = static_cast<IntegerAttribute *>(_attr.get());
+ for (auto docid: docids) {
+ set_doc(int_attr, docid, int64_t(123), 1);
+ }
}
- const IDocumentWeightAttribute *api(attr->asDocumentWeightAttribute());
- ASSERT_TRUE(api != nullptr);
- auto dict_entry = api->lookup("123");
- ASSERT_TRUE(dict_entry.posting_idx.valid());
- fef::TermFieldMatchData tfmd;
- queryeval::DocumentWeightSearchIterator itr(tfmd, *api, dict_entry);
- ir.verify(itr);
+ SearchIterator::UP create(bool strict) const override {
+ (void) strict;
+ const IDocumentWeightAttribute *api(_attr->asDocumentWeightAttribute());
+ ASSERT_TRUE(api != nullptr);
+ auto dict_entry = api->lookup("123");
+ ASSERT_TRUE(dict_entry.posting_idx.valid());
+ return std::make_unique<queryeval::DocumentWeightSearchIterator>(_tfmd, *api, dict_entry);
+ }
+private:
+ mutable fef::TermFieldMatchData _tfmd;
+ AttributeVector::SP _attr;
+};
+TEST("verify init range for document weight search iterator") {
+ Verifier verifier;
+ verifier.verify();
}
TEST_MAIN() { TEST_RUN_ALL(); }
diff --git a/searchlib/src/tests/queryeval/dot_product/dot_product_test.cpp b/searchlib/src/tests/queryeval/dot_product/dot_product_test.cpp
index 04d773caa43..a31b01c5875 100644
--- a/searchlib/src/tests/queryeval/dot_product/dot_product_test.cpp
+++ b/searchlib/src/tests/queryeval/dot_product/dot_product_test.cpp
@@ -9,8 +9,7 @@
#include <vespa/searchlib/queryeval/fake_result.h>
#include <vespa/searchlib/queryeval/fake_searchable.h>
#include <vespa/searchlib/queryeval/fake_requestcontext.h>
-#include <vespa/searchlib/test/searchiteratorverifier.h>
-#include <vespa/searchlib/test/document_weight_attribute_helper.h>
+#include <vespa/searchlib/test/searchiteratorverifiers.h>
using namespace search;
using namespace search::query;
@@ -166,66 +165,20 @@ TEST_F("test Eager Matching Child", MockFixture(5)) {
EXPECT_EQUAL(1, mock->seekCnt);
}
-class Verifier : public SearchIteratorVerifier {
-public:
- Verifier() :
- _weights(_num_children, 1)
- { }
-
-protected:
- static constexpr size_t _num_children = 7;
- mutable TermFieldMatchData _tfmd;
- std::vector<int32_t> _weights;
-};
-
-class IteratorChildrenVerifier : public Verifier {
-public:
- IteratorChildrenVerifier() :
- Verifier(),
- _split_lists(_num_children)
- {
- auto full_list = getExpectedDocIds();
- for (size_t i = 0; i < full_list.size(); ++i) {
- _split_lists[i % _num_children].push_back(full_list[i]);
- }
- }
- SearchIterator::UP create(bool strict) const override {
- (void) strict;
- std::vector<SearchIterator*> children;
- for (size_t i = 0; i < _num_children; ++i) {
- children.push_back(createIterator(_split_lists[i], true).release());
- }
+class IteratorChildrenVerifier : public search::test::IteratorChildrenVerifier {
+private:
+ SearchIterator::UP create(const std::vector<SearchIterator*> &children) const override {
std::vector<fef::TermFieldMatchData*> no_child_match;
MatchData::UP no_match_data;
return DotProductSearch::create(children, _tfmd, no_child_match, _weights, std::move(no_match_data));
}
-private:
- std::vector<DocIds> _split_lists;
};
-class WeightIteratorChildrenVerifier : public Verifier {
-public:
- WeightIteratorChildrenVerifier() :
- Verifier(),
- _helper()
- {
- _helper.add_docs(getDocIdLimit());
- auto full_list = getExpectedDocIds();
- for (size_t i = 0; i < full_list.size(); ++i) {
- _helper.set_doc(full_list[i], i % _num_children, 1);
- }
- }
- SearchIterator::UP create(bool strict) const override {
- (void) strict;
- std::vector<DocumentWeightIterator> children;
- for (size_t i = 0; i < _num_children; ++i) {
- auto dict_entry = _helper.dwa().lookup(vespalib::make_string("%zu", i).c_str());
- _helper.dwa().create(dict_entry.posting_idx, children);
- }
+class WeightIteratorChildrenVerifier : public search::test::WeightIteratorChildrenVerifier {
+private:
+ SearchIterator::UP create(std::vector<DocumentWeightIterator> && children) const override {
return SearchIterator::UP(DotProductSearch::create(_tfmd, _weights, std::move(children)));
}
-private:
- DocumentWeightAttributeHelper _helper;
};
TEST("verify initRange with search iterator children") {
diff --git a/searchlib/src/tests/queryeval/termwise_eval/termwise_eval_test.cpp b/searchlib/src/tests/queryeval/termwise_eval/termwise_eval_test.cpp
index 79d6524fe5b..561f48df8d7 100644
--- a/searchlib/src/tests/queryeval/termwise_eval/termwise_eval_test.cpp
+++ b/searchlib/src/tests/queryeval/termwise_eval/termwise_eval_test.cpp
@@ -632,7 +632,7 @@ TEST("require that termwise blueprint helper calculates unpack info correctly")
class Verifier : public search::test::SearchIteratorVerifier {
public:
- SearchIterator::UP create(bool strict) const {
+ SearchIterator::UP create(bool strict) const override {
return make_termwise(createIterator(getExpectedDocIds(), strict), strict);
}
};
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 7436913b642..1e432f89747 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
@@ -1,30 +1,22 @@
// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-#include <vespa/fastos/fastos.h>
-#include <vespa/log/log.h>
-LOG_SETUP("weighted_set_term_test");
+
#include <vespa/vespalib/testkit/testapp.h>
#include <vespa/searchlib/queryeval/weighted_set_term_search.h>
#include <vespa/searchlib/fef/fef.h>
#include <vespa/searchlib/query/tree/simplequery.h>
#include <vespa/searchlib/queryeval/field_spec.h>
-#include <vespa/searchlib/queryeval/searchiterator.h>
#include <vespa/searchlib/queryeval/blueprint.h>
#include <vespa/searchlib/queryeval/fake_result.h>
#include <vespa/searchlib/queryeval/fake_searchable.h>
#include <vespa/searchlib/queryeval/fake_requestcontext.h>
-#include <vespa/searchlib/queryeval/weighted_set_term_search.h>
-#include <vespa/searchlib/test/initrange.h>
-#include <vespa/searchlib/test/document_weight_attribute_helper.h>
-#include <memory>
-#include <string>
-#include <map>
+#include <vespa/searchlib/test/searchiteratorverifiers.h>
using namespace search;
using namespace search::query;
using namespace search::fef;
using namespace search::queryeval;
-using search::test::InitRangeVerifier;
+using search::test::SearchIteratorVerifier;
using search::test::DocumentWeightAttributeHelper;
namespace {
@@ -197,44 +189,28 @@ TEST_F("test Eager Matching Child", MockFixture(5)) {
EXPECT_EQUAL(1, mock->seekCnt);
}
-TEST("verify initRange with search iterator children") {
- const size_t num_children = 7;
- InitRangeVerifier ir;
- using DocIds = InitRangeVerifier::DocIds;
- std::vector<DocIds> split_lists(num_children);
- auto full_list = ir.getExpectedDocIds();
- for (size_t i = 0; i < full_list.size(); ++i) {
- split_lists[i % num_children].push_back(full_list[i]);
+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));
}
- bool strict = true;
- std::vector<SearchIterator*> children;
- for (size_t i = 0; i < num_children; ++i) {
- children.push_back(ir.createIterator(split_lists[i], strict).release());
+};
+
+class WeightIteratorChildrenVerifier : public search::test::WeightIteratorChildrenVerifier {
+private:
+ SearchIterator::UP create(std::vector<DocumentWeightIterator> && children) const override {
+ return SearchIterator::UP(WeightedSetTermSearch::create(_tfmd, _weights, std::move(children)));
}
- TermFieldMatchData tfmd;
- std::vector<int32_t> weights(num_children, 1);
- SearchIterator::UP itr(WeightedSetTermSearch::create(children, tfmd, weights));
- ir.verify(*itr);
+};
+
+TEST("verify initRange with search iterator children") {
+ IteratorChildrenVerifier verifier;
+ verifier.verify();
}
TEST("verify initRange with document weight iterator children") {
- const size_t num_children = 7;
- InitRangeVerifier ir;
- DocumentWeightAttributeHelper helper;
- helper.add_docs(ir.getDocIdLimit());
- auto full_list = ir.getExpectedDocIds();
- for (size_t i = 0; i < full_list.size(); ++i) {
- helper.set_doc(full_list[i], i % num_children, 1);
- }
- TermFieldMatchData tfmd;
- std::vector<int32_t> weights(num_children, 1);
- std::vector<DocumentWeightIterator> children;
- for (size_t i = 0; i < num_children; ++i) {
- auto dict_entry = helper.dwa().lookup(vespalib::make_string("%zu", i).c_str());
- helper.dwa().create(dict_entry.posting_idx, children);
- }
- SearchIterator::UP itr(WeightedSetTermSearch::create(tfmd, weights, std::move(children)));
- ir.verify(*itr);
+ WeightIteratorChildrenVerifier verifier;
+ verifier.verify();
}
TEST_MAIN() { TEST_RUN_ALL(); }
diff --git a/searchlib/src/vespa/searchlib/test/searchiteratorverifiers.h b/searchlib/src/vespa/searchlib/test/searchiteratorverifiers.h
new file mode 100644
index 00000000000..05906c023c7
--- /dev/null
+++ b/searchlib/src/vespa/searchlib/test/searchiteratorverifiers.h
@@ -0,0 +1,72 @@
+#pragma once
+
+#include "searchiteratorverifier.h"
+#include "document_weight_attribute_helper.h"
+
+namespace search {
+namespace test {
+
+class Verifier : public SearchIteratorVerifier {
+public:
+ Verifier() :
+ _weights(_num_children, 1)
+ { }
+
+protected:
+ static constexpr size_t _num_children = 7;
+ mutable fef::TermFieldMatchData _tfmd;
+ std::vector<int32_t> _weights;
+};
+
+class IteratorChildrenVerifier : public Verifier {
+public:
+ IteratorChildrenVerifier() :
+ Verifier(),
+ _split_lists(_num_children)
+ {
+ auto full_list = getExpectedDocIds();
+ for (size_t i = 0; i < full_list.size(); ++i) {
+ _split_lists[i % _num_children].push_back(full_list[i]);
+ }
+ }
+ SearchIterator::UP create(bool strict) const override {
+ (void) strict;
+ std::vector<SearchIterator*> children;
+ for (size_t i = 0; i < _num_children; ++i) {
+ children.push_back(createIterator(_split_lists[i], true).release());
+ }
+ return create(children);
+ }
+private:
+ virtual SearchIterator::UP create(const std::vector<SearchIterator*> &children) const = 0;
+ std::vector<DocIds> _split_lists;
+};
+
+class WeightIteratorChildrenVerifier : public Verifier {
+public:
+ WeightIteratorChildrenVerifier() :
+ Verifier(),
+ _helper()
+ {
+ _helper.add_docs(getDocIdLimit());
+ auto full_list = getExpectedDocIds();
+ for (size_t i = 0; i < full_list.size(); ++i) {
+ _helper.set_doc(full_list[i], i % _num_children, 1);
+ }
+ }
+ SearchIterator::UP create(bool strict) const override {
+ (void) strict;
+ std::vector<DocumentWeightIterator> children;
+ for (size_t i = 0; i < _num_children; ++i) {
+ auto dict_entry = _helper.dwa().lookup(vespalib::make_string("%zu", i).c_str());
+ _helper.dwa().create(dict_entry.posting_idx, children);
+ }
+ return create(std::move(children));
+ }
+private:
+ virtual SearchIterator::UP create(std::vector<DocumentWeightIterator> && children) const = 0;
+ DocumentWeightAttributeHelper _helper;
+};
+
+}
+}