diff options
author | Arne Juul <arnej@verizonmedia.com> | 2021-03-17 12:29:03 +0000 |
---|---|---|
committer | Arne Juul <arnej@verizonmedia.com> | 2021-03-17 12:29:03 +0000 |
commit | 56f4bd957af84e189b28d89b4cc0b430a172cc75 (patch) | |
tree | b8df14458e64e4608681c9cad6652542d8dcc35c /eval/src/tests | |
parent | 9041c2e4664d86ba5458d21ca91f697e7d19c8a1 (diff) |
rewrite using EvalFixture::verify<FunInfo>
Diffstat (limited to 'eval/src/tests')
-rw-r--r-- | eval/src/tests/instruction/inplace_map_function/inplace_map_function_test.cpp | 67 |
1 files changed, 29 insertions, 38 deletions
diff --git a/eval/src/tests/instruction/inplace_map_function/inplace_map_function_test.cpp b/eval/src/tests/instruction/inplace_map_function/inplace_map_function_test.cpp index de03ef3c3cb..0983f84a4af 100644 --- a/eval/src/tests/instruction/inplace_map_function/inplace_map_function_test.cpp +++ b/eval/src/tests/instruction/inplace_map_function/inplace_map_function_test.cpp @@ -4,6 +4,7 @@ #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/util/require.h> #include <vespa/vespalib/gtest/gtest.h> using namespace vespalib; @@ -11,63 +12,53 @@ using namespace vespalib::eval; using namespace vespalib::eval::test; using namespace vespalib::eval::tensor_function; -const ValueBuilderFactory &prod_factory = FastValueBuilderFactory::get(); - -EvalFixture::ParamRepo make_params() { - return EvalFixture::ParamRepo() - .add("a", GenSpec(1.5)) - .add_mutable("@a", GenSpec(1.5)) - .add("b", GenSpec(2.5)) - .add_variants("sparse", GenSpec().map("x", {"a"})) - .add_variants("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 FunInfo { + using LookFor = InplaceMapFunction; + bool debug_dump; + void verify(const LookFor &fun) const { + EXPECT_TRUE(fun.result_is_mutable()); + EXPECT_EQ(fun.inplace(), true); + if (debug_dump) { + fprintf(stderr, "%s", fun.as_string().c_str()); + } + REQUIRE(fun.result_is_mutable() && fun.inplace()); + } +}; void verify_optimized(const vespalib::string &expr) { - 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<InplaceMapFunction>(); - ASSERT_EQ(info.size(), 1u); - EXPECT_TRUE(info[0]->result_is_mutable()); - EXPECT_EQ(info[0]->inplace(), true); - ASSERT_EQ(fixture.num_params(), 1); - // inplace check: - EXPECT_EQ(fixture.get_param(0), fixture.result()); + SCOPED_TRACE(expr.c_str()); + CellTypeSpace all_types(CellTypeUtils::list_types(), 1); + EvalFixture::verify<FunInfo>(expr, {FunInfo{false}}, 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<InplaceMapFunction>(); - EXPECT_TRUE(info.empty()); - EXPECT_TRUE(!(fixture.get_param(0) == fixture.result())); + SCOPED_TRACE(expr.c_str()); + CellTypeSpace just_double({CellType::DOUBLE}, 1); + EvalFixture::verify<FunInfo>(expr, {}, just_double); } TEST(MapTest, dense_map_can_be_optimized) { verify_not_optimized("map(x5y3,f(x)(x+10))"); - verify_not_optimized("map(x5y3_f,f(x)(x+10))"); verify_optimized("map(@x5y3,f(x)(x+10))"); - verify_optimized("map(@x5y3_f,f(x)(x+10))"); } TEST(MapTest, scalar_map_is_not_optimized) { - verify_not_optimized("map(a,f(x)(x+10))"); - verify_not_optimized("map(@a,f(x)(x+10))"); + verify_not_optimized("map(@$1,f(x)(x+10))"); } TEST(MapTest, sparse_map_can_be_optimized) { - verify_not_optimized("map(sparse,f(x)(x+10))"); - verify_optimized("map(@sparse,f(x)(x+10))"); + verify_not_optimized("map(x1_1,f(x)(x+10))"); + verify_optimized("map(@x1_1,f(x)(x+10))"); } TEST(MapTest, mixed_map_can_be_optimized) { - verify_not_optimized("map(mixed,f(x)(x+10))"); - verify_optimized("map(@mixed,f(x)(x+10))"); + verify_not_optimized("map(y1_1z2,f(x)(x+10))"); + verify_optimized("map(@y1_1z2,f(x)(x+10))"); +} + +TEST(MapTest, mixed_map_can_be_debug_dumped) { + CellTypeSpace just_double({CellType::DOUBLE}, 1); + EvalFixture::verify<FunInfo>("map(@y1_1z2,f(x)(x+10))", {FunInfo{true}}, just_double); } GTEST_MAIN_RUN_ALL_TESTS() |