aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2018-12-06 13:13:51 +0000
committerHenning Baldersheim <balder@yahoo-inc.com>2018-12-06 13:18:28 +0000
commitb498c6510d97e4871f1fe2f22829bd0368099261 (patch)
tree870bb85bab5f193aa13fd68a687858c9c648fcf7
parent35e9b1e56e26a2194b535be3ed652a0f6803490d (diff)
Add test for range search and also fetch postings with correct strictness.
-rw-r--r--searchlib/src/tests/attribute/searchcontext/searchcontext.cpp60
1 files changed, 35 insertions, 25 deletions
diff --git a/searchlib/src/tests/attribute/searchcontext/searchcontext.cpp b/searchlib/src/tests/attribute/searchcontext/searchcontext.cpp
index 167ffec7084..29849139fc5 100644
--- a/searchlib/src/tests/attribute/searchcontext/searchcontext.cpp
+++ b/searchlib/src/tests/attribute/searchcontext/searchcontext.cpp
@@ -71,8 +71,8 @@ public:
}
};
-DocSet::DocSet() : std::set<uint32_t>() {}
-DocSet::~DocSet() {}
+DocSet::DocSet() = default;
+DocSet::~DocSet() = default;
template <typename V, typename T>
class PostingList
@@ -97,7 +97,7 @@ template <typename V, typename T>
PostingList<V, T>::PostingList(V & vec, T value) : _vec(&vec), _value(value), _hits() {}
template <typename V, typename T>
-PostingList<V, T>::~PostingList() {}
+PostingList<V, T>::~PostingList() = default;
class DocRange
{
@@ -145,7 +145,7 @@ private:
void checkResultSet(const ResultSet & rs, const DocSet & exp, bool bitVector);
template<typename T, typename A>
- void testSearchIterator(T key, const vespalib::string &keyAsString, const ConfigMap &cfgs);
+ void testSearchIterator(const std::vector<T> & keys, const vespalib::string &keyAsString, const ConfigMap &cfgs);
void testSearchIteratorConformance();
// test search functionality
template <typename V, typename T>
@@ -169,25 +169,25 @@ private:
class AttributeIteratorTester : public IteratorTester
{
public:
- virtual bool matches(const SearchIterator & base) const override {
- return dynamic_cast<const AttributeIterator *>(&base) != NULL;
+ bool matches(const SearchIterator & base) const override {
+ return dynamic_cast<const AttributeIterator *>(&base) != nullptr;
}
};
class FlagAttributeIteratorTester : public IteratorTester
{
public:
- virtual bool matches(const SearchIterator & base) const override {
- return (dynamic_cast<const FlagAttributeIterator *>(&base) != NULL) ||
- (dynamic_cast<const BitVectorIterator *>(&base) != NULL) ||
- (dynamic_cast<const queryeval::EmptySearch *>(&base) != NULL);
+ bool matches(const SearchIterator & base) const override {
+ return (dynamic_cast<const FlagAttributeIterator *>(&base) != nullptr) ||
+ (dynamic_cast<const BitVectorIterator *>(&base) != nullptr) ||
+ (dynamic_cast<const queryeval::EmptySearch *>(&base) != nullptr);
}
};
class AttributePostingListIteratorTester : public IteratorTester
{
public:
- virtual bool matches(const SearchIterator & base) const override {
- return dynamic_cast<const AttributePostingListIterator *>(&base) != NULL ||
- dynamic_cast<const queryeval::EmptySearch *>(&base) != NULL;
+ bool matches(const SearchIterator & base) const override {
+ return dynamic_cast<const AttributePostingListIterator *>(&base) != nullptr ||
+ dynamic_cast<const queryeval::EmptySearch *>(&base) != nullptr;
}
};
@@ -473,7 +473,7 @@ SearchContextTest::checkResultSet(const ResultSet & rs, const DocSet & expected,
if (bitVector) {
const BitVector * vec = rs.getBitOverflow();
if (expected.size() != 0) {
- ASSERT_TRUE(vec != NULL);
+ ASSERT_TRUE(vec != nullptr);
for (const auto & expect : expected) {
EXPECT_TRUE(vec->testBit(expect));
}
@@ -481,7 +481,7 @@ SearchContextTest::checkResultSet(const ResultSet & rs, const DocSet & expected,
} else {
const RankedHit * array = rs.getArray();
if (expected.size() != 0) {
- ASSERT_TRUE(array != NULL);
+ ASSERT_TRUE(array != nullptr);
uint32_t i = 0;
for (DocSet::const_iterator iter = expected.begin();
iter != expected.end(); ++iter, ++i)
@@ -618,11 +618,12 @@ void SearchContextTest::testSearch(const ConfigMap & cfgs) {
template<typename T, typename A>
class Verifier : public search::test::SearchIteratorVerifier {
public:
- Verifier(T key, const vespalib::string & keyAsString, const vespalib::string & name,
+ Verifier(const std::vector<T> & keys, const vespalib::string & keyAsString, const vespalib::string & name,
const Config & cfg, bool withElementId);
~Verifier();
SearchIterator::UP
create(bool strict) const override {
+ _sc->fetchPostings(strict);
auto search = _sc->createIterator(&_dummy, strict);
if (_withElementId) {
search = std::make_unique<attribute::ElementIterator>(std::move(search), *_sc, _dummy);
@@ -637,42 +638,51 @@ private:
};
template<typename T, typename A>
-Verifier<T, A>::Verifier(T key, const vespalib::string & keyAsString, const vespalib::string & name,
+Verifier<T, A>::Verifier(const std::vector<T> & keys, const vespalib::string & keyAsString, const vespalib::string & name,
const Config & cfg, bool withElementId)
: _withElementId(withElementId),
_attribute(AttributeFactory::createAttribute(name + "-initrange", cfg)),
_sc()
{
SearchContextTest::addDocs(*_attribute, getDocIdLimit());
+ size_t i(0);
for (uint32_t doc : getExpectedDocIds()) {
EXPECT_TRUE(nullptr != dynamic_cast<A *>(_attribute.get()));
- EXPECT_TRUE(dynamic_cast<A *>(_attribute.get())->update(doc, key));
+ EXPECT_TRUE(dynamic_cast<A *>(_attribute.get())->update(doc, keys[(i++)%keys.size()]));
}
_attribute->commit(true);
_sc = SearchContextTest::getSearch(*_attribute, keyAsString);
ASSERT_TRUE(_sc->valid());
- _sc->fetchPostings(true);
}
template<typename T, typename A>
Verifier<T, A>::~Verifier() = default;
template<typename T, typename A>
-void SearchContextTest::testSearchIterator(T key, const vespalib::string &keyAsString, const ConfigMap &cfgs) {
+void SearchContextTest::testSearchIterator(const std::vector<T> & keys, const vespalib::string &keyAsString, const ConfigMap &cfgs) {
for (bool withElementId : {false, true} ) {
for (const auto & cfg : cfgs) {
- Verifier<T, A> verifier(key, keyAsString, cfg.first, cfg.second, withElementId);
- verifier.verify();
+ {
+ Verifier<T, A> verifier(keys, keyAsString, cfg.first, cfg.second, withElementId);
+ verifier.verify();
+ }
+ {
+ Config withFilter(cfg.second);
+ withFilter.setIsFilter(true);
+ Verifier<T, A> verifier(keys, keyAsString, cfg.first + "-filter", withFilter, withElementId);
+ verifier.verify();
+ }
}
}
}
void SearchContextTest::testSearchIteratorConformance() {
- testSearchIterator<AttributeVector::largeint_t, IntegerAttribute>(42, "42", _integerCfg);
- testSearchIterator<double, FloatingPointAttribute>(42.42, "42.42", _floatCfg);
- testSearchIterator<vespalib::string, StringAttribute>("any-key", "any-key", _stringCfg);
+ testSearchIterator<AttributeVector::largeint_t, IntegerAttribute>({42,45,46}, "[0;100]", _integerCfg);
+ testSearchIterator<AttributeVector::largeint_t, IntegerAttribute>({42}, "42", _integerCfg);
+ testSearchIterator<double, FloatingPointAttribute>({42.42}, "42.42", _floatCfg);
+ testSearchIterator<vespalib::string, StringAttribute>({"any-key"}, "any-key", _stringCfg);
}
void