diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2023-10-03 09:20:12 +0000 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2023-10-03 09:46:03 +0000 |
commit | 6446b42c81bf21f4bbe2772813a27e426e92f157 (patch) | |
tree | 4a8eb7e0d9dbb50ef8fa7d6782e5898907e7a8a5 | |
parent | 9c8ecc24c725d00fb39640d40be32603d8406bf9 (diff) |
Add disabled test to prove eternal loop.
-rw-r--r-- | searchlib/src/tests/queryeval/multibitvectoriterator/multibitvectoriterator_test.cpp | 39 |
1 files changed, 35 insertions, 4 deletions
diff --git a/searchlib/src/tests/queryeval/multibitvectoriterator/multibitvectoriterator_test.cpp b/searchlib/src/tests/queryeval/multibitvectoriterator/multibitvectoriterator_test.cpp index 42f37df6a29..dd3394db507 100644 --- a/searchlib/src/tests/queryeval/multibitvectoriterator/multibitvectoriterator_test.cpp +++ b/searchlib/src/tests/queryeval/multibitvectoriterator/multibitvectoriterator_test.cpp @@ -573,22 +573,53 @@ TEST_F("testThatOptimizePreservesUnpack", Fixture) { f.template testThatOptimizePreservesUnpack<AndSearch>(); } -TEST_F("test that short vectors don't spin at end", Fixture) { - TermFieldMatchData tfmd; +SearchIterator::UP +createDual(Fixture & f, TermFieldMatchData & tfmd, int32_t docIdLimit) { MultiSearch::Children children; children.push_back(f.createIter(0, false, tfmd, true)); children.push_back(f.createIter(1, false, tfmd, true)); SearchIterator::UP s = AndSearch::create(std::move(children), false); s = MultiBitVectorIteratorBase::optimize(std::move(s)); EXPECT_TRUE(s); - s->initRange(1, f._bvs[0]->size()); + if (docIdLimit < 0) { + s->initFullRange(); + } else { + s->initRange(1, docIdLimit); + } + return s; +} + +void +countUntilEnd(SearchIterator & s) { uint32_t seekCount = 0; - for (uint32_t docId = s->seekFirst(1); !s->isAtEnd(); docId = s->seekNext(docId+1)) { + for (uint32_t docId = s.seekFirst(1); !s.isAtEnd(); docId = s.seekNext(docId+1)) { seekCount++; } EXPECT_EQUAL(2459u, seekCount); } +void +countUntilDocId(SearchIterator & s) { + uint32_t seekCount = 0; + for (uint32_t docId = s.seekFirst(1), endId = s.getEndId(); docId < endId; docId = s.seekNext(docId+1)) { + seekCount++; + } + EXPECT_EQUAL(2459u, seekCount); +} + +TEST_F("test that short vectors don't spin at end", Fixture) { + TermFieldMatchData tfmd; + countUntilEnd(*createDual(f, tfmd, f._bvs[0]->size())); + countUntilDocId(*createDual(f, tfmd, f._bvs[0]->size())); + + // Below fails with eternal loop + //countUntilDocId(*createDual(f, tfmd, f._bvs[0]->size() + 1)); + //countUntilEnd(*createDual(f, tfmd, f._bvs[0]->size() + 1)); + + //countUntilDocId(*createDual(f, tfmd, -1)); + //countUntilEnd(*createDual(f, tfmd, -1)); +} + class Verifier : public search::test::SearchIteratorVerifier { public: Verifier(size_t numBv, bool is_and); |