diff options
author | Tor Egge <Tor.Egge@broadpark.no> | 2020-05-14 15:10:53 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-05-14 15:10:53 +0200 |
commit | d3444d75e44338a4a8e3c85cd21dde66a5b2f96c (patch) | |
tree | 7328e7eeecde05baaed9004217c83845b78d0e92 /searchlib | |
parent | e7f328b4fbfba6c85440e584e69b8bdef0907d7c (diff) | |
parent | 4243f26ea4855e2be22749944031363d1cb0b53d (diff) |
Merge pull request #13252 from vespa-engine/toregge/use-gtest-for-equiv-test
Rewrite equiv_test to use gtest.
Diffstat (limited to 'searchlib')
-rw-r--r-- | searchlib/src/tests/queryeval/equiv/CMakeLists.txt | 2 | ||||
-rw-r--r-- | searchlib/src/tests/queryeval/equiv/equiv_test.cpp | 174 |
2 files changed, 91 insertions, 85 deletions
diff --git a/searchlib/src/tests/queryeval/equiv/CMakeLists.txt b/searchlib/src/tests/queryeval/equiv/CMakeLists.txt index 368f12e34a5..246b2ce0426 100644 --- a/searchlib/src/tests/queryeval/equiv/CMakeLists.txt +++ b/searchlib/src/tests/queryeval/equiv/CMakeLists.txt @@ -1,8 +1,10 @@ # Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +find_package(GTest REQUIRED) vespa_add_executable(searchlib_equiv_test_app TEST SOURCES equiv_test.cpp DEPENDS searchlib + GTest::GTest ) vespa_add_test(NAME searchlib_equiv_test_app COMMAND searchlib_equiv_test_app) diff --git a/searchlib/src/tests/queryeval/equiv/equiv_test.cpp b/searchlib/src/tests/queryeval/equiv/equiv_test.cpp index ecd1c8cd218..219735105de 100644 --- a/searchlib/src/tests/queryeval/equiv/equiv_test.cpp +++ b/searchlib/src/tests/queryeval/equiv/equiv_test.cpp @@ -1,11 +1,11 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. #include <vespa/log/log.h> LOG_SETUP("equiv_test"); -#include <vespa/vespalib/testkit/testapp.h> #include <vespa/searchlib/queryeval/leaf_blueprints.h> #include <vespa/searchlib/queryeval/intermediate_blueprints.h> #include <vespa/searchlib/queryeval/equiv_blueprint.h> #include <vespa/searchlib/fef/matchdatalayout.h> +#include <vespa/vespalib/gtest/gtest.h> using namespace search::queryeval; using search::fef::MatchData; @@ -14,14 +14,20 @@ using search::fef::TermFieldHandle; using search::fef::TermFieldMatchData; using search::fef::FieldPositionsIterator; -class Test : public vespalib::TestApp { -public: - void testEquiv(); - int Main() override; +class EquivTest : public ::testing::Test { +protected: + EquivTest(); + ~EquivTest(); + + void test_equiv(bool strict); }; +EquivTest::EquivTest() = default; + +EquivTest::~EquivTest() = default; + void -Test::testEquiv() +EquivTest::test_equiv(bool strict) { FakeResult a; FakeResult b; @@ -39,91 +45,89 @@ Test::testEquiv() FieldSpecBaseList fields; fields.add(FieldSpecBase(1, 1)); fields.add(FieldSpecBase(2, 2)); - EquivBlueprint *eq_b = new EquivBlueprint(fields, subLayout); - - eq_b->addTerm(Blueprint::UP(new FakeBlueprint(FieldSpec("foo", 1, fbh11), a)), 1.0); - eq_b->addTerm(Blueprint::UP(new FakeBlueprint(FieldSpec("bar", 2, fbh21), b)), 1.0); - eq_b->addTerm(Blueprint::UP(new FakeBlueprint(FieldSpec("bar", 2, fbh22), c)), 1.0); - - Blueprint::UP bp(eq_b); - for (int i = 0; i <= 1; ++i) { - bool strict = (i == 0); - TEST_STATE(strict ? "strict" : "non-strict"); - MatchData::UP md = MatchData::makeTestInstance(100, 10); - bp->fetchPostings(ExecuteInfo::create(strict)); - SearchIterator::UP search = bp->createSearch(*md, strict); - search->initFullRange(); - - EXPECT_TRUE(!search->seek(3)); - if (!strict) { - EXPECT_EQUAL(SearchIterator::beginId(), search->getDocId()); - EXPECT_TRUE(search->seek(5u)); - } - EXPECT_EQUAL(5u, search->getDocId()); - { // test doc 5 results - search->unpack(5u); - { - TermFieldMatchData &data = *md->resolveTermField(1); - EXPECT_EQUAL(1u, data.getFieldId()); - EXPECT_EQUAL(5u, data.getDocId()); - FieldPositionsIterator itr = data.getIterator(); - EXPECT_EQUAL(1u, itr.size()); - ASSERT_TRUE(itr.valid()); - EXPECT_EQUAL(1u, itr.getPosition()); - itr.next(); - EXPECT_TRUE(!itr.valid()); - } - { - TermFieldMatchData &data = *md->resolveTermField(2); - EXPECT_EQUAL(2u, data.getFieldId()); - EXPECT_EQUAL(5u, data.getDocId()); - FieldPositionsIterator itr = data.getIterator(); - EXPECT_EQUAL(2u, itr.size()); - ASSERT_TRUE(itr.valid()); - EXPECT_EQUAL(2u, itr.getPosition()); - itr.next(); - ASSERT_TRUE(itr.valid()); - EXPECT_EQUAL(3u, itr.getPosition()); - itr.next(); - EXPECT_TRUE(!itr.valid()); - } - } - EXPECT_TRUE(!search->seek(7)); - if (!strict) { - EXPECT_EQUAL(5u, search->getDocId()); - EXPECT_TRUE(search->seek(10u)); + auto bp = std::make_unique<EquivBlueprint>(fields, subLayout); + + bp->addTerm(std::make_unique<FakeBlueprint>(FieldSpec("foo", 1, fbh11), a), 1.0); + bp->addTerm(std::make_unique<FakeBlueprint>(FieldSpec("bar", 2, fbh21), b), 1.0); + bp->addTerm(std::make_unique<FakeBlueprint>(FieldSpec("bar", 2, fbh22), c), 1.0); + + MatchData::UP md = MatchData::makeTestInstance(100, 10); + bp->fetchPostings(ExecuteInfo::create(strict)); + SearchIterator::UP search = bp->createSearch(*md, strict); + search->initFullRange(); + + EXPECT_TRUE(!search->seek(3)); + if (!strict) { + EXPECT_EQ(SearchIterator::beginId(), search->getDocId()); + EXPECT_TRUE(search->seek(5u)); + } + EXPECT_EQ(5u, search->getDocId()); + { // test doc 5 results + search->unpack(5u); + { + TermFieldMatchData &data = *md->resolveTermField(1); + EXPECT_EQ(1u, data.getFieldId()); + EXPECT_EQ(5u, data.getDocId()); + FieldPositionsIterator itr = data.getIterator(); + EXPECT_EQ(1u, itr.size()); + ASSERT_TRUE(itr.valid()); + EXPECT_EQ(1u, itr.getPosition()); + itr.next(); + EXPECT_TRUE(!itr.valid()); } - EXPECT_EQUAL(10u, search->getDocId()); - { // test doc 10 results - search->unpack(10u); - EXPECT_EQUAL(5u, md->resolveTermField(1)->getDocId()); // no match - { - TermFieldMatchData &data = *md->resolveTermField(2); - EXPECT_EQUAL(2u, data.getFieldId()); - EXPECT_EQUAL(10u, data.getDocId()); - FieldPositionsIterator itr = data.getIterator(); - EXPECT_EQUAL(1u, itr.size()); - ASSERT_TRUE(itr.valid()); - EXPECT_EQUAL(4u, itr.getPosition()); - itr.next(); - EXPECT_TRUE(!itr.valid()); - } + { + TermFieldMatchData &data = *md->resolveTermField(2); + EXPECT_EQ(2u, data.getFieldId()); + EXPECT_EQ(5u, data.getDocId()); + FieldPositionsIterator itr = data.getIterator(); + EXPECT_EQ(2u, itr.size()); + ASSERT_TRUE(itr.valid()); + EXPECT_EQ(2u, itr.getPosition()); + itr.next(); + ASSERT_TRUE(itr.valid()); + EXPECT_EQ(3u, itr.getPosition()); + itr.next(); + EXPECT_TRUE(!itr.valid()); } - EXPECT_TRUE(!search->seek(13)); - if (strict) { - EXPECT_TRUE(search->isAtEnd()); - } else { - EXPECT_EQUAL(10u, search->getDocId()); + } + EXPECT_TRUE(!search->seek(7)); + if (!strict) { + EXPECT_EQ(5u, search->getDocId()); + EXPECT_TRUE(search->seek(10u)); + } + EXPECT_EQ(10u, search->getDocId()); + { // test doc 10 results + search->unpack(10u); + EXPECT_EQ(5u, md->resolveTermField(1)->getDocId()); // no match + { + TermFieldMatchData &data = *md->resolveTermField(2); + EXPECT_EQ(2u, data.getFieldId()); + EXPECT_EQ(10u, data.getDocId()); + FieldPositionsIterator itr = data.getIterator(); + EXPECT_EQ(1u, itr.size()); + ASSERT_TRUE(itr.valid()); + EXPECT_EQ(4u, itr.getPosition()); + itr.next(); + EXPECT_TRUE(!itr.valid()); } } + EXPECT_TRUE(!search->seek(13)); + if (strict) { + EXPECT_TRUE(search->isAtEnd()); + } else { + EXPECT_EQ(10u, search->getDocId()); + } +} + + +TEST_F(EquivTest, nonstrict) +{ + test_equiv(false); } -int -Test::Main() +TEST_F(EquivTest, strict) { - TEST_INIT("equiv_test"); - testEquiv(); - TEST_DONE(); + test_equiv(true); } -TEST_APPHOOK(Test); +GTEST_MAIN_RUN_ALL_TESTS() |