diff options
Diffstat (limited to 'streamingvisitors')
24 files changed, 214 insertions, 280 deletions
diff --git a/streamingvisitors/CMakeLists.txt b/streamingvisitors/CMakeLists.txt index a990f6a4de0..7ecb91d387d 100644 --- a/streamingvisitors/CMakeLists.txt +++ b/streamingvisitors/CMakeLists.txt @@ -2,13 +2,13 @@ vespa_define_module( DEPENDS vespalog - storage - config_cloudconfig + vespa_storage + vespa_config vespalib - document - vdslib - searchlib - searchsummary + vespa_document + vespa_vdslib + vespa_searchlib + vespa_searchsummary LIBS src/vespa/searchvisitor diff --git a/streamingvisitors/src/tests/charbuffer/CMakeLists.txt b/streamingvisitors/src/tests/charbuffer/CMakeLists.txt index d4b3da21e20..93d59c81036 100644 --- a/streamingvisitors/src/tests/charbuffer/CMakeLists.txt +++ b/streamingvisitors/src/tests/charbuffer/CMakeLists.txt @@ -3,6 +3,7 @@ vespa_add_executable(vsm_charbuffer_test_app TEST SOURCES charbuffer_test.cpp DEPENDS - streamingvisitors + vespa_streamingvisitors + GTest::gtest ) vespa_add_test(NAME vsm_charbuffer_test_app COMMAND vsm_charbuffer_test_app) diff --git a/streamingvisitors/src/tests/charbuffer/charbuffer_test.cpp b/streamingvisitors/src/tests/charbuffer/charbuffer_test.cpp index b4e954d1ce0..a42851fc00a 100644 --- a/streamingvisitors/src/tests/charbuffer/charbuffer_test.cpp +++ b/streamingvisitors/src/tests/charbuffer/charbuffer_test.cpp @@ -1,80 +1,65 @@ // Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -#include <vespa/vespalib/testkit/testapp.h> +#include <vespa/vespalib/gtest/gtest.h> #include <vespa/vsm/common/charbuffer.h> namespace vsm { -class CharBufferTest : public vespalib::TestApp +TEST(CharBufferTest, empty) { -private: - void test(); -public: - int Main() override; -}; + CharBuffer buf; + EXPECT_EQ(buf.getLength(), 0u); + EXPECT_EQ(buf.getPos(), 0u); + EXPECT_EQ(buf.getRemaining(), 0u); +} -void -CharBufferTest::test() +TEST(CharBufferTest, explicit_length) { - { // empty - CharBuffer buf; - EXPECT_EQUAL(buf.getLength(), 0u); - EXPECT_EQUAL(buf.getPos(), 0u); - EXPECT_EQUAL(buf.getRemaining(), 0u); - } - { // explicit length - CharBuffer buf(8); - EXPECT_EQUAL(buf.getLength(), 8u); - EXPECT_EQUAL(buf.getPos(), 0u); - EXPECT_EQUAL(buf.getRemaining(), 8u); - } - { // resize - CharBuffer buf(8); - EXPECT_EQUAL(buf.getLength(), 8u); - buf.resize(16); - EXPECT_EQUAL(buf.getLength(), 16u); - buf.resize(8); - EXPECT_EQUAL(buf.getLength(), 16u); - } - { // put with triggered resize - CharBuffer buf(8); - buf.put("123456", 6); - EXPECT_EQUAL(buf.getLength(), 8u); - EXPECT_EQUAL(buf.getPos(), 6u); - EXPECT_EQUAL(buf.getRemaining(), 2u); - EXPECT_EQUAL(std::string(buf.getBuffer(), buf.getPos()), "123456"); - buf.put("789", 3); - EXPECT_EQUAL(buf.getLength(), 12u); - EXPECT_EQUAL(buf.getPos(), 9u); - EXPECT_EQUAL(buf.getRemaining(), 3u); - EXPECT_EQUAL(std::string(buf.getBuffer(), buf.getPos()), "123456789"); - buf.put('a'); - EXPECT_EQUAL(buf.getLength(), 12u); - EXPECT_EQUAL(buf.getPos(), 10u); - EXPECT_EQUAL(buf.getRemaining(), 2u); - EXPECT_EQUAL(std::string(buf.getBuffer(), buf.getPos()), "123456789a"); - buf.reset(); - EXPECT_EQUAL(buf.getLength(), 12u); - EXPECT_EQUAL(buf.getPos(), 0u); - EXPECT_EQUAL(buf.getRemaining(), 12u); - buf.put("bcd", 3); - EXPECT_EQUAL(buf.getLength(), 12u); - EXPECT_EQUAL(buf.getPos(), 3u); - EXPECT_EQUAL(buf.getRemaining(), 9u); - EXPECT_EQUAL(std::string(buf.getBuffer(), buf.getPos()), "bcd"); - } + CharBuffer buf(8); + EXPECT_EQ(buf.getLength(), 8u); + EXPECT_EQ(buf.getPos(), 0u); + EXPECT_EQ(buf.getRemaining(), 8u); } -int -CharBufferTest::Main() +TEST(CharBufferTest, resize) { - TEST_INIT("charbuffer_test"); - - test(); + CharBuffer buf(8); + EXPECT_EQ(buf.getLength(), 8u); + buf.resize(16); + EXPECT_EQ(buf.getLength(), 16u); + buf.resize(8); + EXPECT_EQ(buf.getLength(), 16u); +} - TEST_DONE(); +TEST(CharBufferTest, put_with_triggered_resize) +{ + CharBuffer buf(8); + buf.put("123456", 6); + EXPECT_EQ(buf.getLength(), 8u); + EXPECT_EQ(buf.getPos(), 6u); + EXPECT_EQ(buf.getRemaining(), 2u); + EXPECT_EQ(std::string(buf.getBuffer(), buf.getPos()), "123456"); + buf.put("789", 3); + EXPECT_EQ(buf.getLength(), 12u); + EXPECT_EQ(buf.getPos(), 9u); + EXPECT_EQ(buf.getRemaining(), 3u); + EXPECT_EQ(std::string(buf.getBuffer(), buf.getPos()), "123456789"); + buf.put('a'); + EXPECT_EQ(buf.getLength(), 12u); + EXPECT_EQ(buf.getPos(), 10u); + EXPECT_EQ(buf.getRemaining(), 2u); + EXPECT_EQ(std::string(buf.getBuffer(), buf.getPos()), "123456789a"); + buf.reset(); + EXPECT_EQ(buf.getLength(), 12u); + EXPECT_EQ(buf.getPos(), 0u); + EXPECT_EQ(buf.getRemaining(), 12u); + buf.put("bcd", 3); + EXPECT_EQ(buf.getLength(), 12u); + EXPECT_EQ(buf.getPos(), 3u); + EXPECT_EQ(buf.getRemaining(), 9u); + EXPECT_EQ(std::string(buf.getBuffer(), buf.getPos()), "bcd"); } } -TEST_APPHOOK(vsm::CharBufferTest); +GTEST_MAIN_RUN_ALL_TESTS() diff --git a/streamingvisitors/src/tests/docsum/CMakeLists.txt b/streamingvisitors/src/tests/docsum/CMakeLists.txt index 15c1e26b08b..ac80824e21b 100644 --- a/streamingvisitors/src/tests/docsum/CMakeLists.txt +++ b/streamingvisitors/src/tests/docsum/CMakeLists.txt @@ -3,6 +3,7 @@ vespa_add_executable(vsm_docsum_test_app TEST SOURCES docsum_test.cpp DEPENDS - streamingvisitors + vespa_streamingvisitors + GTest::gtest ) vespa_add_test(NAME vsm_docsum_test_app COMMAND vsm_docsum_test_app) diff --git a/streamingvisitors/src/tests/docsum/docsum_test.cpp b/streamingvisitors/src/tests/docsum/docsum_test.cpp index d6535046e87..112a4e7f679 100644 --- a/streamingvisitors/src/tests/docsum/docsum_test.cpp +++ b/streamingvisitors/src/tests/docsum/docsum_test.cpp @@ -1,5 +1,5 @@ // Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -#include <vespa/vespalib/testkit/testapp.h> + #include <vespa/document/fieldvalue/fieldvalues.h> #include <vespa/document/datatype/structdatatype.h> #include <vespa/document/datatype/weightedsetdatatype.h> @@ -9,6 +9,7 @@ #include <vespa/vsm/vsm/flattendocsumwriter.h> #include <vespa/vespalib/data/smart_buffer.h> #include <vespa/vespalib/data/slime/slime.h> +#include <vespa/vespalib/gtest/gtest.h> using namespace document; @@ -48,24 +49,29 @@ public: }; -class DocsumTest : public vespalib::TestApp +class DocsumTest : public ::testing::Test { -private: +protected: ArrayFieldValue createFieldValue(const StringList & fv); WeightedSetFieldValue createFieldValue(const WeightedStringList & fv); - void assertFlattenDocsumWriter(const FieldValue & fv, const std::string & exp) { + void assertFlattenDocsumWriter(const FieldValue & fv, const std::string & exp, const std::string& label) { FlattenDocsumWriter fdw; - assertFlattenDocsumWriter(fdw, fv, exp); + assertFlattenDocsumWriter(fdw, fv, exp, label); } - void assertFlattenDocsumWriter(FlattenDocsumWriter & fdw, const FieldValue & fv, const std::string & exp); - void testFlattenDocsumWriter(); - void testDocSumCache(); + void assertFlattenDocsumWriter(FlattenDocsumWriter & fdw, const FieldValue & fv, const std::string & exp, const std::string& label); -public: - int Main() override; + DocsumTest(); + ~DocsumTest() override; }; +DocsumTest::DocsumTest() + : ::testing::Test() +{ +} + +DocsumTest::~DocsumTest() = default; + ArrayFieldValue DocsumTest::createFieldValue(const StringList & fv) { @@ -90,62 +96,54 @@ DocsumTest::createFieldValue(const WeightedStringList & fv) } void -DocsumTest::assertFlattenDocsumWriter(FlattenDocsumWriter & fdw, const FieldValue & fv, const std::string & exp) +DocsumTest::assertFlattenDocsumWriter(FlattenDocsumWriter & fdw, const FieldValue & fv, const std::string & exp, const std::string& label) { + SCOPED_TRACE(label); FieldPath empty; fv.iterateNested(empty.getFullRange(), fdw); std::string actual(fdw.getResult().getBuffer(), fdw.getResult().getPos()); - EXPECT_EQUAL(actual, exp); + EXPECT_EQ(exp, actual); } -void -DocsumTest::testFlattenDocsumWriter() +TEST_F(DocsumTest, flatten_docsum_writer_basic) { - { // basic tests - TEST_DO(assertFlattenDocsumWriter(StringFieldValue("foo bar"), "foo bar")); - TEST_DO(assertFlattenDocsumWriter(RawFieldValue("foo bar"), "foo bar")); - TEST_DO(assertFlattenDocsumWriter(BoolFieldValue(true), "true")); - TEST_DO(assertFlattenDocsumWriter(BoolFieldValue(false), "false")); - TEST_DO(assertFlattenDocsumWriter(LongFieldValue(123456789), "123456789")); - TEST_DO(assertFlattenDocsumWriter(createFieldValue(StringList().add("foo bar").add("baz").add(" qux ")), - "foo bar baz qux ")); - } - { // test mulitple invocations - FlattenDocsumWriter fdw("#"); - TEST_DO(assertFlattenDocsumWriter(fdw, StringFieldValue("foo"), "foo")); - TEST_DO(assertFlattenDocsumWriter(fdw, StringFieldValue("bar"), "foo#bar")); - fdw.clear(); - TEST_DO(assertFlattenDocsumWriter(fdw, StringFieldValue("baz"), "baz")); - TEST_DO(assertFlattenDocsumWriter(fdw, StringFieldValue("qux"), "baz qux")); - } - { // test resizing - FlattenDocsumWriter fdw("#"); - EXPECT_EQUAL(fdw.getResult().getPos(), 0u); - EXPECT_EQUAL(fdw.getResult().getLength(), 32u); - TEST_DO(assertFlattenDocsumWriter(fdw, StringFieldValue("aaaabbbbccccddddeeeeffffgggghhhh"), - "aaaabbbbccccddddeeeeffffgggghhhh")); - EXPECT_EQUAL(fdw.getResult().getPos(), 32u); - EXPECT_EQUAL(fdw.getResult().getLength(), 32u); - TEST_DO(assertFlattenDocsumWriter(fdw, StringFieldValue("aaaa"), "aaaabbbbccccddddeeeeffffgggghhhh#aaaa")); - EXPECT_EQUAL(fdw.getResult().getPos(), 37u); - EXPECT_TRUE(fdw.getResult().getLength() >= 37u); - fdw.clear(); - EXPECT_EQUAL(fdw.getResult().getPos(), 0u); - EXPECT_TRUE(fdw.getResult().getLength() >= 37u); - } + assertFlattenDocsumWriter(StringFieldValue("foo bar"), "foo bar", "string foo bar"); + assertFlattenDocsumWriter(RawFieldValue("foo bar"), "foo bar", "raw foo bar"); + assertFlattenDocsumWriter(BoolFieldValue(true), "true", "bool true"); + assertFlattenDocsumWriter(BoolFieldValue(false), "false", "bool false"); + assertFlattenDocsumWriter(LongFieldValue(123456789), "123456789", "long"); + assertFlattenDocsumWriter(createFieldValue(StringList().add("foo bar").add("baz").add(" qux ")), + "foo bar baz qux ", "wset"); } -int -DocsumTest::Main() +TEST_F(DocsumTest, flatten_docsum_writer_multiple_invocations) { - TEST_INIT("docsum_test"); - - TEST_DO(testFlattenDocsumWriter()); - - TEST_DONE(); + FlattenDocsumWriter fdw("#"); + assertFlattenDocsumWriter(fdw, StringFieldValue("foo"), "foo", "string foo"); + assertFlattenDocsumWriter(fdw, StringFieldValue("bar"), "foo#bar", "string bar"); + fdw.clear(); + assertFlattenDocsumWriter(fdw, StringFieldValue("baz"), "baz", "string baz"); + assertFlattenDocsumWriter(fdw, StringFieldValue("qux"), "baz qux", "string qux"); } +TEST_F(DocsumTest, flatten_docsum_writer_resizing) +{ + FlattenDocsumWriter fdw("#"); + EXPECT_EQ(fdw.getResult().getPos(), 0u); + EXPECT_EQ(fdw.getResult().getLength(), 32u); + assertFlattenDocsumWriter(fdw, StringFieldValue("aaaabbbbccccddddeeeeffffgggghhhh"), + "aaaabbbbccccddddeeeeffffgggghhhh", + "string long"); + EXPECT_EQ(fdw.getResult().getPos(), 32u); + EXPECT_EQ(fdw.getResult().getLength(), 32u); + assertFlattenDocsumWriter(fdw, StringFieldValue("aaaa"), "aaaabbbbccccddddeeeeffffgggghhhh#aaaa", "string second long"); + EXPECT_EQ(fdw.getResult().getPos(), 37u); + EXPECT_TRUE(fdw.getResult().getLength() >= 37u); + fdw.clear(); + EXPECT_EQ(fdw.getResult().getPos(), 0u); + EXPECT_TRUE(fdw.getResult().getLength() >= 37u); } -TEST_APPHOOK(vsm::DocsumTest); +} +GTEST_MAIN_RUN_ALL_TESTS() diff --git a/streamingvisitors/src/tests/document/CMakeLists.txt b/streamingvisitors/src/tests/document/CMakeLists.txt index 717626a9492..b29171b5198 100644 --- a/streamingvisitors/src/tests/document/CMakeLists.txt +++ b/streamingvisitors/src/tests/document/CMakeLists.txt @@ -3,6 +3,7 @@ vespa_add_executable(vsm_document_test_app TEST SOURCES document_test.cpp DEPENDS - streamingvisitors + vespa_streamingvisitors + GTest::gtest ) vespa_add_test(NAME vsm_document_test_app COMMAND vsm_document_test_app) diff --git a/streamingvisitors/src/tests/document/document_test.cpp b/streamingvisitors/src/tests/document/document_test.cpp index 9d35df80c73..8a2f8614b58 100644 --- a/streamingvisitors/src/tests/document/document_test.cpp +++ b/streamingvisitors/src/tests/document/document_test.cpp @@ -1,26 +1,16 @@ // Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -#include <vespa/vespalib/testkit/testapp.h> #include <vespa/document/fieldvalue/fieldvalues.h> #include <vespa/document/datatype/documenttype.h> #include <vespa/vsm/common/storagedocument.h> +#include <vespa/vespalib/gtest/gtest.h> #include <vespa/vespalib/stllike/asciistream.h> using namespace document; namespace vsm { -class DocumentTest : public vespalib::TestApp -{ -private: - void testStorageDocument(); - void testStringFieldIdTMap(); -public: - int Main() override; -}; - -void -DocumentTest::testStorageDocument() +TEST(DocumentTest, storage_document) { DocumentType dt("testdoc", 0); @@ -46,84 +36,72 @@ DocumentTest::testStorageDocument() StorageDocument sdoc(std::move(doc), fpmap, 3); ASSERT_TRUE(sdoc.valid()); - EXPECT_EQUAL(std::string("foo"), sdoc.getField(0)->getAsString()); - EXPECT_EQUAL(std::string("bar"), sdoc.getField(1)->getAsString()); + EXPECT_EQ("foo", sdoc.getField(0)->getAsString()); + EXPECT_EQ("bar", sdoc.getField(1)->getAsString()); EXPECT_TRUE(sdoc.getField(2) == nullptr); // test caching - EXPECT_EQUAL(std::string("foo"), sdoc.getField(0)->getAsString()); - EXPECT_EQUAL(std::string("bar"), sdoc.getField(1)->getAsString()); + EXPECT_EQ("foo", sdoc.getField(0)->getAsString()); + EXPECT_EQ("bar", sdoc.getField(1)->getAsString()); EXPECT_TRUE(sdoc.getField(2) == nullptr); // set new values EXPECT_TRUE(sdoc.setField(0, FieldValue::UP(new StringFieldValue("baz")))); - EXPECT_EQUAL(std::string("baz"), sdoc.getField(0)->getAsString()); - EXPECT_EQUAL(std::string("bar"), sdoc.getField(1)->getAsString()); + EXPECT_EQ("baz", sdoc.getField(0)->getAsString()); + EXPECT_EQ("bar", sdoc.getField(1)->getAsString()); EXPECT_TRUE(sdoc.getField(2) == nullptr); EXPECT_TRUE(sdoc.setField(1, FieldValue::UP(new StringFieldValue("qux")))); - EXPECT_EQUAL(std::string("baz"), sdoc.getField(0)->getAsString()); - EXPECT_EQUAL(std::string("qux"), sdoc.getField(1)->getAsString()); + EXPECT_EQ("baz", sdoc.getField(0)->getAsString()); + EXPECT_EQ("qux", sdoc.getField(1)->getAsString()); EXPECT_TRUE(sdoc.getField(2) == nullptr); EXPECT_TRUE(sdoc.setField(2, FieldValue::UP(new StringFieldValue("quux")))); - EXPECT_EQUAL(std::string("baz"), sdoc.getField(0)->getAsString()); - EXPECT_EQUAL(std::string("qux"), sdoc.getField(1)->getAsString()); - EXPECT_EQUAL(std::string("quux"), sdoc.getField(2)->getAsString()); + EXPECT_EQ("baz", sdoc.getField(0)->getAsString()); + EXPECT_EQ("qux", sdoc.getField(1)->getAsString()); + EXPECT_EQ("quux", sdoc.getField(2)->getAsString()); EXPECT_TRUE(!sdoc.setField(3, FieldValue::UP(new StringFieldValue("thud")))); SharedFieldPathMap fim; StorageDocument s2(std::make_unique<document::Document>(), fim, 0); - EXPECT_EQUAL(IdString().toString(), s2.docDoc().getId().toString()); + EXPECT_EQ(IdString().toString(), s2.docDoc().getId().toString()); } -void DocumentTest::testStringFieldIdTMap() +TEST(DocumentTest, string_field_id_t_map) { StringFieldIdTMap m; - EXPECT_EQUAL(0u, m.highestFieldNo()); + EXPECT_EQ(0u, m.highestFieldNo()); EXPECT_TRUE(StringFieldIdTMap::npos == m.fieldNo("unknown")); m.add("f1"); - EXPECT_EQUAL(0u, m.fieldNo("f1")); - EXPECT_EQUAL(1u, m.highestFieldNo()); + EXPECT_EQ(0u, m.fieldNo("f1")); + EXPECT_EQ(1u, m.highestFieldNo()); m.add("f1"); - EXPECT_EQUAL(0u, m.fieldNo("f1")); - EXPECT_EQUAL(1u, m.highestFieldNo()); + EXPECT_EQ(0u, m.fieldNo("f1")); + EXPECT_EQ(1u, m.highestFieldNo()); m.add("f2"); - EXPECT_EQUAL(1u, m.fieldNo("f2")); - EXPECT_EQUAL(2u, m.highestFieldNo()); + EXPECT_EQ(1u, m.fieldNo("f2")); + EXPECT_EQ(2u, m.highestFieldNo()); m.add("f3", 7); - EXPECT_EQUAL(7u, m.fieldNo("f3")); - EXPECT_EQUAL(8u, m.highestFieldNo()); + EXPECT_EQ(7u, m.fieldNo("f3")); + EXPECT_EQ(8u, m.highestFieldNo()); m.add("f3"); - EXPECT_EQUAL(7u, m.fieldNo("f3")); - EXPECT_EQUAL(8u, m.highestFieldNo()); + EXPECT_EQ(7u, m.fieldNo("f3")); + EXPECT_EQ(8u, m.highestFieldNo()); m.add("f2", 13); - EXPECT_EQUAL(13u, m.fieldNo("f2")); - EXPECT_EQUAL(14u, m.highestFieldNo()); + EXPECT_EQ(13u, m.fieldNo("f2")); + EXPECT_EQ(14u, m.highestFieldNo()); m.add("f4"); - EXPECT_EQUAL(3u, m.fieldNo("f4")); - EXPECT_EQUAL(14u, m.highestFieldNo()); + EXPECT_EQ(3u, m.fieldNo("f4")); + EXPECT_EQ(14u, m.highestFieldNo()); { vespalib::asciistream os; StringFieldIdTMap t; t.add("b"); t.add("a"); os << t; - EXPECT_EQUAL(vespalib::string("a = 1\nb = 0\n"), os.str()); + EXPECT_EQ(vespalib::string("a = 1\nb = 0\n"), os.str()); } } -int -DocumentTest::Main() -{ - TEST_INIT("document_test"); - - testStorageDocument(); - testStringFieldIdTMap(); - - TEST_DONE(); -} - } -TEST_APPHOOK(vsm::DocumentTest); - +GTEST_MAIN_RUN_ALL_TESTS() diff --git a/streamingvisitors/src/tests/hitcollector/CMakeLists.txt b/streamingvisitors/src/tests/hitcollector/CMakeLists.txt index 7af2bbb1355..8430c1fa679 100644 --- a/streamingvisitors/src/tests/hitcollector/CMakeLists.txt +++ b/streamingvisitors/src/tests/hitcollector/CMakeLists.txt @@ -3,7 +3,7 @@ vespa_add_executable(streamingvisitors_hitcollector_test_app TEST SOURCES hitcollector_test.cpp DEPENDS - streamingvisitors + vespa_streamingvisitors GTest::GTest ) vespa_add_test(NAME streamingvisitors_hitcollector_test_app COMMAND streamingvisitors_hitcollector_test_app) diff --git a/streamingvisitors/src/tests/matching_elements_filler/CMakeLists.txt b/streamingvisitors/src/tests/matching_elements_filler/CMakeLists.txt index 69ae0084ee1..80509ebbad8 100644 --- a/streamingvisitors/src/tests/matching_elements_filler/CMakeLists.txt +++ b/streamingvisitors/src/tests/matching_elements_filler/CMakeLists.txt @@ -4,7 +4,7 @@ vespa_add_executable(streamingvisitors_matching_elements_filler_test_app TEST matching_elements_filler_test.cpp DEPENDS searchlib_test - streamingvisitors + vespa_streamingvisitors GTest::GTest ) vespa_add_test(NAME streamingvisitors_matching_elements_filler_test_app COMMAND streamingvisitors_matching_elements_filler_test_app) diff --git a/streamingvisitors/src/tests/nearest_neighbor_field_searcher/CMakeLists.txt b/streamingvisitors/src/tests/nearest_neighbor_field_searcher/CMakeLists.txt index 3ded5a1dafb..f27d7801b17 100644 --- a/streamingvisitors/src/tests/nearest_neighbor_field_searcher/CMakeLists.txt +++ b/streamingvisitors/src/tests/nearest_neighbor_field_searcher/CMakeLists.txt @@ -3,9 +3,9 @@ vespa_add_executable(vsm_nearest_neighbor_field_searcher_test_app TEST SOURCES nearest_neighbor_field_searcher_test.cpp DEPENDS - searchlib + vespa_searchlib searchlib_test - streamingvisitors + vespa_streamingvisitors GTest::GTest ) diff --git a/streamingvisitors/src/tests/query_term_filter_factory/CMakeLists.txt b/streamingvisitors/src/tests/query_term_filter_factory/CMakeLists.txt index a4359e391f4..9e7d95c6a87 100644 --- a/streamingvisitors/src/tests/query_term_filter_factory/CMakeLists.txt +++ b/streamingvisitors/src/tests/query_term_filter_factory/CMakeLists.txt @@ -3,7 +3,7 @@ vespa_add_executable(streamingvisitors_query_term_filter_factory_test_app TEST SOURCES query_term_filter_factory_test.cpp DEPENDS - streamingvisitors + vespa_streamingvisitors GTest::GTest ) vespa_add_test(NAME streamingvisitors_query_term_filter_factory_test_app COMMAND streamingvisitors_query_term_filter_factory_test_app) diff --git a/streamingvisitors/src/tests/querywrapper/CMakeLists.txt b/streamingvisitors/src/tests/querywrapper/CMakeLists.txt index 9fa9f75f047..0de6c12cc75 100644 --- a/streamingvisitors/src/tests/querywrapper/CMakeLists.txt +++ b/streamingvisitors/src/tests/querywrapper/CMakeLists.txt @@ -3,6 +3,7 @@ vespa_add_executable(streamingvisitors_querywrapper_test_app TEST SOURCES querywrapper_test.cpp DEPENDS - streamingvisitors + vespa_streamingvisitors + GTest::gtest ) vespa_add_test(NAME streamingvisitors_querywrapper_test_app COMMAND streamingvisitors_querywrapper_test_app) diff --git a/streamingvisitors/src/tests/querywrapper/querywrapper_test.cpp b/streamingvisitors/src/tests/querywrapper/querywrapper_test.cpp index 2a4b9e1f869..6deb0d4cda4 100644 --- a/streamingvisitors/src/tests/querywrapper/querywrapper_test.cpp +++ b/streamingvisitors/src/tests/querywrapper/querywrapper_test.cpp @@ -1,10 +1,10 @@ // Copyright Vespa.ai. 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/query/tree/querybuilder.h> #include <vespa/searchlib/query/tree/simplequery.h> #include <vespa/searchlib/query/tree/stackdumpcreator.h> #include <vespa/searchvisitor/querywrapper.h> +#include <vespa/vespalib/gtest/gtest.h> #include <iostream> using namespace search; @@ -13,17 +13,7 @@ using namespace search::streaming; namespace streaming { -class QueryWrapperTest : public vespalib::TestApp -{ -private: - void testQueryWrapper(); - -public: - int Main() override; -}; - -void -QueryWrapperTest::testQueryWrapper() +TEST(QueryWrapperTest, test_query_wrapper) { QueryNodeResultFactory empty; { @@ -49,27 +39,17 @@ QueryWrapperTest::testQueryWrapper() q.getLeaves(terms); ASSERT_TRUE(tl.size() == 3 && terms.size() == 3); for (size_t i = 0; i < 3; ++i) { - EXPECT_EQUAL(tl[i], terms[i]); + EXPECT_EQ(tl[i], terms[i]); std::cout << "t[" << i << "]:" << terms[i] << std::endl; auto phrase = dynamic_cast<PhraseQueryNode*>(terms[i]); - EXPECT_EQUAL(i == 1, phrase != nullptr); + EXPECT_EQ(i == 1, phrase != nullptr); if (i == 1) { - EXPECT_EQUAL(3u, phrase->get_terms().size()); + EXPECT_EQ(3u, phrase->get_terms().size()); } } } } -int -QueryWrapperTest::Main() -{ - TEST_INIT("querywrapper_test"); - - testQueryWrapper(); - - TEST_DONE(); } -} // namespace streaming - -TEST_APPHOOK(::streaming::QueryWrapperTest) +GTEST_MAIN_RUN_ALL_TESTS() diff --git a/streamingvisitors/src/tests/rank_processor/CMakeLists.txt b/streamingvisitors/src/tests/rank_processor/CMakeLists.txt index 2c3e60b7d08..35186ff2cd6 100644 --- a/streamingvisitors/src/tests/rank_processor/CMakeLists.txt +++ b/streamingvisitors/src/tests/rank_processor/CMakeLists.txt @@ -3,7 +3,7 @@ vespa_add_executable(streamingvisitors_rank_processor_test_app TEST SOURCES rank_processor_test.cpp DEPENDS - streamingvisitors + vespa_streamingvisitors GTest::GTest ) vespa_add_test(NAME streamingvisitors_rank_processor_test_app COMMAND streamingvisitors_rank_processor_test_app) diff --git a/streamingvisitors/src/tests/searcher/CMakeLists.txt b/streamingvisitors/src/tests/searcher/CMakeLists.txt index 2daf963a338..ad58db76572 100644 --- a/streamingvisitors/src/tests/searcher/CMakeLists.txt +++ b/streamingvisitors/src/tests/searcher/CMakeLists.txt @@ -3,8 +3,8 @@ vespa_add_executable(vsm_searcher_test_app TEST SOURCES searcher_test.cpp DEPENDS - searchlib + vespa_searchlib searchlib_test - streamingvisitors + vespa_streamingvisitors ) vespa_add_test(NAME vsm_searcher_test_app COMMAND vsm_searcher_test_app) diff --git a/streamingvisitors/src/tests/searcher/searcher_test.cpp b/streamingvisitors/src/tests/searcher/searcher_test.cpp index 84c3a542661..b3e0ad304fe 100644 --- a/streamingvisitors/src/tests/searcher/searcher_test.cpp +++ b/streamingvisitors/src/tests/searcher/searcher_test.cpp @@ -1,6 +1,6 @@ // Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -#include <vespa/vespalib/testkit/testapp.h> +#include <vespa/vespalib/testkit/test_kit.h> #include <vespa/document/fieldvalue/fieldvalues.h> #include <vespa/searchlib/query/streaming/fuzzy_term.h> diff --git a/streamingvisitors/src/tests/searchvisitor/CMakeLists.txt b/streamingvisitors/src/tests/searchvisitor/CMakeLists.txt index 87a1098f52d..83122503bf5 100644 --- a/streamingvisitors/src/tests/searchvisitor/CMakeLists.txt +++ b/streamingvisitors/src/tests/searchvisitor/CMakeLists.txt @@ -3,7 +3,7 @@ vespa_add_executable(streamingvisitors_searchvisitor_test_app TEST SOURCES searchvisitor_test.cpp DEPENDS - streamingvisitors + vespa_streamingvisitors GTest::GTest ) vespa_add_test(NAME streamingvisitors_searchvisitor_test_app COMMAND streamingvisitors_searchvisitor_test_app) diff --git a/streamingvisitors/src/tests/searchvisitor/searchvisitor_test.cpp b/streamingvisitors/src/tests/searchvisitor/searchvisitor_test.cpp index 7cf333a4bee..0c4fb4d1864 100644 --- a/streamingvisitors/src/tests/searchvisitor/searchvisitor_test.cpp +++ b/streamingvisitors/src/tests/searchvisitor/searchvisitor_test.cpp @@ -15,6 +15,7 @@ #include <vespa/storage/frameworkimpl/component/storagecomponentregisterimpl.h> #include <vespa/storageframework/defaultimplementation/clock/fakeclock.h> #include <vespa/vespalib/gtest/gtest.h> +#include <vespa/vespalib/testkit/test_path.h> #include <vespa/log/log.h> LOG_SETUP("searchvisitor_test"); @@ -30,6 +31,10 @@ vespalib::string get_doc_id(int id) { return "id:test:test::" + std::to_string(id); } +vespalib::string src_cfg(vespalib::stringref prefix, vespalib::stringref suffix) { + return prefix + TEST_PATH("cfg") + suffix; +} + /** * This class reflects the document type defined in cfg/test.sd. */ @@ -160,9 +165,9 @@ public: SearchVisitorTest::SearchVisitorTest() : _componentRegister(), - _env(::config::ConfigUri("dir:cfg"), nullptr, ""), - _factory(::config::ConfigUri("dir:cfg"), nullptr, ""), - _repo(std::make_shared<DocumentTypeRepo>(readDocumenttypesConfig("cfg/documenttypes.cfg"))), + _env(::config::ConfigUri(src_cfg("dir:", "")), nullptr, ""), + _factory(::config::ConfigUri(src_cfg("dir:", "")), nullptr, ""), + _repo(std::make_shared<DocumentTypeRepo>(readDocumenttypesConfig(src_cfg("", "/documenttypes.cfg")))), _doc_type(_repo->getDocumentType("test")) { assert(_doc_type != nullptr); diff --git a/streamingvisitors/src/tests/textutil/CMakeLists.txt b/streamingvisitors/src/tests/textutil/CMakeLists.txt index da99850e43e..267b67f3b97 100644 --- a/streamingvisitors/src/tests/textutil/CMakeLists.txt +++ b/streamingvisitors/src/tests/textutil/CMakeLists.txt @@ -3,6 +3,7 @@ vespa_add_executable(vsm_textutil_test_app TEST SOURCES textutil_test.cpp DEPENDS - streamingvisitors + vespa_streamingvisitors + GTest::gtest ) vespa_add_test(NAME vsm_textutil_test_app COMMAND vsm_textutil_test_app) diff --git a/streamingvisitors/src/tests/textutil/textutil_test.cpp b/streamingvisitors/src/tests/textutil/textutil_test.cpp index f7f340a2182..1dbabf1f0af 100644 --- a/streamingvisitors/src/tests/textutil/textutil_test.cpp +++ b/streamingvisitors/src/tests/textutil/textutil_test.cpp @@ -1,7 +1,7 @@ // Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -#include <vespa/vespalib/testkit/testapp.h> #include <vespa/fastlib/text/normwordfolder.h> +#include <vespa/vespalib/gtest/gtest.h> #include <vespa/vsm/searcher/fold.h> #include <vespa/vsm/searcher/futf8strchrfieldsearcher.h> #include <vespa/vsm/searcher/utf8stringfieldsearcherbase.h> @@ -23,9 +23,9 @@ using SizeV = Vector<size_t>; using SFSB = UTF8StringFieldSearcherBase; using FSFS = FUTF8StrChrFieldSearcher; -class TextUtilTest : public vespalib::TestApp +class TextUtilTest : public ::testing::Test { -private: +protected: ucs4_t getUTF8Char(const char * src); template <typename BW, bool OFF> void assertSkipSeparators(const char * input, size_t len, const UCS4V & expdstbuf, const SizeV & expoffsets); @@ -38,23 +38,23 @@ private: template <typename BW, bool OFF> void testSkipSeparators(); - void testSkipSeparators(); - void testSeparatorCharacter(); - void testAnsiFold(); - void test_lfoldua(); -#ifdef __x86_64__ - void test_sse2_foldua(); -#endif -public: - int Main() override; + TextUtilTest(); + ~TextUtilTest() override; }; +TextUtilTest::TextUtilTest() + : ::testing::Test() +{ +} + +TextUtilTest::~TextUtilTest() = default; + ucs4_t TextUtilTest::getUTF8Char(const char * src) { ucs4_t retval = Fast_UnicodeUtil::GetUTF8Char(src); - ASSERT_TRUE(retval != Fast_UnicodeUtil::_BadUTF8Char); + EXPECT_TRUE(retval != Fast_UnicodeUtil::_BadUTF8Char); return retval; } @@ -68,12 +68,12 @@ TextUtilTest::assertSkipSeparators(const char * input, size_t len, const UCS4V & UTF8StrChrFieldSearcher fs(0); BW bw(dstbuf.get(), offsets.get()); size_t dstlen = fs.skipSeparators(srcbuf, len, bw); - EXPECT_EQUAL(dstlen, expdstbuf.size()); + EXPECT_EQ(dstlen, expdstbuf.size()); ASSERT_TRUE(dstlen == expdstbuf.size()); for (size_t i = 0; i < dstlen; ++i) { - EXPECT_EQUAL(dstbuf[i], expdstbuf[i]); + EXPECT_EQ(dstbuf[i], expdstbuf[i]); if (OFF) { - EXPECT_EQUAL(offsets[i], expoffsets[i]); + EXPECT_EQ(offsets[i], expoffsets[i]); } } } @@ -83,7 +83,7 @@ TextUtilTest::assertAnsiFold(const std::string & toFold, const std::string & exp { char folded[256]; EXPECT_TRUE(FSFS::ansiFold(toFold.c_str(), toFold.size(), folded)); - EXPECT_EQUAL(std::string(folded, toFold.size()), exp); + EXPECT_EQ(std::string(folded, toFold.size()), exp); } void @@ -91,7 +91,7 @@ TextUtilTest::assertAnsiFold(char c, char exp) { char folded; EXPECT_TRUE(FSFS::ansiFold(&c, 1, &folded)); - EXPECT_EQUAL((int32_t)folded, (int32_t)exp); + EXPECT_EQ((int32_t)folded, (int32_t)exp); } #ifdef __x86_64__ @@ -103,8 +103,8 @@ TextUtilTest::assert_sse2_foldua(const std::string & toFold, size_t charFolded, const unsigned char * toFoldOrg = reinterpret_cast<const unsigned char *>(toFold.c_str()); const unsigned char * retval = sse2_foldua(toFoldOrg, toFold.size(), reinterpret_cast<unsigned char *>(folded + alignedStart)); - EXPECT_EQUAL((size_t)(retval - toFoldOrg), charFolded); - EXPECT_EQUAL(std::string(folded + alignedStart, charFolded), exp); + EXPECT_EQ((size_t)(retval - toFoldOrg), charFolded); + EXPECT_EQ(std::string(folded + alignedStart, charFolded), exp); } void @@ -115,9 +115,9 @@ TextUtilTest::assert_sse2_foldua(unsigned char c, unsigned char exp, size_t char unsigned char folded[32]; size_t alignedStart = 0xF - (size_t(folded + 0xF) % 0x10); const unsigned char * retval = sse2_foldua(toFold, 16, folded + alignedStart); - EXPECT_EQUAL((size_t)(retval - toFold), charFolded); + EXPECT_EQ((size_t)(retval - toFold), charFolded); for (size_t i = 0; i < charFolded; ++i) { - EXPECT_EQUAL((int32_t)folded[i + alignedStart], (int32_t)exp); + EXPECT_EQ((int32_t)folded[i + alignedStart], (int32_t)exp); } } #endif @@ -145,8 +145,7 @@ TextUtilTest::testSkipSeparators() SizeV().a(0).a(0).a(2).a(3).a(3)); } -void -TextUtilTest::testSkipSeparators() +TEST_F(TextUtilTest, skip_separators) { Fast_NormalizeWordFolder::Setup(Fast_NormalizeWordFolder::DO_SHARP_S_SUBSTITUTION); @@ -154,8 +153,7 @@ TextUtilTest::testSkipSeparators() testSkipSeparators<SFSB::OffsetWrapper, true>(); } -void -TextUtilTest::testSeparatorCharacter() +TEST_F(TextUtilTest, separator_character) { EXPECT_TRUE(SFSB::isSeparatorCharacter('\x00')); EXPECT_TRUE(SFSB::isSeparatorCharacter('\x01')); @@ -194,8 +192,7 @@ TextUtilTest::testSeparatorCharacter() EXPECT_TRUE(! SFSB::isSeparatorCharacter('\x20')); // space } -void -TextUtilTest::testAnsiFold() +TEST_F(TextUtilTest, ansi_fold) { FieldSearcher::init(); assertAnsiFold("", ""); @@ -220,8 +217,7 @@ TextUtilTest::testAnsiFold() } } -void -TextUtilTest::test_lfoldua() +TEST_F(TextUtilTest, lfoldua) { FieldSearcher::init(); char folded[256]; @@ -229,12 +225,11 @@ TextUtilTest::test_lfoldua() const char * toFold = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; size_t len = strlen(toFold); EXPECT_TRUE(FSFS::lfoldua(toFold, len, folded, alignedStart)); - EXPECT_EQUAL(std::string(folded + alignedStart, len), "abcdefghijklmnopqrstuvwxyz"); + EXPECT_EQ(std::string(folded + alignedStart, len), "abcdefghijklmnopqrstuvwxyz"); } #ifdef __x86_64__ -void -TextUtilTest::test_sse2_foldua() +TEST_F(TextUtilTest, sse2_foldua) { assert_sse2_foldua("", 0, ""); assert_sse2_foldua("ABCD", 0, ""); @@ -263,22 +258,6 @@ TextUtilTest::test_sse2_foldua() } #endif -int -TextUtilTest::Main() -{ - TEST_INIT("textutil_test"); - - testSkipSeparators(); - testSeparatorCharacter(); - testAnsiFold(); - test_lfoldua(); -#ifdef __x86_64__ - test_sse2_foldua(); -#endif - - TEST_DONE(); -} - } -TEST_APPHOOK(vsm::TextUtilTest); +GTEST_MAIN_RUN_ALL_TESTS() diff --git a/streamingvisitors/src/tests/tokens_converter/CMakeLists.txt b/streamingvisitors/src/tests/tokens_converter/CMakeLists.txt index 01a1fc965af..848e52d275b 100644 --- a/streamingvisitors/src/tests/tokens_converter/CMakeLists.txt +++ b/streamingvisitors/src/tests/tokens_converter/CMakeLists.txt @@ -3,7 +3,7 @@ vespa_add_executable(streamingvisitors_tokens_converter_test_app TEST SOURCES tokens_converter_test.cpp DEPENDS - streamingvisitors + vespa_streamingvisitors GTest::gtest ) diff --git a/streamingvisitors/src/vespa/searchvisitor/CMakeLists.txt b/streamingvisitors/src/vespa/searchvisitor/CMakeLists.txt index 4112c76bdaa..855038058d0 100644 --- a/streamingvisitors/src/vespa/searchvisitor/CMakeLists.txt +++ b/streamingvisitors/src/vespa/searchvisitor/CMakeLists.txt @@ -1,5 +1,5 @@ # Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -vespa_add_library(streamingvisitors +vespa_add_library(vespa_streamingvisitors SOURCES attribute_access_recorder.cpp hitcollector.cpp diff --git a/streamingvisitors/src/vespa/searchvisitor/searchvisitor.cpp b/streamingvisitors/src/vespa/searchvisitor/searchvisitor.cpp index 7ecda0e82f1..926da9438a1 100644 --- a/streamingvisitors/src/vespa/searchvisitor/searchvisitor.cpp +++ b/streamingvisitors/src/vespa/searchvisitor/searchvisitor.cpp @@ -684,7 +684,7 @@ SearchVisitor::RankController::processAccessedAttributes(const QueryEnvironment SearchVisitor::RankController::RankController() : _rankProfile("default"), _rankManagerSnapshot(nullptr), - _rank_score_drop_limit(std::numeric_limits<search::feature_t>::min()), + _rank_score_drop_limit(), _hasRanking(false), _hasSummaryFeatures(false), _dumpFeatures(false), @@ -703,9 +703,9 @@ SearchVisitor::RankController::setupRankProcessors(Query & query, const search::IAttributeManager & attrMan, std::vector<AttrInfo> & attributeFields) { - using RankScoreDropLimit = search::fef::indexproperties::hitcollector::RankScoreDropLimit; + using FirstPhaseRankScoreDropLimit = search::fef::indexproperties::hitcollector::FirstPhaseRankScoreDropLimit; const search::fef::RankSetup & rankSetup = _rankManagerSnapshot->getRankSetup(_rankProfile); - _rank_score_drop_limit = RankScoreDropLimit::lookup(_queryProperties, rankSetup.getRankScoreDropLimit()); + _rank_score_drop_limit = FirstPhaseRankScoreDropLimit::lookup(_queryProperties, rankSetup.get_first_phase_rank_score_drop_limit()); _rankProcessor = std::make_unique<RankProcessor>(_rankManagerSnapshot, _rankProfile, query, location, _queryProperties, _featureOverrides, &attrMan); _rankProcessor->initForRanking(wantedHitCount, use_sort_blob); // register attribute vectors needed for ranking @@ -751,8 +751,11 @@ SearchVisitor::RankController::rankMatchedDocument(uint32_t docId) bool SearchVisitor::RankController::keepMatchedDocument() { + if (!_rank_score_drop_limit.has_value()) { + return true; + } // also make sure that NaN scores are added - return (!(_rankProcessor->getRankScore() <= _rank_score_drop_limit)); + return (!(_rankProcessor->getRankScore() <= _rank_score_drop_limit.value())); } void @@ -1139,7 +1142,7 @@ SearchVisitor::handleDocument(StorageDocument::SP documentSP) } else { _hitsRejectedCount++; LOG(debug, "Do not keep document with id '%s' because rank score (%f) <= rank score drop limit (%f)", - documentId.c_str(), rp.getRankScore(), _rankController.rank_score_drop_limit()); + documentId.c_str(), rp.getRankScore(), _rankController.rank_score_drop_limit().value()); } } else { LOG(debug, "Did not match document with id '%s'", document.docDoc().getId().getScheme().toString().c_str()); diff --git a/streamingvisitors/src/vespa/searchvisitor/searchvisitor.h b/streamingvisitors/src/vespa/searchvisitor/searchvisitor.h index 7d73a159f6f..2f6673abd2d 100644 --- a/streamingvisitors/src/vespa/searchvisitor/searchvisitor.h +++ b/streamingvisitors/src/vespa/searchvisitor/searchvisitor.h @@ -30,6 +30,7 @@ #include <vespa/document/fieldvalue/fieldvalues.h> #include <vespa/documentapi/messagebus/messages/queryresultmessage.h> #include <vespa/document/fieldvalue/iteratorhandler.h> +#include <optional> using namespace search::aggregation; @@ -127,7 +128,7 @@ private: private: vespalib::string _rankProfile; std::shared_ptr<const RankManager::Snapshot> _rankManagerSnapshot; - search::feature_t _rank_score_drop_limit; + std::optional<search::feature_t> _rank_score_drop_limit; bool _hasRanking; bool _hasSummaryFeatures; bool _dumpFeatures; @@ -157,7 +158,7 @@ private: RankProcessor * getRankProcessor() { return _rankProcessor.get(); } void setDumpFeatures(bool dumpFeatures) { _dumpFeatures = dumpFeatures; } bool getDumpFeatures() const { return _dumpFeatures; } - search::feature_t rank_score_drop_limit() const noexcept { return _rank_score_drop_limit; } + std::optional<search::feature_t> rank_score_drop_limit() const noexcept { return _rank_score_drop_limit; } /** * Setup rank processors used for ranking and dumping. |