diff options
Diffstat (limited to 'searchlib/src/tests/query')
-rw-r--r-- | searchlib/src/tests/query/customtypevisitor_test.cpp | 16 | ||||
-rw-r--r-- | searchlib/src/tests/query/query_visitor_test.cpp | 4 | ||||
-rw-r--r-- | searchlib/src/tests/query/querybuilder_test.cpp | 24 |
3 files changed, 40 insertions, 4 deletions
diff --git a/searchlib/src/tests/query/customtypevisitor_test.cpp b/searchlib/src/tests/query/customtypevisitor_test.cpp index 747b376777a..35280fb0bd8 100644 --- a/searchlib/src/tests/query/customtypevisitor_test.cpp +++ b/searchlib/src/tests/query/customtypevisitor_test.cpp @@ -42,7 +42,11 @@ struct MyDotProduct : DotProduct { MyDotProduct() : DotProduct(0, "view", 0, Wei struct MyWandTerm : WandTerm { MyWandTerm() : WandTerm(0, "view", 0, Weight(42), 57, 67, 77.7) {} }; struct MyPredicateQuery : InitTerm<PredicateQuery> {}; struct MyRegExpTerm : InitTerm<RegExpTerm> {}; -struct MyNearestNeighborTerm : NearestNeighborTerm {}; +struct MyNearestNeighborTerm : NearestNeighborTerm { + MyNearestNeighborTerm() : NearestNeighborTerm("qt", "fn", 0, Weight(42), 10, true, 666, 1234.5) {} +}; +struct MyTrue : TrueQueryNode {}; +struct MyFalse : FalseQueryNode {}; struct MyQueryNodeTypes { typedef MyAnd And; @@ -68,6 +72,8 @@ struct MyQueryNodeTypes { typedef MyPredicateQuery PredicateQuery; typedef MyRegExpTerm RegExpTerm; typedef MyNearestNeighborTerm NearestNeighborTerm; + typedef MyFalse FalseQueryNode; + typedef MyTrue TrueQueryNode; }; class MyCustomVisitor : public CustomTypeVisitor<MyQueryNodeTypes> @@ -104,6 +110,8 @@ public: void visit(MyPredicateQuery &) override { setVisited<MyPredicateQuery>(); } void visit(MyRegExpTerm &) override { setVisited<MyRegExpTerm>(); } void visit(MyNearestNeighborTerm &) override { setVisited<MyNearestNeighborTerm>(); } + void visit(MyTrue &) override { setVisited<MyTrue>(); } + void visit(MyFalse &) override { setVisited<MyFalse>(); } }; template <class T> @@ -136,7 +144,11 @@ TEST("customtypevisitor_test") { requireThatNodeIsVisited<MyWandTerm>(); requireThatNodeIsVisited<MyPredicateQuery>(); requireThatNodeIsVisited<MyRegExpTerm>(); + requireThatNodeIsVisited<MyLocationTerm>(); + requireThatNodeIsVisited<MyNearestNeighborTerm>(); + requireThatNodeIsVisited<MyTrue>(); + requireThatNodeIsVisited<MyFalse>(); } } // namespace -TEST_MAIN() { TEST_RUN_ALL(); }
\ No newline at end of file +TEST_MAIN() { TEST_RUN_ALL(); } diff --git a/searchlib/src/tests/query/query_visitor_test.cpp b/searchlib/src/tests/query/query_visitor_test.cpp index 9090575bd44..9f73c1ff585 100644 --- a/searchlib/src/tests/query/query_visitor_test.cpp +++ b/searchlib/src/tests/query/query_visitor_test.cpp @@ -47,6 +47,8 @@ public: void visit(PredicateQuery &) override { isVisited<PredicateQuery>() = true; } void visit(RegExpTerm &) override { isVisited<RegExpTerm>() = true; } void visit(NearestNeighborTerm &) override { isVisited<NearestNeighborTerm>() = true; } + void visit(TrueQueryNode &) override { isVisited<TrueQueryNode>() = true; } + void visit(FalseQueryNode &) override { isVisited<FalseQueryNode>() = true; } }; template <class T> @@ -81,6 +83,8 @@ TEST("requireThatAllNodesCanBeVisited") { checkVisit<PredicateQuery>(new SimplePredicateQuery(PredicateQueryTerm::UP(), "field", 0, Weight(0))); checkVisit<RegExpTerm>(new SimpleRegExpTerm("t", "field", 0, Weight(0))); checkVisit<NearestNeighborTerm>(new SimpleNearestNeighborTerm("query_tensor", "doc_tensor", 0, Weight(0), 123, true, 321, 100100.25)); + checkVisit<TrueQueryNode>(new SimpleTrue()); + checkVisit<FalseQueryNode>(new SimpleFalse()); } } // namespace diff --git a/searchlib/src/tests/query/querybuilder_test.cpp b/searchlib/src/tests/query/querybuilder_test.cpp index 0c784287e5c..93cfad27742 100644 --- a/searchlib/src/tests/query/querybuilder_test.cpp +++ b/searchlib/src/tests/query/querybuilder_test.cpp @@ -47,7 +47,7 @@ PredicateQueryTerm::UP getPredicateQueryTerm() { template <class NodeTypes> Node::UP createQueryTree() { QueryBuilder<NodeTypes> builder; - builder.addAnd(11); + builder.addAnd(12); { builder.addRank(2); { @@ -110,6 +110,11 @@ Node::UP createQueryTree() { builder.addStringTerm(str[6], view[6], id[6], weight[7]); } builder.add_nearest_neighbor_term("query_tensor", "doc_tensor", id[3], weight[5], 7, true, 33, 100100.25); + builder.addAndNot(2); + { + builder.add_true_node(); + builder.add_false_node(); + } } Node::UP node = builder.build(); ASSERT_TRUE(node.get()); @@ -172,10 +177,12 @@ void checkQueryTreeTypes(Node *node) { typedef typename NodeTypes::WeakAnd WeakAnd; typedef typename NodeTypes::PredicateQuery PredicateQuery; typedef typename NodeTypes::RegExpTerm RegExpTerm; + typedef typename NodeTypes::TrueQueryNode TrueNode; + typedef typename NodeTypes::FalseQueryNode FalseNode; ASSERT_TRUE(node); auto* and_node = as_node<And>(node); - EXPECT_EQUAL(11u, and_node->getChildren().size()); + EXPECT_EQUAL(12u, and_node->getChildren().size()); auto* rank = as_node<Rank>(and_node->getChildren()[0]); EXPECT_EQUAL(2u, rank->getChildren().size()); @@ -292,6 +299,13 @@ void checkQueryTreeTypes(Node *node) { EXPECT_EQUAL(id[3], nearest_neighbor->getId()); EXPECT_EQUAL(weight[5].percent(), nearest_neighbor->getWeight().percent()); EXPECT_EQUAL(7u, nearest_neighbor->get_target_num_hits()); + + and_not = as_node<AndNot>(and_node->getChildren()[11]); + EXPECT_EQUAL(2u, and_not->getChildren().size()); + auto* true_node = as_node<TrueNode>(and_not->getChildren()[0]); + auto* false_node = as_node<FalseNode>(and_not->getChildren()[1]); + EXPECT_TRUE(true_node); + EXPECT_TRUE(false_node); } struct AbstractTypes { @@ -316,6 +330,8 @@ struct AbstractTypes { typedef search::query::WeakAnd WeakAnd; typedef search::query::PredicateQuery PredicateQuery; typedef search::query::RegExpTerm RegExpTerm; + typedef search::query::TrueQueryNode TrueQueryNode; + typedef search::query::FalseQueryNode FalseQueryNode; }; // Builds a tree with simplequery and checks that the results have the @@ -409,6 +425,8 @@ struct MyNearestNeighborTerm : NearestNeighborTerm { : NearestNeighborTerm(query_tensor_name, field_name, i, w, target_num_hits, allow_approximate, explore_additional_hits, distance_threshold) {} }; +struct MyTrue : TrueQueryNode {}; +struct MyFalse : FalseQueryNode {}; struct MyQueryNodeTypes { typedef MyAnd And; @@ -434,6 +452,8 @@ struct MyQueryNodeTypes { typedef MyPredicateQuery PredicateQuery; typedef MyRegExpTerm RegExpTerm; typedef MyNearestNeighborTerm NearestNeighborTerm; + typedef MyTrue TrueQueryNode; + typedef MyFalse FalseQueryNode; }; TEST("require that Custom Query Trees Can Be Built") { |