aboutsummaryrefslogtreecommitdiffstats
path: root/searchcore/src/tests/proton/matching/querynodes_test.cpp
diff options
context:
space:
mode:
authorHåvard Pettersen <havardpe@oath.com>2018-06-05 12:42:37 +0000
committerHåvard Pettersen <havardpe@oath.com>2018-06-05 13:11:26 +0000
commitc00c749cd406467b237a4207de5f03198b4cf78e (patch)
treeb7a1fa691d8330d7992ad20d303e45c0694b2ec7 /searchcore/src/tests/proton/matching/querynodes_test.cpp
parent257b508881cc74d0bbce675a4f07973b3196581f (diff)
test blending of SameElement
Diffstat (limited to 'searchcore/src/tests/proton/matching/querynodes_test.cpp')
-rw-r--r--searchcore/src/tests/proton/matching/querynodes_test.cpp57
1 files changed, 46 insertions, 11 deletions
diff --git a/searchcore/src/tests/proton/matching/querynodes_test.cpp b/searchcore/src/tests/proton/matching/querynodes_test.cpp
index 7b6fdd1ae88..6607019cccc 100644
--- a/searchcore/src/tests/proton/matching/querynodes_test.cpp
+++ b/searchcore/src/tests/proton/matching/querynodes_test.cpp
@@ -25,6 +25,7 @@
#include <vespa/searchlib/queryeval/ranksearch.h>
#include <vespa/searchlib/queryeval/searchiterator.h>
#include <vespa/searchlib/queryeval/simple_phrase_search.h>
+#include <vespa/searchlib/queryeval/same_element_search.h>
#include <vespa/searchlib/queryeval/sourceblendersearch.h>
#include <vespa/searchlib/queryeval/fake_search.h>
#include <vespa/searchlib/queryeval/fake_requestcontext.h>
@@ -39,28 +40,30 @@ using search::fef::FieldInfo;
using search::fef::FieldType;
using search::fef::MatchData;
using search::fef::MatchDataLayout;
-using search::fef::TermFieldMatchData;
using search::fef::TermFieldHandle;
+using search::fef::TermFieldMatchData;
using search::fef::TermFieldMatchDataArray;
using search::fef::test::IndexEnvironment;
using search::query::Node;
using search::query::QueryBuilder;
+using search::queryeval::AndNotSearch;
+using search::queryeval::AndSearch;
+using search::queryeval::Blueprint;
+using search::queryeval::EmptySearch;
+using search::queryeval::FakeRequestContext;
+using search::queryeval::FakeResult;
+using search::queryeval::FakeSearch;
+using search::queryeval::FieldSpec;
using search::queryeval::ISourceSelector;
using search::queryeval::NearSearch;
using search::queryeval::ONearSearch;
using search::queryeval::OrSearch;
-using search::queryeval::AndSearch;
-using search::queryeval::AndNotSearch;
using search::queryeval::RankSearch;
-using search::queryeval::Blueprint;
+using search::queryeval::SameElementSearch;
using search::queryeval::SearchIterator;
-using search::queryeval::SourceBlenderSearch;
-using search::queryeval::FieldSpec;
using search::queryeval::Searchable;
-using search::queryeval::FakeSearch;
-using search::queryeval::FakeResult;
-using search::queryeval::FakeRequestContext;
using search::queryeval::SimplePhraseSearch;
+using search::queryeval::SourceBlenderSearch;
using std::string;
using std::vector;
using namespace proton::matching;
@@ -287,6 +290,20 @@ SearchIterator *getParent<ONear>(SearchIterator *a, SearchIterator *b) {
}
template <>
+SearchIterator *getParent<SameElement>(SearchIterator *a, SearchIterator *b) {
+ std::vector<SearchIterator::UP> children;
+ children.emplace_back(a);
+ children.emplace_back(b);
+ TermFieldMatchDataArray data;
+ static TermFieldMatchData tmd;
+ // we only check how many term/field combinations
+ // are below the SameElement parent:
+ // two terms searching in one index field
+ data.add(&tmd).add(&tmd);
+ return new SameElementSearch(nullptr, std::move(children), data, true);
+}
+
+template <>
SearchIterator *getParent<Or>(SearchIterator *a, SearchIterator *b) {
return getSimpleParent<OrSearch>(a, b);
}
@@ -422,6 +439,7 @@ void checkProperBlending() {
TEST_DO(checkOneFieldNoAttributesOneIndex<T>());
}
+
template <typename T>
void checkProperBlendingWithParent() {
IteratorStructureTest structure_test;
@@ -454,6 +472,24 @@ void checkProperBlendingWithParent() {
EXPECT_EQUAL(expected->asString(), structure_test.getIteratorAsString<T>());
}
+template <>
+void checkProperBlendingWithParent<SameElement>() {
+ using T = SameElement;
+ IteratorStructureTest structure_test;
+ structure_test.setFieldCount(1);
+ structure_test.setAttributeCount(0);
+ structure_test.setIndexCount(2);
+
+ SearchIterator::UP expected(
+ getParent<T>(Blender()
+ .add(SourceId(0), getTerm(phrase_term1, field[0], source_tag[0]))
+ .add(SourceId(1), getTerm(phrase_term1, field[0], source_tag[1])),
+ Blender(bothStrict<T>())
+ .add(SourceId(0), getTerm(phrase_term2, field[0], source_tag[0]))
+ .add(SourceId(1), getTerm(phrase_term2, field[0], source_tag[1]))));
+ EXPECT_EQUAL(expected->asString(), structure_test.getIteratorAsString<T>());
+}
+
TEST("requireThatTermNodeSearchIteratorsGetProperBlending") {
TEST_DO(checkProperBlending<Term>());
}
@@ -463,8 +499,7 @@ TEST("requireThatPhrasesGetProperBlending") {
}
TEST("requireThatSameElementGetProperBlending") {
- //TODO SameEelement needs proper testing/implementation
- //TEST_DO(checkProperBlending<SameElement>());
+ TEST_DO(checkProperBlendingWithParent<SameElement>());
}
TEST("requireThatNearGetProperBlending") {