diff options
author | Lester Solbakken <lesters@users.noreply.github.com> | 2021-05-27 10:41:31 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-05-27 10:41:31 +0200 |
commit | e3d4dbac364216f8d93493d4a5f34835a268fbcf (patch) | |
tree | 90bc2cf28e08123a55854c2db1217f556d349a2e /searchlib/src/tests/features/ranking_expression/ranking_expression_test.cpp | |
parent | 92efe91ec3d7be1902e7ca9c0e290c7859d535af (diff) | |
parent | 6b6e59869ab5259a8cd2e382cd2b5164a963a293 (diff) |
Merge branch 'master' into lesters/wire-in-stateless-onnx-rt
Diffstat (limited to 'searchlib/src/tests/features/ranking_expression/ranking_expression_test.cpp')
-rw-r--r-- | searchlib/src/tests/features/ranking_expression/ranking_expression_test.cpp | 29 |
1 files changed, 23 insertions, 6 deletions
diff --git a/searchlib/src/tests/features/ranking_expression/ranking_expression_test.cpp b/searchlib/src/tests/features/ranking_expression/ranking_expression_test.cpp index 251040ecfa7..6baa6581edf 100644 --- a/searchlib/src/tests/features/ranking_expression/ranking_expression_test.cpp +++ b/searchlib/src/tests/features/ranking_expression/ranking_expression_test.cpp @@ -67,28 +67,38 @@ struct SetupResult { RankingExpressionBlueprint rank; DummyDependencyHandler deps; bool setup_ok; - SetupResult(const TypeMap &object_inputs, const vespalib::string &expression); + SetupResult(const TypeMap &object_inputs, const vespalib::string &expression, + bool external_expression = false); ~SetupResult(); }; SetupResult::SetupResult(const TypeMap &object_inputs, - const vespalib::string &expression) + const vespalib::string &expression, + bool external_expression) : stash(), index_env(), query_env(&index_env), rank(make_replacer()), deps(rank), setup_ok(false) { rank.setName("self"); - index_env.getProperties().add("self.rankingScript", expression); for (const auto &input: object_inputs) { deps.define_object_input(input.first, ValueType::from_spec(input.second)); } - setup_ok = rank.setup(index_env, {}); + std::vector<vespalib::string> params; + if (external_expression) { + params.push_back("my_expr"); + index_env.addRankingExpression("my_expr", expression); + } else { + index_env.getProperties().add("self.rankingScript", expression); + } + Blueprint &bp = rank; + setup_ok = bp.setup(index_env, params); EXPECT_TRUE(!deps.accept_type_mismatch); } SetupResult::~SetupResult() = default; void verify_output_type(const TypeMap &object_inputs, - const vespalib::string &expression, const FeatureType &expect) + const vespalib::string &expression, const FeatureType &expect, + bool external_expression = false) { - SetupResult result(object_inputs, expression); + SetupResult result(object_inputs, expression, external_expression); EXPECT_TRUE(result.setup_ok); EXPECT_EQUAL(1u, result.deps.output.size()); ASSERT_EQUAL(1u, result.deps.output_type.size()); @@ -126,6 +136,13 @@ TEST("require that ranking expression can resolve to concrete complex type") { FeatureType::object(ValueType::from_spec("tensor(x{},y{},z{})")))); } +TEST("require that ranking expression can be external") { + TEST_DO(verify_output_type({}, "a*b", FeatureType::number(), true)); + TEST_DO(verify_output_type({{"b", "double"}}, "a*b", FeatureType::object(ValueType::double_type()), true)); + TEST_DO(verify_output_type({{"a", "tensor(x{},y{})"}, {"b", "tensor(y{},z{})"}}, "a*b", + FeatureType::object(ValueType::from_spec("tensor(x{},y{},z{})")), true)); +} + TEST("require that setup fails for incompatible types") { TEST_DO(verify_setup_fail({{"a", "tensor(x{},y{})"}, {"b", "tensor(y[10],z{})"}}, "a*b")); } |