summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2023-10-03 09:20:12 +0000
committerHenning Baldersheim <balder@yahoo-inc.com>2023-10-03 09:46:03 +0000
commit6446b42c81bf21f4bbe2772813a27e426e92f157 (patch)
tree4a8eb7e0d9dbb50ef8fa7d6782e5898907e7a8a5
parent9c8ecc24c725d00fb39640d40be32603d8406bf9 (diff)
Add disabled test to prove eternal loop.
-rw-r--r--searchlib/src/tests/queryeval/multibitvectoriterator/multibitvectoriterator_test.cpp39
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);