From 5ceda2c86451b0751006e0fbc18214bb3c4b71eb Mon Sep 17 00:00:00 2001 From: HÃ¥vard Pettersen Date: Tue, 5 Jun 2018 15:25:57 +0000 Subject: added more tests for same element query nodes --- .../src/tests/proton/matching/query_test.cpp | 53 ++++++++++++++++++---- 1 file changed, 45 insertions(+), 8 deletions(-) (limited to 'searchcore/src/tests/proton/matching/query_test.cpp') diff --git a/searchcore/src/tests/proton/matching/query_test.cpp b/searchcore/src/tests/proton/matching/query_test.cpp index 9adb86147b6..61823a17f09 100644 --- a/searchcore/src/tests/proton/matching/query_test.cpp +++ b/searchcore/src/tests/proton/matching/query_test.cpp @@ -107,6 +107,8 @@ class Test : public vespalib::TestApp { void requireThatParallelWandBlueprintsAreCreatedCorrectly(); void requireThatWhiteListBlueprintCanBeUsed(); void requireThatSameElementTermsAreProperlyPrefixed(); + void requireThatSameElementDoesNotAllocateMatchData(); + void requireThatSameElementIteratorsCanBeBuilt(); public: ~Test(); @@ -181,12 +183,7 @@ Node::UP buildQueryTree(const ViewResolver &resolver, query_builder.addPhrase(2, field, 7, Weight(0)); query_builder.addStringTerm(phrase_term, field, 8, Weight(0)); query_builder.addStringTerm(phrase_term, field, 9, Weight(0)); -#if 0 - //Todo add testing when SameElement blueprints are ready - query_builder.addSameElement(2, field); - query_builder.addStringTerm(string_term, field, 10, Weight(0)); - query_builder.addStringTerm(prefix_term, field, 11, Weight(0)); -#endif + Node::UP node = query_builder.build(); ResolveViewVisitor visitor(resolver, idxEnv); @@ -194,6 +191,19 @@ Node::UP buildQueryTree(const ViewResolver &resolver, return node; } +Node::UP buildSameElementQueryTree(const ViewResolver &resolver, + const search::fef::IIndexEnvironment &idxEnv) +{ + QueryBuilder query_builder; + query_builder.addSameElement(2, field); + query_builder.addStringTerm(string_term, field, 0, Weight(0)); + query_builder.addStringTerm(prefix_term, field, 1, Weight(0)); + Node::UP node = query_builder.build(); + ResolveViewVisitor visitor(resolver, idxEnv); + node->accept(visitor); + return node; +} + void Test::requireThatMatchDataIsReserved() { Node::UP node = buildQueryTree(ViewResolver(), plain_index_env); @@ -883,6 +893,7 @@ make_same_element_stack_dump(const vespalib::string &prefix, const vespalib::str query->accept(sem); return query; } + void Test::requireThatSameElementTermsAreProperlyPrefixed() { @@ -915,6 +926,32 @@ Test::requireThatSameElementTermsAreProperlyPrefixed() EXPECT_EQUAL(dynamic_cast(root->getChildren()[1])->getView(), "abc.abc.f2"); } +void +Test::requireThatSameElementDoesNotAllocateMatchData() +{ + Node::UP node = buildSameElementQueryTree(ViewResolver(), plain_index_env); + MatchDataLayout mdl; + MatchDataReserveVisitor visitor(mdl); + node->accept(visitor); + MatchData::UP match_data = mdl.createMatchData(); + EXPECT_EQUAL(0u, match_data->getNumTermFields()); +} + +void +Test::requireThatSameElementIteratorsCanBeBuilt() { + Node::UP node = buildSameElementQueryTree(ViewResolver(), plain_index_env); + FakeSearchContext context(10); + context.addIdx(0).idx(0).getFake() + .addResult(field, string_term, FakeResult() + .doc(4).elem(1).pos(0).doc(8).elem(1).pos(0)) + .addResult(field, prefix_term, FakeResult() + .doc(4).elem(2).pos(0).doc(8).elem(1).pos(1)); + SearchIterator::UP iterator = getIterator(*node, context); + ASSERT_TRUE(iterator.get()); + EXPECT_TRUE(!iterator->seek(4)); + EXPECT_TRUE(iterator->seek(8)); +} + Test::~Test() = default; int @@ -937,7 +974,6 @@ Test::Main() TEST_CALL(requireThatNearIteratorsCanBeBuilt); TEST_CALL(requireThatONearIteratorsCanBeBuilt); TEST_CALL(requireThatPhraseIteratorsCanBeBuilt); - //TODO Add SameElement testing TEST_CALL(requireThatUnknownFieldActsEmpty); TEST_CALL(requireThatIllegalFieldsAreIgnored); TEST_CALL(requireThatQueryGluesEverythingTogether); @@ -949,7 +985,8 @@ Test::Main() TEST_CALL(requireThatParallelWandBlueprintsAreCreatedCorrectly); TEST_CALL(requireThatWhiteListBlueprintCanBeUsed); TEST_CALL(requireThatSameElementTermsAreProperlyPrefixed); - + TEST_CALL(requireThatSameElementDoesNotAllocateMatchData); + TEST_CALL(requireThatSameElementIteratorsCanBeBuilt); TEST_DONE(); } -- cgit v1.2.3