diff options
author | Arne H Juul <arnej27959@users.noreply.github.com> | 2020-06-30 08:45:52 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-06-30 08:45:52 +0200 |
commit | e4900248df1a6c5d240c633704f71e098b41ef40 (patch) | |
tree | c12664b4bcab187892b285bc9a260a44ead03e96 /searchlib/src | |
parent | bb7d188e04ff44318906dfa9ede5b532409ebf9f (diff) | |
parent | e202f5e4e674cc86966189241bfe27d558f4f0f4 (diff) |
Merge pull request #13734 from vespa-engine/arnej/modernize-wrapper-tests
Arnej/modernize wrapper tests
Diffstat (limited to 'searchlib/src')
8 files changed, 208 insertions, 289 deletions
diff --git a/searchlib/src/tests/queryeval/booleanmatchiteratorwrapper/.cvsignore b/searchlib/src/tests/queryeval/booleanmatchiteratorwrapper/.cvsignore deleted file mode 100644 index 9e6565f9d16..00000000000 --- a/searchlib/src/tests/queryeval/booleanmatchiteratorwrapper/.cvsignore +++ /dev/null @@ -1,3 +0,0 @@ -.depend -Makefile -booleanmatchiteratorwrapper_test diff --git a/searchlib/src/tests/queryeval/booleanmatchiteratorwrapper/.gitignore b/searchlib/src/tests/queryeval/booleanmatchiteratorwrapper/.gitignore deleted file mode 100644 index b568b87514a..00000000000 --- a/searchlib/src/tests/queryeval/booleanmatchiteratorwrapper/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -.depend -Makefile -booleanmatchiteratorwrapper_test -searchlib_booleanmatchiteratorwrapper_test_app diff --git a/searchlib/src/tests/queryeval/booleanmatchiteratorwrapper/CMakeLists.txt b/searchlib/src/tests/queryeval/booleanmatchiteratorwrapper/CMakeLists.txt deleted file mode 100644 index d97fe5b12d7..00000000000 --- a/searchlib/src/tests/queryeval/booleanmatchiteratorwrapper/CMakeLists.txt +++ /dev/null @@ -1,9 +0,0 @@ -# Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -vespa_add_executable(searchlib_booleanmatchiteratorwrapper_test_app TEST - SOURCES - booleanmatchiteratorwrapper_test.cpp - DEPENDS - searchlib - searchlib_test -) -vespa_add_test(NAME searchlib_booleanmatchiteratorwrapper_test_app COMMAND searchlib_booleanmatchiteratorwrapper_test_app) diff --git a/searchlib/src/tests/queryeval/booleanmatchiteratorwrapper/booleanmatchiteratorwrapper_test.cpp b/searchlib/src/tests/queryeval/booleanmatchiteratorwrapper/booleanmatchiteratorwrapper_test.cpp deleted file mode 100644 index 7d4551a5c7d..00000000000 --- a/searchlib/src/tests/queryeval/booleanmatchiteratorwrapper/booleanmatchiteratorwrapper_test.cpp +++ /dev/null @@ -1,139 +0,0 @@ -// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. - -#include <vespa/vespalib/testkit/testapp.h> -#include <vespa/searchlib/queryeval/booleanmatchiteratorwrapper.h> -#include <vespa/searchlib/fef/termfieldmatchdata.h> -#include <vespa/searchlib/common/bitvectoriterator.h> -#include <vespa/searchlib/test/searchiteratorverifier.h> - -using namespace search::fef; -using namespace search::queryeval; -using search::BitVector; -using search::BitVectorIterator; - -struct DummyItr : public SearchIterator { - static uint32_t seekCnt; - static uint32_t unpackCnt; - static uint32_t dtorCnt; - static uint32_t _unpackedDocId; - TermFieldMatchData *match; - - DummyItr(TermFieldMatchData *m) { - match = m; - } - - ~DummyItr() { - ++dtorCnt; - } - - void doSeek(uint32_t docid) override { - ++seekCnt; - if (docid <= 10) { - setDocId(10); - } else if (docid <= 20) { - setDocId(20); - } else { - setAtEnd(); - } - } - - void doUnpack(uint32_t docid) override { - ++unpackCnt; - if (match != 0) { - _unpackedDocId = docid; - } - } -}; -uint32_t DummyItr::seekCnt = 0; -uint32_t DummyItr::unpackCnt = 0; -uint32_t DummyItr::dtorCnt = 0; -uint32_t DummyItr::_unpackedDocId = 0; - - -TEST("mostly everything") { - EXPECT_EQUAL(DummyItr::seekCnt, 0u); - EXPECT_EQUAL(DummyItr::unpackCnt, 0u); - EXPECT_EQUAL(DummyItr::dtorCnt, 0u); - { // without wrapper - TermFieldMatchData match; - DummyItr::_unpackedDocId = 0; - SearchIterator::UP search(new DummyItr(&match)); - search->initFullRange(); - EXPECT_EQUAL(DummyItr::_unpackedDocId, 0u); - EXPECT_TRUE(!search->seek(1u)); - EXPECT_EQUAL(search->getDocId(), 10u); - EXPECT_TRUE(search->seek(10)); - search->unpack(10); - EXPECT_EQUAL(DummyItr::_unpackedDocId, 10u); - EXPECT_TRUE(!search->seek(15)); - EXPECT_EQUAL(search->getDocId(), 20u); - EXPECT_TRUE(search->seek(20)); - search->unpack(20); - EXPECT_EQUAL(DummyItr::_unpackedDocId, 20u); - EXPECT_TRUE(!search->seek(25)); - EXPECT_TRUE(search->isAtEnd()); - } - EXPECT_EQUAL(DummyItr::seekCnt, 3u); - EXPECT_EQUAL(DummyItr::unpackCnt, 2u); - EXPECT_EQUAL(DummyItr::dtorCnt, 1u); - { // with wrapper - TermFieldMatchData match; - TermFieldMatchDataArray tfmda; - tfmda.add(&match); - DummyItr::_unpackedDocId = 0; - SearchIterator::UP search(new BooleanMatchIteratorWrapper(SearchIterator::UP(new DummyItr(&match)), tfmda)); - search->initFullRange(); - EXPECT_EQUAL(DummyItr::_unpackedDocId, 0u); - EXPECT_TRUE(!search->seek(1u)); - EXPECT_EQUAL(search->getDocId(), 10u); - EXPECT_TRUE(search->seek(10)); - search->unpack(10); - EXPECT_EQUAL(DummyItr::_unpackedDocId, 0u); - EXPECT_TRUE(!search->seek(15)); - EXPECT_EQUAL(search->getDocId(), 20u); - EXPECT_TRUE(search->seek(20)); - search->unpack(20); - EXPECT_EQUAL(DummyItr::_unpackedDocId, 0u); - EXPECT_TRUE(!search->seek(25)); - EXPECT_TRUE(search->isAtEnd()); - } - EXPECT_EQUAL(DummyItr::seekCnt, 6u); - EXPECT_EQUAL(DummyItr::unpackCnt, 2u); - EXPECT_EQUAL(DummyItr::dtorCnt, 2u); - { // with wrapper, without match data - SearchIterator::UP search(new BooleanMatchIteratorWrapper(SearchIterator::UP(new DummyItr(0)), TermFieldMatchDataArray())); - search->initFullRange(); - EXPECT_TRUE(!search->seek(1u)); - EXPECT_EQUAL(search->getDocId(), 10u); - EXPECT_TRUE(search->seek(10)); - search->unpack(10); - EXPECT_TRUE(!search->seek(15)); - EXPECT_EQUAL(search->getDocId(), 20u); - EXPECT_TRUE(search->seek(20)); - search->unpack(20); - EXPECT_TRUE(!search->seek(25)); - EXPECT_TRUE(search->isAtEnd()); - } - EXPECT_EQUAL(DummyItr::seekCnt, 9u); - EXPECT_EQUAL(DummyItr::unpackCnt, 2u); - EXPECT_EQUAL(DummyItr::dtorCnt, 3u); -} - -class Verifier : public search::test::SearchIteratorVerifier { -public: - ~Verifier(); - SearchIterator::UP create(bool strict) const override { - return std::make_unique<BooleanMatchIteratorWrapper>(createIterator(getExpectedDocIds(), strict), _tfmda);; - } -private: - mutable TermFieldMatchDataArray _tfmda; -}; - -Verifier::~Verifier() {} - -TEST("Test that boolean wrapper iterators adheres to SearchIterator requirements") { - Verifier searchIteratorVerifier; - searchIteratorVerifier.verify(); -} - -TEST_MAIN() { TEST_RUN_ALL(); } diff --git a/searchlib/src/tests/queryeval/filter_wrapper/CMakeLists.txt b/searchlib/src/tests/queryeval/filter_wrapper/CMakeLists.txt deleted file mode 100644 index bab956e73bb..00000000000 --- a/searchlib/src/tests/queryeval/filter_wrapper/CMakeLists.txt +++ /dev/null @@ -1,10 +0,0 @@ -# Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. - -vespa_add_executable(searchlib_filter_wrapper_test_app TEST - SOURCES - filter_wrapper_test.cpp - DEPENDS - searchlib - searchlib_test -) -vespa_add_test(NAME searchlib_filter_wrapper_test_app COMMAND searchlib_filter_wrapper_test_app) diff --git a/searchlib/src/tests/queryeval/filter_wrapper/filter_wrapper_test.cpp b/searchlib/src/tests/queryeval/filter_wrapper/filter_wrapper_test.cpp deleted file mode 100644 index 707f51c551a..00000000000 --- a/searchlib/src/tests/queryeval/filter_wrapper/filter_wrapper_test.cpp +++ /dev/null @@ -1,124 +0,0 @@ -// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. - -#include <vespa/vespalib/testkit/testapp.h> -#include <vespa/searchlib/queryeval/filter_wrapper.h> -#include <vespa/searchlib/fef/termfieldmatchdata.h> -#include <vespa/searchlib/common/bitvectoriterator.h> -#include <vespa/searchlib/test/searchiteratorverifier.h> - -using namespace search::fef; -using namespace search::queryeval; -using search::BitVector; -using search::BitVectorIterator; - -struct DummyItr : public SearchIterator { - static uint32_t seekCnt; - static uint32_t unpackCnt; - static uint32_t dtorCnt; - static uint32_t _unpackedDocId; - TermFieldMatchData *match; - - DummyItr(TermFieldMatchData *m) { - match = m; - } - - ~DummyItr() { - ++dtorCnt; - } - - void doSeek(uint32_t docid) override { - ++seekCnt; - if (docid <= 10) { - setDocId(10); - } else if (docid <= 20) { - setDocId(20); - } else { - setAtEnd(); - } - } - - void doUnpack(uint32_t docid) override { - ++unpackCnt; - if (match != 0) { - _unpackedDocId = docid; - } - } -}; -uint32_t DummyItr::seekCnt = 0; -uint32_t DummyItr::unpackCnt = 0; -uint32_t DummyItr::dtorCnt = 0; -uint32_t DummyItr::_unpackedDocId = 0; - - -TEST("filter wrapper forwards as expected") { - EXPECT_EQUAL(DummyItr::seekCnt, 0u); - EXPECT_EQUAL(DummyItr::unpackCnt, 0u); - EXPECT_EQUAL(DummyItr::dtorCnt, 0u); - { // without wrapper - TermFieldMatchData match; - DummyItr::_unpackedDocId = 0; - SearchIterator::UP search(new DummyItr(&match)); - search->initFullRange(); - EXPECT_EQUAL(DummyItr::_unpackedDocId, 0u); - EXPECT_TRUE(!search->seek(1u)); - EXPECT_EQUAL(search->getDocId(), 10u); - EXPECT_TRUE(search->seek(10)); - search->unpack(10); - EXPECT_EQUAL(DummyItr::_unpackedDocId, 10u); - EXPECT_TRUE(!search->seek(15)); - EXPECT_EQUAL(search->getDocId(), 20u); - EXPECT_TRUE(search->seek(20)); - search->unpack(20); - EXPECT_EQUAL(DummyItr::_unpackedDocId, 20u); - EXPECT_TRUE(!search->seek(25)); - EXPECT_TRUE(search->isAtEnd()); - } - EXPECT_EQUAL(DummyItr::seekCnt, 3u); - EXPECT_EQUAL(DummyItr::unpackCnt, 2u); - EXPECT_EQUAL(DummyItr::dtorCnt, 1u); - { // with wrapper - TermFieldMatchData match; - TermFieldMatchDataArray tfmda; - tfmda.add(&match); - DummyItr::_unpackedDocId = 0; - auto search = std::make_unique<FilterWrapper>(1); - auto to_wrap = std::make_unique<DummyItr>(search->tfmda()[0]); - search->wrap(std::move(to_wrap)); - search->initFullRange(); - EXPECT_EQUAL(DummyItr::_unpackedDocId, 0u); - EXPECT_TRUE(!search->seek(1u)); - EXPECT_EQUAL(search->getDocId(), 10u); - EXPECT_TRUE(search->seek(10)); - search->unpack(10); - EXPECT_EQUAL(DummyItr::_unpackedDocId, 0u); - EXPECT_TRUE(!search->seek(15)); - EXPECT_EQUAL(search->getDocId(), 20u); - EXPECT_TRUE(search->seek(20)); - search->unpack(20); - EXPECT_EQUAL(DummyItr::_unpackedDocId, 0u); - EXPECT_TRUE(!search->seek(25)); - EXPECT_TRUE(search->isAtEnd()); - } - EXPECT_EQUAL(DummyItr::seekCnt, 6u); - EXPECT_EQUAL(DummyItr::unpackCnt, 2u); - EXPECT_EQUAL(DummyItr::dtorCnt, 2u); -} - -class Verifier : public search::test::SearchIteratorVerifier { -public: - ~Verifier(); - SearchIterator::UP create(bool strict) const override { - auto search = std::make_unique<FilterWrapper>(1); - search->wrap(createIterator(getExpectedDocIds(), strict)); - return search; - } -}; - -Verifier::~Verifier() {} - -TEST("Test that filter wrapper iterators adheres to SearchIterator requirements") { - Verifier searchIteratorVerifier; - searchIteratorVerifier.verify(); -} - -TEST_MAIN() { TEST_RUN_ALL(); } diff --git a/searchlib/src/tests/queryeval/wrappers/CMakeLists.txt b/searchlib/src/tests/queryeval/wrappers/CMakeLists.txt new file mode 100644 index 00000000000..d1d566b1cab --- /dev/null +++ b/searchlib/src/tests/queryeval/wrappers/CMakeLists.txt @@ -0,0 +1,11 @@ +# Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. + +vespa_add_executable(searchlib_wrappers_test_app TEST + SOURCES + wrappers_test.cpp + DEPENDS + searchlib + searchlib_test + gtest +) +vespa_add_test(NAME searchlib_wrappers_test_app COMMAND searchlib_wrappers_test_app) diff --git a/searchlib/src/tests/queryeval/wrappers/wrappers_test.cpp b/searchlib/src/tests/queryeval/wrappers/wrappers_test.cpp new file mode 100644 index 00000000000..62bff93ab0e --- /dev/null +++ b/searchlib/src/tests/queryeval/wrappers/wrappers_test.cpp @@ -0,0 +1,197 @@ +// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. + +#include <vespa/searchlib/queryeval/filter_wrapper.h> +#include <vespa/searchlib/queryeval/booleanmatchiteratorwrapper.h> +#include <vespa/searchlib/fef/termfieldmatchdata.h> +#include <vespa/vespalib/gtest/gtest.h> + +#define ENABLE_GTEST_MIGRATION +#include <vespa/searchlib/test/searchiteratorverifier.h> + +using namespace search::fef; +using namespace search::queryeval; + +struct ObservedData { + uint32_t seekCnt; + uint32_t unpackCnt; + uint32_t dtorCnt; + uint32_t unpackedDocId; +}; + +class WrapperTest : public ::testing::Test { +public: + class DummyItr : public SearchIterator { + private: + ObservedData &_data; + TermFieldMatchData *_match; + public: + DummyItr(ObservedData &data, TermFieldMatchData *m) : _data(data), _match(m) {} + ~DummyItr() { + ++_data.dtorCnt; + } + void doSeek(uint32_t docid) override { + ++_data.seekCnt; + if (docid <= 10) { + setDocId(10); + } else if (docid <= 20) { + setDocId(20); + } else { + setAtEnd(); + } + } + void doUnpack(uint32_t docid) override { + ++_data.unpackCnt; + if (_match != 0) { + _data.unpackedDocId = docid; + } + } + }; + WrapperTest() : _data{0,0,0,0} {} +protected: + ObservedData _data; + + void verify_unwrapped() { + EXPECT_EQ(_data.seekCnt, 0u); + EXPECT_EQ(_data.unpackCnt, 0u); + EXPECT_EQ(_data.dtorCnt, 0u); + + // without wrapper + TermFieldMatchData match; + _data.unpackedDocId = 0; + auto search = std::make_unique<DummyItr>(_data, &match); + search->initFullRange(); + EXPECT_EQ(_data.unpackedDocId, 0u); + EXPECT_TRUE(!search->seek(1u)); + EXPECT_EQ(search->getDocId(), 10u); + EXPECT_TRUE(search->seek(10)); + search->unpack(10); + EXPECT_EQ(_data.unpackedDocId, 10u); + EXPECT_TRUE(!search->seek(15)); + EXPECT_EQ(search->getDocId(), 20u); + EXPECT_TRUE(search->seek(20)); + search->unpack(20); + EXPECT_EQ(_data.unpackedDocId, 20u); + EXPECT_TRUE(!search->seek(25)); + EXPECT_TRUE(search->isAtEnd()); + + search.reset(nullptr); + EXPECT_EQ(_data.seekCnt, 3u); + EXPECT_EQ(_data.unpackCnt, 2u); + EXPECT_EQ(_data.dtorCnt, 1u); + } +}; + +TEST_F(WrapperTest, filter_wrapper) +{ + verify_unwrapped(); + + // with FilterWrapper + TermFieldMatchData match; + TermFieldMatchDataArray tfmda; + tfmda.add(&match); + _data.unpackedDocId = 0; + auto search = std::make_unique<FilterWrapper>(1); +search->wrap(std::make_unique<DummyItr>(_data, search->tfmda()[0])); + search->initFullRange(); + EXPECT_EQ(_data.unpackedDocId, 0u); + EXPECT_TRUE(!search->seek(1u)); + EXPECT_EQ(search->getDocId(), 10u); + EXPECT_TRUE(search->seek(10)); + search->unpack(10); + EXPECT_EQ(_data.unpackedDocId, 0u); + EXPECT_TRUE(!search->seek(15)); + EXPECT_EQ(search->getDocId(), 20u); + EXPECT_TRUE(search->seek(20)); + search->unpack(20); + EXPECT_EQ(_data.unpackedDocId, 0u); + EXPECT_TRUE(!search->seek(25)); + EXPECT_TRUE(search->isAtEnd()); + + search.reset(nullptr); + EXPECT_EQ(_data.seekCnt, 6u); + EXPECT_EQ(_data.unpackCnt, 2u); + EXPECT_EQ(_data.dtorCnt, 2u); +} + +TEST_F(WrapperTest, boolean_match_iterator_wrapper) +{ + verify_unwrapped(); + { // with wrapper + TermFieldMatchData match; + TermFieldMatchDataArray tfmda; + tfmda.add(&match); + _data.unpackedDocId = 0; + auto to_wrap = std::make_unique<DummyItr>(_data, &match); + auto search = std::make_unique<BooleanMatchIteratorWrapper>(std::move(to_wrap), tfmda); + search->initFullRange(); + EXPECT_EQ(_data.unpackedDocId, 0u); + EXPECT_TRUE(!search->seek(1u)); + EXPECT_EQ(search->getDocId(), 10u); + EXPECT_TRUE(search->seek(10)); + search->unpack(10); + EXPECT_EQ(_data.unpackedDocId, 0u); + EXPECT_TRUE(!search->seek(15)); + EXPECT_EQ(search->getDocId(), 20u); + EXPECT_TRUE(search->seek(20)); + search->unpack(20); + EXPECT_EQ(_data.unpackedDocId, 0u); + EXPECT_TRUE(!search->seek(25)); + EXPECT_TRUE(search->isAtEnd()); + } + EXPECT_EQ(_data.seekCnt, 6u); + EXPECT_EQ(_data.unpackCnt, 2u); + EXPECT_EQ(_data.dtorCnt, 2u); + { // with wrapper, without match data + + auto to_wrap = std::make_unique<DummyItr>(_data, nullptr); + auto search = std::make_unique<BooleanMatchIteratorWrapper>(std::move(to_wrap), TermFieldMatchDataArray()); + search->initFullRange(); + EXPECT_TRUE(!search->seek(1u)); + EXPECT_EQ(search->getDocId(), 10u); + EXPECT_TRUE(search->seek(10)); + search->unpack(10); + EXPECT_TRUE(!search->seek(15)); + EXPECT_EQ(search->getDocId(), 20u); + EXPECT_TRUE(search->seek(20)); + search->unpack(20); + EXPECT_TRUE(!search->seek(25)); + EXPECT_TRUE(search->isAtEnd()); + } + EXPECT_EQ(_data.seekCnt, 9u); + EXPECT_EQ(_data.unpackCnt, 2u); + EXPECT_EQ(_data.dtorCnt, 3u); +} + +class FilterWrapperVerifier : public search::test::SearchIteratorVerifier { +public: + ~FilterWrapperVerifier() {} + SearchIterator::UP create(bool strict) const override { + auto search = std::make_unique<FilterWrapper>(1); + search->wrap(createIterator(getExpectedDocIds(), strict)); + return search; + } +}; + +TEST(FilterWrapperTest, adheres_to_search_iterator_requirements) +{ + FilterWrapperVerifier verifier; + verifier.verify(); +} + +class BooleanMatchIteratorWrapperVerifier : public search::test::SearchIteratorVerifier { +public: + SearchIterator::UP create(bool strict) const override { + return std::make_unique<BooleanMatchIteratorWrapper>(createIterator(getExpectedDocIds(), strict), _tfmda); + } + ~BooleanMatchIteratorWrapperVerifier() {} +private: + mutable TermFieldMatchDataArray _tfmda; +}; + +TEST(BooleanMatchIteratorWrapperWrapperTest, adheres_to_search_iterator_requirements) +{ + BooleanMatchIteratorWrapperVerifier verifier; + verifier.verify(); +} + +GTEST_MAIN_RUN_ALL_TESTS() |