From 42fff159dad086b8888318c1e4d345a60c7e74e7 Mon Sep 17 00:00:00 2001 From: Tor Egge Date: Sun, 18 Feb 2024 03:09:55 +0100 Subject: Rewrite search::queryeval::MultiBitVectorIterator unit test to gtest. --- .../multibitvectoriterator_test.cpp | 188 +++++++++++---------- 1 file changed, 102 insertions(+), 86 deletions(-) (limited to 'searchlib/src/tests') diff --git a/searchlib/src/tests/queryeval/multibitvectoriterator/multibitvectoriterator_test.cpp b/searchlib/src/tests/queryeval/multibitvectoriterator/multibitvectoriterator_test.cpp index 901d8371bc9..ff8f6415284 100644 --- a/searchlib/src/tests/queryeval/multibitvectoriterator/multibitvectoriterator_test.cpp +++ b/searchlib/src/tests/queryeval/multibitvectoriterator/multibitvectoriterator_test.cpp @@ -1,5 +1,4 @@ // Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -#include #include #include #include @@ -9,12 +8,11 @@ #include #include #include +#define ENABLE_GTEST_MIGRATION #include +#include #include -#include -LOG_SETUP("multibitvectoriterator_test"); - using namespace search::queryeval; using namespace search::fef; using namespace search; @@ -74,6 +72,18 @@ Fixture::Fixture() } } +class MultiBitVectorIteratorTest : public ::testing::Test, + protected Fixture +{ +protected: + MultiBitVectorIteratorTest(); + ~MultiBitVectorIteratorTest() override; +}; + +MultiBitVectorIteratorTest::MultiBitVectorIteratorTest() = default; + +MultiBitVectorIteratorTest::~MultiBitVectorIteratorTest() = default; + using H = std::vector; H @@ -130,68 +140,69 @@ Fixture::testAndWith(bool invert) H firstHits3 = seekNoReset(*s, 1, 130); H lastHits3 = seekNoReset(*s, 130, _bvs[0]->size()); //These constants will change if rnd(341) is changed. - EXPECT_EQUAL(30u, firstHits2.size()); - EXPECT_EQUAL(19u, firstHits3.size()); - EXPECT_EQUAL(1234u, lastHits2F.size()); - ASSERT_EQUAL(lastHits3.size(), lastHits2F.size()); + EXPECT_EQ(30u, firstHits2.size()); + EXPECT_EQ(19u, firstHits3.size()); + EXPECT_EQ(1234u, lastHits2F.size()); + ASSERT_EQ(lastHits3.size(), lastHits2F.size()); for (size_t i(0); i < lastHits3.size(); i++) { - EXPECT_EQUAL(lastHits3[i], lastHits2F[i]); + EXPECT_EQ(lastHits3[i], lastHits2F[i]); } } } -TEST_F("testAndNot", Fixture) +TEST_F(MultiBitVectorIteratorTest, test_and_not) { for (bool invert : {false, true}) { - f.template testOptimizeCommon(false, invert); - f.template testSearch(false, invert); - f.template testSearch(true, invert); + testOptimizeCommon(false, invert); + testSearch(false, invert); + testSearch(true, invert); } } -TEST_F("testAnd", Fixture) +TEST_F(MultiBitVectorIteratorTest, test_and) { for (bool invert : {false, true}) { - f.template testOptimizeCommon(true, invert); - f.template testOptimizeAndOr(invert); - f.template testSearch(false, invert); - f.template testSearch(true, invert); + testOptimizeCommon(true, invert); + testOptimizeAndOr(invert); + testSearch(false, invert); + testSearch(true, invert); } } -TEST_F("testOr", Fixture) +TEST_F(MultiBitVectorIteratorTest, test_or) { for (bool invert : {false, true}) { - f.template testOptimizeCommon< OrSearch >(false, invert); - f.template testOptimizeAndOr< OrSearch >(invert); - f.template testSearch(false, invert); - f.template testSearch(true, invert); + testOptimizeCommon< OrSearch >(false, invert); + testOptimizeAndOr< OrSearch >(invert); + testSearch(false, invert); + testSearch(true, invert); } } -TEST_F("testAndWith", Fixture) { - f.testAndWith(false); - f.testAndWith(true); +TEST_F(MultiBitVectorIteratorTest, test_and_with) +{ + testAndWith(false); + testAndWith(true); } -TEST_F("testBug7163266", Fixture) +TEST_F(MultiBitVectorIteratorTest, test_bug_7163266) { TermFieldMatchData tfmd[30]; - f._bvs[0]->setBit(1); - f._bvs[1]->setBit(1); + _bvs[0]->setBit(1); + _bvs[1]->setBit(1); MultiSearch::Children children; UnpackInfo unpackInfo; for (size_t i(0); i < 28; i++) { children.emplace_back(new TrueSearch(tfmd[2])); unpackInfo.add(i); } - children.push_back(f.createIter(0, false, tfmd[0], false)); - children.push_back(f.createIter(1, false, tfmd[1], false)); + children.push_back(createIter(0, false, tfmd[0], false)); + children.push_back(createIter(1, false, tfmd[1], false)); SearchIterator::UP s = AndSearch::create(std::move(children), false, unpackInfo); const auto * ms = dynamic_cast(s.get()); EXPECT_TRUE(ms != nullptr); - EXPECT_EQUAL(30u, ms->getChildren().size()); - EXPECT_EQUAL("search::queryeval::AndSearchNoStrict", s->getClassName()); + EXPECT_EQ(30u, ms->getChildren().size()); + EXPECT_EQ("search::queryeval::AndSearchNoStrict", s->getClassName()); for (size_t i(0); i < 28; i++) { EXPECT_TRUE(ms->needUnpack(i)); } @@ -200,8 +211,8 @@ TEST_F("testBug7163266", Fixture) s = MultiBitVectorIteratorBase::optimize(std::move(s)); ms = dynamic_cast(s.get()); EXPECT_TRUE(ms != nullptr); - EXPECT_EQUAL(29u, ms->getChildren().size()); - EXPECT_EQUAL("search::queryeval::AndSearchNoStrict", s->getClassName()); + EXPECT_EQ(29u, ms->getChildren().size()); + EXPECT_EQ("search::queryeval::AndSearchNoStrict", s->getClassName()); for (size_t i(0); i < 28; i++) { EXPECT_TRUE(ms->needUnpack(i)); } @@ -212,15 +223,15 @@ void verifySelectiveUnpack(SearchIterator & s, const TermFieldMatchData * tfmd) { s.seek(1); - EXPECT_EQUAL(0u, tfmd[0].getDocId()); - EXPECT_EQUAL(0u, tfmd[1].getDocId()); - EXPECT_EQUAL(0u, tfmd[2].getDocId()); - EXPECT_EQUAL(0u, tfmd[3].getDocId()); + EXPECT_EQ(0u, tfmd[0].getDocId()); + EXPECT_EQ(0u, tfmd[1].getDocId()); + EXPECT_EQ(0u, tfmd[2].getDocId()); + EXPECT_EQ(0u, tfmd[3].getDocId()); s.unpack(1); - EXPECT_EQUAL(0u, tfmd[0].getDocId()); - EXPECT_EQUAL(1u, tfmd[1].getDocId()); - EXPECT_EQUAL(1u, tfmd[2].getDocId()); - EXPECT_EQUAL(0u, tfmd[3].getDocId()); + EXPECT_EQ(0u, tfmd[0].getDocId()); + EXPECT_EQ(1u, tfmd[1].getDocId()); + EXPECT_EQ(1u, tfmd[2].getDocId()); + EXPECT_EQ(0u, tfmd[3].getDocId()); } template @@ -243,7 +254,7 @@ Fixture::testThatOptimizePreservesUnpack() s->initFullRange(); const auto * ms = dynamic_cast(s.get()); EXPECT_TRUE(ms != nullptr); - EXPECT_EQUAL(4u, ms->getChildren().size()); + EXPECT_EQ(4u, ms->getChildren().size()); verifySelectiveUnpack(*s, tfmd); tfmd[1].resetOnlyDocId(0); tfmd[2].resetOnlyDocId(0); @@ -251,7 +262,7 @@ Fixture::testThatOptimizePreservesUnpack() s->initFullRange(); ms = dynamic_cast(s.get()); EXPECT_TRUE(ms != nullptr); - EXPECT_EQUAL(2u, ms->getChildren().size()); + EXPECT_EQ(2u, ms->getChildren().size()); verifySelectiveUnpack(*s, tfmd); fixup_bitvectors(); } @@ -260,26 +271,27 @@ void verifyOrUnpack(SearchIterator & s, TermFieldMatchData tfmd[3]) { s.initFullRange(); s.seek(1); for (size_t i = 0; i < 3; i++) { - EXPECT_EQUAL(0u, tfmd[i].getDocId()); + EXPECT_EQ(0u, tfmd[i].getDocId()); } s.unpack(1); - EXPECT_EQUAL(0u, tfmd[0].getDocId()); - EXPECT_EQUAL(1u, tfmd[1].getDocId()); - EXPECT_EQUAL(0u, tfmd[2].getDocId()); + EXPECT_EQ(0u, tfmd[0].getDocId()); + EXPECT_EQ(1u, tfmd[1].getDocId()); + EXPECT_EQ(0u, tfmd[2].getDocId()); } -TEST_F("testUnpackOfOr", Fixture) { - f._bvs[0]->clearBit(1); - f._bvs[1]->setBit(1); - f._bvs[2]->clearBit(1); +TEST_F(MultiBitVectorIteratorTest, test_unpack_of_Or) +{ + _bvs[0]->clearBit(1); + _bvs[1]->setBit(1); + _bvs[2]->clearBit(1); UnpackInfo all; all.forceAll(); - f.verifyUnpackOfOr(all); + verifyUnpackOfOr(all); UnpackInfo unpackInfo; unpackInfo.add(1); unpackInfo.add(2); - f.verifyUnpackOfOr(unpackInfo); + verifyUnpackOfOr(unpackInfo); } void @@ -299,13 +311,13 @@ Fixture::verifyUnpackOfOr(const UnpackInfo &unpackInfo) const auto * ms = dynamic_cast(s.get()); EXPECT_TRUE(ms != nullptr); - EXPECT_EQUAL(3u, ms->getChildren().size()); + EXPECT_EQ(3u, ms->getChildren().size()); s = MultiBitVectorIteratorBase::optimize(std::move(s)); s->initFullRange(); ms = dynamic_cast(s.get()); EXPECT_TRUE(ms != nullptr); - EXPECT_EQUAL(3u, ms->getChildren().size()); + EXPECT_EQ(3u, ms->getChildren().size()); verifyOrUnpack(*s, tfmdA); } @@ -319,9 +331,9 @@ searchAndCompare(SearchIterator::UP s, uint32_t docIdLimit) if (s.get() != p) { H b = seek(*s, docIdLimit); EXPECT_FALSE(a.empty()); - EXPECT_EQUAL(a.size(), b.size()); + EXPECT_EQ(a.size(), b.size()); for (size_t i(0); i < a.size(); i++) { - EXPECT_EQUAL(a[i], b[i]); + EXPECT_EQ(a[i], b[i]); } } } @@ -369,7 +381,7 @@ Fixture::testOptimizeCommon(bool isAnd, bool invert) s = MultiBitVectorIteratorBase::optimize(std::move(s)); EXPECT_TRUE(dynamic_cast(s.get()) != nullptr); const auto & m(dynamic_cast(*s)); - EXPECT_EQUAL(1u, m.getChildren().size()); + EXPECT_EQ(1u, m.getChildren().size()); EXPECT_TRUE(dynamic_cast(m.getChildren()[0].get()) != nullptr); } { @@ -381,7 +393,7 @@ Fixture::testOptimizeCommon(bool isAnd, bool invert) s = MultiBitVectorIteratorBase::optimize(std::move(s)); EXPECT_TRUE(dynamic_cast(s.get()) != nullptr); const auto & m(dynamic_cast(*s)); - EXPECT_EQUAL(2u, m.getChildren().size()); + EXPECT_EQ(2u, m.getChildren().size()); EXPECT_TRUE(dynamic_cast(m.getChildren()[0].get()) != nullptr); EXPECT_TRUE(dynamic_cast(m.getChildren()[1].get()) != nullptr); } @@ -394,7 +406,7 @@ Fixture::testOptimizeCommon(bool isAnd, bool invert) s = MultiBitVectorIteratorBase::optimize(std::move(s)); EXPECT_TRUE(dynamic_cast(s.get()) != nullptr); const auto & m(dynamic_cast(*s)); - EXPECT_EQUAL(2u, m.getChildren().size()); + EXPECT_EQ(2u, m.getChildren().size()); EXPECT_TRUE(dynamic_cast(m.getChildren()[0].get()) != nullptr); EXPECT_TRUE(dynamic_cast(m.getChildren()[1].get()) != nullptr); } @@ -409,7 +421,7 @@ Fixture::testOptimizeCommon(bool isAnd, bool invert) EXPECT_TRUE(s); EXPECT_TRUE(dynamic_cast(s.get()) != nullptr); const auto & m(dynamic_cast(*s)); - EXPECT_EQUAL(2u, m.getChildren().size()); + EXPECT_EQ(2u, m.getChildren().size()); EXPECT_TRUE(dynamic_cast(m.getChildren()[0].get()) != nullptr); EXPECT_TRUE(dynamic_cast(m.getChildren()[1].get()) != nullptr); EXPECT_TRUE(Trinary::False == m.getChildren()[1]->is_strict()); @@ -425,7 +437,7 @@ Fixture::testOptimizeCommon(bool isAnd, bool invert) EXPECT_TRUE(s); EXPECT_TRUE(dynamic_cast(s.get()) != nullptr); const auto & m(dynamic_cast(*s)); - EXPECT_EQUAL(2u, m.getChildren().size()); + EXPECT_EQ(2u, m.getChildren().size()); EXPECT_TRUE(dynamic_cast(m.getChildren()[0].get()) != nullptr); EXPECT_TRUE(dynamic_cast(m.getChildren()[1].get()) != nullptr); EXPECT_TRUE(Trinary::True == m.getChildren()[1]->is_strict()); @@ -488,7 +500,7 @@ Fixture::testOptimizeAndOr(bool invert) EXPECT_TRUE(s); EXPECT_TRUE(dynamic_cast(s.get()) != nullptr); const auto & m(dynamic_cast(*s)); - EXPECT_EQUAL(2u, m.getChildren().size()); + EXPECT_EQ(2u, m.getChildren().size()); EXPECT_TRUE(dynamic_cast(m.getChildren()[0].get()) != nullptr); EXPECT_TRUE(Trinary::False == m.getChildren()[0]->is_strict()); EXPECT_TRUE(dynamic_cast(m.getChildren()[1].get()) != nullptr); @@ -504,7 +516,7 @@ Fixture::testOptimizeAndOr(bool invert) EXPECT_TRUE(s); EXPECT_TRUE(dynamic_cast(s.get()) != nullptr); const auto & m(dynamic_cast(*s)); - EXPECT_EQUAL(2u, m.getChildren().size()); + EXPECT_EQ(2u, m.getChildren().size()); EXPECT_TRUE(dynamic_cast(m.getChildren()[0].get()) != nullptr); EXPECT_TRUE(Trinary::False == m.getChildren()[0]->is_strict()); EXPECT_TRUE(dynamic_cast(m.getChildren()[1].get()) != nullptr); @@ -520,7 +532,7 @@ Fixture::testOptimizeAndOr(bool invert) EXPECT_TRUE(s); EXPECT_TRUE(dynamic_cast(s.get()) != nullptr); const auto & m(dynamic_cast(*s)); - EXPECT_EQUAL(2u, m.getChildren().size()); + EXPECT_EQ(2u, m.getChildren().size()); EXPECT_TRUE(dynamic_cast(m.getChildren()[0].get()) != nullptr); EXPECT_TRUE(Trinary::True == m.getChildren()[0]->is_strict()); EXPECT_TRUE(dynamic_cast(m.getChildren()[1].get()) != nullptr); @@ -536,7 +548,7 @@ Fixture::testOptimizeAndOr(bool invert) EXPECT_TRUE(s); EXPECT_TRUE(dynamic_cast(s.get()) != nullptr); const auto & m(dynamic_cast(*s)); - EXPECT_EQUAL(2u, m.getChildren().size()); + EXPECT_EQ(2u, m.getChildren().size()); EXPECT_TRUE(dynamic_cast(m.getChildren()[0].get()) != nullptr); EXPECT_TRUE(Trinary::True == m.getChildren()[0]->is_strict()); EXPECT_TRUE(dynamic_cast(m.getChildren()[1].get()) != nullptr); @@ -563,14 +575,16 @@ Fixture::testEndGuard(bool invert) EXPECT_FALSE(m.seek(_bvs[0]->size()+987)); } -TEST_F("testEndGuard", Fixture) { - f.testEndGuard(false); - f.testEndGuard(true); +TEST_F(MultiBitVectorIteratorTest, test_end_guard) +{ + testEndGuard(false); + testEndGuard(true); } -TEST_F("testThatOptimizePreservesUnpack", Fixture) { - f.template testThatOptimizePreservesUnpack(); - f.template testThatOptimizePreservesUnpack(); +TEST_F(MultiBitVectorIteratorTest, test_that_optimize_preserves_unpack) +{ + testThatOptimizePreservesUnpack(); + testThatOptimizePreservesUnpack(); } SearchIterator::UP @@ -595,7 +609,7 @@ countUntilEnd(SearchIterator & s) { for (uint32_t docId = s.seekFirst(1); !s.isAtEnd(); docId = s.seekNext(docId+1)) { seekCount++; } - EXPECT_EQUAL(2459u, seekCount); + EXPECT_EQ(2459u, seekCount); } void @@ -604,19 +618,20 @@ countUntilDocId(SearchIterator & s) { for (uint32_t docId = s.seekFirst(1), endId = s.getEndId(); docId < endId; docId = s.seekNext(docId+1)) { seekCount++; } - EXPECT_EQUAL(2459u, seekCount); + EXPECT_EQ(2459u, seekCount); } -TEST_F("test that short vectors don't spin at end", Fixture) { +TEST_F(MultiBitVectorIteratorTest, test_that_short_vectors_dont_spin_at_end) +{ TermFieldMatchData tfmd; - countUntilEnd(*createDual(f, tfmd, f._bvs[0]->size())); - countUntilDocId(*createDual(f, tfmd, f._bvs[0]->size())); + countUntilEnd(*createDual(*this, tfmd, _bvs[0]->size())); + countUntilDocId(*createDual(*this, tfmd, _bvs[0]->size())); - countUntilDocId(*createDual(f, tfmd, f._bvs[0]->size() + 1)); - countUntilEnd(*createDual(f, tfmd, f._bvs[0]->size() + 1)); + countUntilDocId(*createDual(*this, tfmd, _bvs[0]->size() + 1)); + countUntilEnd(*createDual(*this, tfmd, _bvs[0]->size() + 1)); - countUntilDocId(*createDual(f, tfmd, -1)); - countUntilEnd(*createDual(f, tfmd, -1)); + countUntilDocId(*createDual(*this, tfmd, -1)); + countUntilEnd(*createDual(*this, tfmd, -1)); } class Verifier : public search::test::SearchIteratorVerifier { @@ -660,11 +675,12 @@ Verifier::create(bool strict) const { SearchIterator::UP iter(_is_and ? AndSearch::create(std::move(bvs), strict) : OrSearch::create(std::move(bvs), strict)); auto mbvit = MultiBitVectorIteratorBase::optimize(std::move(iter)); EXPECT_TRUE((_bvs.size() < 2) || (dynamic_cast(mbvit.get()) != nullptr)); - EXPECT_EQUAL(strict, Trinary::True == mbvit->is_strict()); + EXPECT_EQ(strict, Trinary::True == mbvit->is_strict()); return mbvit; } -TEST("testIteratorConformance") { +TEST_F(MultiBitVectorIteratorTest, test_iterator_conformance) +{ for (bool is_and : {false, true}) { for (size_t i(1); i < 6; i++) { Verifier searchIteratorVerifier(i, is_and); @@ -673,4 +689,4 @@ TEST("testIteratorConformance") { } } -TEST_MAIN() { TEST_RUN_ALL(); } +GTEST_MAIN_RUN_ALL_TESTS() -- cgit v1.2.3