summaryrefslogtreecommitdiffstats
path: root/eval
diff options
context:
space:
mode:
authorArne Juul <arnej@verizonmedia.com>2021-03-17 13:31:15 +0000
committerArne Juul <arnej@verizonmedia.com>2021-03-17 13:31:15 +0000
commit075e5bbae3f03b4971409e96e805121d298ec207 (patch)
tree7003130ce0c78f6daf151e33913730ccf3d794ab /eval
parent39a6d558b97ff5931418314244f03196f699f40a (diff)
rewrite PowAsMapOptimizer test
Diffstat (limited to 'eval')
-rw-r--r--eval/src/tests/instruction/pow_as_map_optimizer/pow_as_map_optimizer_test.cpp72
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()