summaryrefslogtreecommitdiffstats
path: root/searchcore/src/tests/proton/matching
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2021-03-28 22:07:37 +0000
committerHenning Baldersheim <balder@yahoo-inc.com>2021-03-29 13:56:56 +0000
commitd4712740d1281fa3a2fa945dfd3ea4c2182d663c (patch)
tree1ace22ed894ed094bbb5c1725899124e325781f0 /searchcore/src/tests/proton/matching
parentfef814ec263ce1ceca0416251b3204f43ee3ed30 (diff)
- Let DotProduct,Wand and WeightedSet be Term nodes in the query tree as they really are.
That restricts the nodes to what they can really do and makes them significantly cheaper. - In addition type conversion of numeric terms is delayed to when it is necessary. And as next step they can be avoided completely.
Diffstat (limited to 'searchcore/src/tests/proton/matching')
-rw-r--r--searchcore/src/tests/proton/matching/query_test.cpp6
-rw-r--r--searchcore/src/tests/proton/matching/querynodes_test.cpp7
-rw-r--r--searchcore/src/tests/proton/matching/termdataextractor_test.cpp52
3 files changed, 19 insertions, 46 deletions
diff --git a/searchcore/src/tests/proton/matching/query_test.cpp b/searchcore/src/tests/proton/matching/query_test.cpp
index 7cc11b0dc0c..696b13c4e21 100644
--- a/searchcore/src/tests/proton/matching/query_test.cpp
+++ b/searchcore/src/tests/proton/matching/query_test.cpp
@@ -898,9 +898,9 @@ void Test::requireThatWeakAndBlueprintsAreCreatedCorrectly() {
void Test::requireThatParallelWandBlueprintsAreCreatedCorrectly() {
using search::queryeval::WeakAndBlueprint;
- ProtonWandTerm wand(field, 42, Weight(100), 123, 9000, 1.25);
- wand.append(Node::UP(new ProtonStringTerm("foo", field, 0, Weight(3))));
- wand.append(Node::UP(new ProtonStringTerm("bar", field, 0, Weight(7))));
+ ProtonWandTerm wand(2, field, 42, Weight(100), 123, 9000, 1.25);
+ wand.addTerm("foo", Weight(3));
+ wand.addTerm("bar", Weight(7));
ViewResolver viewResolver;
ResolveViewVisitor resolve_visitor(viewResolver, attribute_index_env);
diff --git a/searchcore/src/tests/proton/matching/querynodes_test.cpp b/searchcore/src/tests/proton/matching/querynodes_test.cpp
index 07f4e53bf6d..7795d1563d2 100644
--- a/searchcore/src/tests/proton/matching/querynodes_test.cpp
+++ b/searchcore/src/tests/proton/matching/querynodes_test.cpp
@@ -518,6 +518,13 @@ TEST("requireThatSimpleIntermediatesGetProperBlending") {
TEST_DO(checkProperBlendingWithParent<Rank>());
}
+TEST("control query nodes size") {
+ EXPECT_EQUAL(160u, sizeof(search::query::NumberTerm));
+ EXPECT_EQUAL(192u, sizeof(ProtonNodeTypes::NumberTerm));
+ EXPECT_EQUAL(160u, sizeof(search::query::StringTerm));
+ EXPECT_EQUAL(192u, sizeof(ProtonNodeTypes::StringTerm));
+}
+
} // namespace
TEST_MAIN() { TEST_RUN_ALL(); }
diff --git a/searchcore/src/tests/proton/matching/termdataextractor_test.cpp b/searchcore/src/tests/proton/matching/termdataextractor_test.cpp
index fb338d409e7..c5da26d9847 100644
--- a/searchcore/src/tests/proton/matching/termdataextractor_test.cpp
+++ b/searchcore/src/tests/proton/matching/termdataextractor_test.cpp
@@ -39,31 +39,6 @@ namespace search { class AttributeManager; }
namespace {
-class Test : public vespalib::TestApp {
- void requireThatTermsAreAdded();
- void requireThatAViewWithTwoFieldsGivesOneTermDataPerTerm();
- void requireThatUnrankedTermsAreSkipped();
- void requireThatNegativeTermsAreSkipped();
- void requireThatSameElementIsSkipped();
-
-public:
- int Main() override;
-};
-
-int
-Test::Main()
-{
- TEST_INIT("termdataextractor_test");
-
- TEST_DO(requireThatTermsAreAdded());
- TEST_DO(requireThatAViewWithTwoFieldsGivesOneTermDataPerTerm());
- TEST_DO(requireThatUnrankedTermsAreSkipped());
- TEST_DO(requireThatNegativeTermsAreSkipped());
- TEST_DO(requireThatSameElementIsSkipped());
-
- TEST_DONE();
-}
-
const string field = "field";
const uint32_t id[] = { 10, 11, 12, 13, 14, 15, 16, 17, 18 };
@@ -77,14 +52,10 @@ Node::UP getQuery(const ViewResolver &resolver)
query_builder.addSubstringTerm("baz", field, id[3], Weight(0));
query_builder.addSuffixTerm("qux", field, id[4], Weight(0));
query_builder.addRangeTerm(Range(), field, id[5], Weight(0));
- query_builder.addWeightedSetTerm(1, field, id[6], Weight(0));
- {
- // weighted token
- query_builder.addStringTerm("bar", field, id[3], Weight(0));
- }
+ query_builder.addWeightedSetTerm(1, field, id[6], Weight(0))
+ .addTerm("bar", Weight(0));
- query_builder.addLocationTerm(Location(Point{10, 10}, 3, 0),
- field, id[7], Weight(0));
+ query_builder.addLocationTerm(Location(Point{10, 10}, 3, 0), field, id[7], Weight(0));
Node::UP node = query_builder.build();
fef_test::IndexEnvironment index_environment;
@@ -98,7 +69,7 @@ Node::UP getQuery(const ViewResolver &resolver)
return node;
}
-void Test::requireThatTermsAreAdded() {
+TEST("requireThatTermsAreAdded") {
Node::UP node = getQuery(ViewResolver());
vector<const ITermData *> term_data;
@@ -110,7 +81,7 @@ void Test::requireThatTermsAreAdded() {
}
}
-void Test::requireThatAViewWithTwoFieldsGivesOneTermDataPerTerm() {
+TEST("requireThatAViewWithTwoFieldsGivesOneTermDataPerTerm") {
ViewResolver resolver;
resolver.add(field, "foo");
resolver.add(field, "bar");
@@ -125,9 +96,7 @@ void Test::requireThatAViewWithTwoFieldsGivesOneTermDataPerTerm() {
}
}
-void
-Test::requireThatUnrankedTermsAreSkipped()
-{
+TEST("requireThatUnrankedTermsAreSkipped") {
QueryBuilder<ProtonNodeTypes> query_builder;
query_builder.addAnd(2);
query_builder.addStringTerm("term1", field, id[0], Weight(0));
@@ -142,9 +111,7 @@ Test::requireThatUnrankedTermsAreSkipped()
EXPECT_EQUAL(id[0], term_data[0]->getUniqueId());
}
-void
-Test::requireThatNegativeTermsAreSkipped()
-{
+TEST("requireThatNegativeTermsAreSkipped") {
QueryBuilder<ProtonNodeTypes> query_builder;
query_builder.addAnd(2);
query_builder.addStringTerm("term1", field, id[0], Weight(0));
@@ -163,8 +130,7 @@ Test::requireThatNegativeTermsAreSkipped()
EXPECT_EQUAL(id[1], term_data[1]->getUniqueId());
}
-void
-Test::requireThatSameElementIsSkipped()
+TEST("requireThatSameElementIsSkipped")
{
QueryBuilder<ProtonNodeTypes> query_builder;
query_builder.addAnd(2);
@@ -183,4 +149,4 @@ Test::requireThatSameElementIsSkipped()
} // namespace
-TEST_APPHOOK(Test);
+TEST_MAIN() { TEST_RUN_ALL(); } \ No newline at end of file