summaryrefslogtreecommitdiffstats
path: root/eval/src/tests
diff options
context:
space:
mode:
authorArne Juul <arnej@verizonmedia.com>2021-03-17 12:29:03 +0000
committerArne Juul <arnej@verizonmedia.com>2021-03-17 12:29:03 +0000
commit56f4bd957af84e189b28d89b4cc0b430a172cc75 (patch)
treeb8df14458e64e4608681c9cad6652542d8dcc35c /eval/src/tests
parent9041c2e4664d86ba5458d21ca91f697e7d19c8a1 (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.cpp67
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()