diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2019-01-08 17:53:31 +0000 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2019-01-08 17:54:28 +0000 |
commit | 3189bc4a27480cf56867593d2e7f4ca83528b430 (patch) | |
tree | d6e976f11d4e786e483c4fda7e72f25d81da2d3e | |
parent | 21809401b2244eaf1caeae54e501d97990abe43d (diff) |
Add iterator conformance test for multibitvector iterator
-rw-r--r-- | searchlib/src/tests/queryeval/multibitvectoriterator/CMakeLists.txt | 1 | ||||
-rw-r--r-- | searchlib/src/tests/queryeval/multibitvectoriterator/multibitvectoriterator_test.cpp | 52 |
2 files changed, 51 insertions, 2 deletions
diff --git a/searchlib/src/tests/queryeval/multibitvectoriterator/CMakeLists.txt b/searchlib/src/tests/queryeval/multibitvectoriterator/CMakeLists.txt index c447aeabb76..718b0553fc9 100644 --- a/searchlib/src/tests/queryeval/multibitvectoriterator/CMakeLists.txt +++ b/searchlib/src/tests/queryeval/multibitvectoriterator/CMakeLists.txt @@ -4,6 +4,7 @@ vespa_add_executable(searchlib_multibitvectoriterator_test_app TEST multibitvectoriterator_test.cpp DEPENDS searchlib + searchlib_test ) vespa_add_test(NAME searchlib_multibitvectoriterator_test_app COMMAND searchlib_multibitvectoriterator_test_app) vespa_add_executable(searchlib_multibitvectoriterator_bench_app diff --git a/searchlib/src/tests/queryeval/multibitvectoriterator/multibitvectoriterator_test.cpp b/searchlib/src/tests/queryeval/multibitvectoriterator/multibitvectoriterator_test.cpp index 91d39965531..89a4021d0d4 100644 --- a/searchlib/src/tests/queryeval/multibitvectoriterator/multibitvectoriterator_test.cpp +++ b/searchlib/src/tests/queryeval/multibitvectoriterator/multibitvectoriterator_test.cpp @@ -1,6 +1,4 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -#include <vespa/log/log.h> -LOG_SETUP("multibitvectoriterator_test"); #include <vespa/vespalib/testkit/testapp.h> #include <vespa/searchlib/queryeval/multibitvectoriterator.h> #include <vespa/searchlib/queryeval/emptysearch.h> @@ -11,6 +9,10 @@ LOG_SETUP("multibitvectoriterator_test"); #include <vespa/searchlib/queryeval/orsearch.h> #include <vespa/searchlib/fef/termfieldmatchdata.h> #include <vespa/searchlib/fef/termfieldmatchdataarray.h> +#include <vespa/searchlib/test/searchiteratorverifier.h> + +#include <vespa/log/log.h> +LOG_SETUP("multibitvectoriterator_test"); using namespace search::queryeval; using namespace search::fef; @@ -29,6 +31,7 @@ public: void testOr(); void testAndWith(bool invert); void testEndGuard(bool invert); + void testIteratorConformance(); template<typename T> void testThatOptimizePreservesUnpack(); template <typename T> @@ -506,6 +509,49 @@ Test::testEndGuard(bool invert) EXPECT_FALSE(m.seek(_bvs[0]->size()+987)); } +class Verifier : public search::test::SearchIteratorVerifier { +public: + Verifier(size_t numBv); + ~Verifier(); + + SearchIterator::UP create(bool strict) const override; + +private: + mutable TermFieldMatchData _tfmd; + std::vector<BitVector::UP> _bvs; +}; + +Verifier::Verifier(size_t numBv) + : _bvs() +{ + for (size_t i(0); i < numBv; i++) { + _bvs.push_back(BitVector::create(getDocIdLimit())); + } + for (auto & bv : _bvs) { + for (uint32_t docId: getExpectedDocIds()) { + bv->setBit(docId); + } + } +} +Verifier::~Verifier() = default; + +SearchIterator::UP +Verifier::create(bool strict) const { + MultiSearch::Children bvs; + for (const auto & bv : _bvs) { + bvs.push_back(BitVectorIterator::create(bv.get(), getDocIdLimit(), _tfmd, strict, false).release()); + } + SearchIterator::UP iter(AndSearch::create(bvs, strict)); + return MultiBitVectorIteratorBase::optimize(std::move(iter)); +} + +void Test::testIteratorConformance() { + for (size_t i(1); i < 6; i++) { + Verifier searchIteratorVerifier(i); + searchIteratorVerifier.verify(); + } +} + int Test::Main() { @@ -527,6 +573,8 @@ Test::Main() testAndWith(false); testAndWith(true); TEST_FLUSH(); + testIteratorConformance(); + TEST_FLUSH(); TEST_DONE(); } |