diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2018-12-18 21:34:13 +0000 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2018-12-18 21:34:13 +0000 |
commit | 267c8909dedff7dd4beb2b8cd5867f639582d6d1 (patch) | |
tree | c4a4659b7fe7c03447404f80b043b31bb5040185 /searchlib/src | |
parent | f3c9e8af1ef5086057f929342528ef4f793ecf31 (diff) |
Add test for inverted bitvector iterator.
Diffstat (limited to 'searchlib/src')
-rw-r--r-- | searchlib/src/tests/attribute/bitvector/bitvector_test.cpp | 33 | ||||
-rw-r--r-- | searchlib/src/vespa/searchlib/common/bitvectoriterator.cpp | 6 |
2 files changed, 28 insertions, 11 deletions
diff --git a/searchlib/src/tests/attribute/bitvector/bitvector_test.cpp b/searchlib/src/tests/attribute/bitvector/bitvector_test.cpp index c00ab1270e3..abc9d3aa975 100644 --- a/searchlib/src/tests/attribute/bitvector/bitvector_test.cpp +++ b/searchlib/src/tests/attribute/bitvector/bitvector_test.cpp @@ -612,30 +612,47 @@ TEST_F("Test bitvectors with weighted set value string", BitVectorTest) class Verifier : public search::test::SearchIteratorVerifier { public: - Verifier(); + Verifier(bool inverted); ~Verifier(); SearchIterator::UP create(bool strict) const override { - return BitVectorIterator::create(_bv.get(), getDocIdLimit(), _tfmd, strict); + return _inverted + ? BitVectorIterator::createInverse(_bv.get(), getDocIdLimit(), _tfmd, strict) + : BitVectorIterator::create(_bv.get(), getDocIdLimit(), _tfmd, strict); } private: + bool _inverted; mutable TermFieldMatchData _tfmd; BitVector::UP _bv; }; -Verifier::Verifier() - : _bv(BitVector::create(getDocIdLimit())) +Verifier::Verifier(bool inverted) + : _inverted(inverted), + _bv(BitVector::create(getDocIdLimit())) { + if (inverted) { + _bv->setInterval(0, getDocIdLimit()); + } for (uint32_t docId: getExpectedDocIds()) { - _bv->setBit(docId); + if (inverted) { + _bv->clearBit(docId); + } else { + _bv->setBit(docId); + } } } -Verifier::~Verifier() {} +Verifier::~Verifier() = default; TEST("Test that bitvector iterators adheres to SearchIterator requirements") { - Verifier searchIteratorVerifier; - searchIteratorVerifier.verify(); + { + Verifier searchIteratorVerifier(false); + searchIteratorVerifier.verify(); + } + { + Verifier searchIteratorVerifier(true); + searchIteratorVerifier.verify(); + } } diff --git a/searchlib/src/vespa/searchlib/common/bitvectoriterator.cpp b/searchlib/src/vespa/searchlib/common/bitvectoriterator.cpp index 6471b0f5c33..ef2916d3870 100644 --- a/searchlib/src/vespa/searchlib/common/bitvectoriterator.cpp +++ b/searchlib/src/vespa/searchlib/common/bitvectoriterator.cpp @@ -61,7 +61,7 @@ private: template<bool inverse> BitVectorIteratorT<inverse>::BitVectorIteratorT(const BitVector & bv, uint32_t docIdLimit, TermFieldMatchData & matchData) : - BitVectorIterator(bv, docIdLimit, matchData) + BitVectorIterator(bv, docIdLimit, matchData) { } @@ -86,10 +86,10 @@ private: void doSeek(uint32_t docId) override; Trinary is_strict() const override { return Trinary::True; } uint32_t getNextBit(uint32_t docId) const { - return inverse ? ! this->_bv.getNextFalseBit(docId) : this->_bv.getNextTrueBit(docId); + return inverse ? this->_bv.getNextFalseBit(docId) : this->_bv.getNextTrueBit(docId); } uint32_t getFirstBit(uint32_t docId) const { - return inverse ? ! this->_bv.getFirstFalseBit(docId) : this->_bv.getFirstTrueBit(docId); + return inverse ? this->_bv.getFirstFalseBit(docId) : this->_bv.getFirstTrueBit(docId); } }; |