diff options
author | Arne H Juul <arnej27959@users.noreply.github.com> | 2021-03-17 15:04:54 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-03-17 15:04:54 +0100 |
commit | a02f7e628be4196a83f7ab0e379c74a223eefc93 (patch) | |
tree | 86d32e587eb1396fcd71e31cf029b54153ef9b34 /eval | |
parent | 451495718485047eebd66fd37bf53b2c27a19f10 (diff) | |
parent | 075e5bbae3f03b4971409e96e805121d298ec207 (diff) |
Merge pull request #17008 from vespa-engine/arnej/update_pow_as_map_optimizer
rewrite PowAsMapOptimizer test
Diffstat (limited to 'eval')
-rw-r--r-- | eval/src/tests/instruction/pow_as_map_optimizer/pow_as_map_optimizer_test.cpp | 72 |
1 files changed, 35 insertions, 37 deletions
diff --git a/eval/src/tests/instruction/pow_as_map_optimizer/pow_as_map_optimizer_test.cpp b/eval/src/tests/instruction/pow_as_map_optimizer/pow_as_map_optimizer_test.cpp index 029a080197d..e5a8cd9e92c 100644 --- a/eval/src/tests/instruction/pow_as_map_optimizer/pow_as_map_optimizer_test.cpp +++ b/eval/src/tests/instruction/pow_as_map_optimizer/pow_as_map_optimizer_test.cpp @@ -1,7 +1,7 @@ // Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -#include <vespa/eval/eval/fast_value.h> #include <vespa/eval/eval/tensor_function.h> +#include <vespa/eval/instruction/inplace_map_function.h> #include <vespa/eval/eval/test/eval_fixture.h> #include <vespa/eval/eval/test/gen_spec.h> #include <vespa/vespalib/gtest/gtest.h> @@ -10,44 +10,42 @@ using namespace vespalib::eval::operation; using namespace vespalib::eval::tensor_function; using namespace vespalib::eval::test; using namespace vespalib::eval; -//using namespace vespalib; -const ValueBuilderFactory &prod_factory = FastValueBuilderFactory::get(); - -EvalFixture::ParamRepo make_params() { - return EvalFixture::ParamRepo() - .add("a", GenSpec(1.5)) - .add("b", GenSpec(2.5)) - .add("sparse", GenSpec().map("x", {"a","b"})) - .add("mixed", GenSpec().map("x", {"a"}).idx("y", 5)) - .add_variants("x5y3", GenSpec().idx("x", 5).idx("y", 3)); -} -EvalFixture::ParamRepo param_repo = make_params(); +struct MapInfo { + using LookFor = tensor_function::Map; + op1_t op; + void verify(const LookFor &fun) const { + EXPECT_TRUE(fun.result_is_mutable()); + EXPECT_EQ(fun.function(), op); + } +}; +struct InplaceInfo { + using LookFor = InplaceMapFunction; + op1_t op; + void verify(const LookFor &fun) const { + EXPECT_TRUE(fun.result_is_mutable()); + EXPECT_TRUE(fun.inplace()); + EXPECT_EQ(fun.function(), op); + } +}; void verify_optimized(const vespalib::string &expr, op1_t op1, bool inplace = false) { - EvalFixture slow_fixture(prod_factory, expr, param_repo, false); - EvalFixture fixture(prod_factory, expr, param_repo, true, true); - EXPECT_EQ(fixture.result(), EvalFixture::ref(expr, param_repo)); - EXPECT_EQ(fixture.result(), slow_fixture.result()); - auto info = fixture.find_all<tensor_function::Map>(); - ASSERT_EQ(info.size(), 1u); - EXPECT_TRUE(info[0]->result_is_mutable()); - EXPECT_EQ(info[0]->function(), op1); - ASSERT_EQ(fixture.num_params(), 1); + SCOPED_TRACE(expr.c_str()); if (inplace) { - EXPECT_EQ(fixture.get_param(0), fixture.result()); + InplaceInfo details{op1}; + auto all_types = CellTypeSpace(CellTypeUtils::list_types(), 1); + EvalFixture::verify<InplaceInfo>(expr, {details}, all_types); } else { - EXPECT_TRUE(!(fixture.get_param(0) == fixture.result())); + MapInfo details{op1}; + auto all_types = CellTypeSpace(CellTypeUtils::list_types(), 1); + EvalFixture::verify<MapInfo>(expr, {details}, all_types); } } void verify_not_optimized(const vespalib::string &expr) { - EvalFixture slow_fixture(prod_factory, expr, param_repo, false); - EvalFixture fixture(prod_factory, expr, param_repo, true); - EXPECT_EQ(fixture.result(), EvalFixture::ref(expr, param_repo)); - EXPECT_EQ(fixture.result(), slow_fixture.result()); - auto info = fixture.find_all<Map>(); - EXPECT_TRUE(info.empty()); + SCOPED_TRACE(expr.c_str()); + CellTypeSpace just_double({CellType::DOUBLE}, 1); + EvalFixture::verify<MapInfo>(expr, {}, just_double); } TEST(PowAsMapTest, squared_dense_tensor_is_optimized) { @@ -55,9 +53,7 @@ TEST(PowAsMapTest, squared_dense_tensor_is_optimized) { verify_optimized("pow(x5y3,2.0)", Square::f); verify_optimized("join(x5y3,2.0,f(x,y)(x^y))", Square::f); verify_optimized("join(x5y3,2.0,f(x,y)(pow(x,y)))", Square::f); - verify_optimized("join(x5y3_f,2.0,f(x,y)(pow(x,y)))", Square::f); verify_optimized("join(@x5y3,2.0,f(x,y)(pow(x,y)))", Square::f, true); - verify_optimized("join(@x5y3_f,2.0,f(x,y)(pow(x,y)))", Square::f, true); } TEST(PowAsMapTest, cubed_dense_tensor_is_optimized) { @@ -65,9 +61,7 @@ TEST(PowAsMapTest, cubed_dense_tensor_is_optimized) { verify_optimized("pow(x5y3,3.0)", Cube::f); verify_optimized("join(x5y3,3.0,f(x,y)(x^y))", Cube::f); verify_optimized("join(x5y3,3.0,f(x,y)(pow(x,y)))", Cube::f); - verify_optimized("join(x5y3_f,3.0,f(x,y)(pow(x,y)))", Cube::f); verify_optimized("join(@x5y3,3.0,f(x,y)(pow(x,y)))", Cube::f, true); - verify_optimized("join(@x5y3_f,3.0,f(x,y)(pow(x,y)))", Cube::f, true); } TEST(PowAsMapTest, hypercubed_dense_tensor_is_not_optimized) { @@ -75,15 +69,19 @@ TEST(PowAsMapTest, hypercubed_dense_tensor_is_not_optimized) { } TEST(PowAsMapTest, scalar_join_is_optimized) { - verify_optimized("join(a,2.0,f(x,y)(pow(x,y)))", Square::f); + vespalib::string expr = "join(@$1,2.0,f(x,y)(pow(x,y)))"; + SCOPED_TRACE(expr.c_str()); + MapInfo details{Square::f}; + CellTypeSpace just_double({CellType::DOUBLE}, 1); + EvalFixture::verify<MapInfo>(expr, {details}, just_double); } TEST(PowAsMapTest, sparse_join_is_optimized) { - verify_optimized("join(sparse,2.0,f(x,y)(pow(x,y)))", Square::f); + verify_optimized("join(x2_1,2.0,f(x,y)(pow(x,y)))", Square::f); } TEST(PowAsMapTest, mixed_join_is_optimized) { - verify_optimized("join(mixed,2.0,f(x,y)(pow(x,y)))", Square::f); + verify_optimized("join(x1_1y5,2.0,f(x,y)(pow(x,y)))", Square::f); } GTEST_MAIN_RUN_ALL_TESTS() |