summaryrefslogtreecommitdiffstats
path: root/eval
diff options
context:
space:
mode:
authorArne Juul <arnej@verizonmedia.com>2020-10-19 10:55:59 +0000
committerArne Juul <arnej@verizonmedia.com>2020-10-19 11:47:46 +0000
commit7904d8f406805c473b2bf2d324102d1ee4937232 (patch)
tree5b38b3716e79c252ebb2d2c0abcdeba870000c99 /eval
parent0dd7e0c9bf218006465a4713f0d642f8575e53fd (diff)
test immediate forms
Diffstat (limited to 'eval')
-rw-r--r--eval/src/tests/instruction/generic_concat/generic_concat_test.cpp20
-rw-r--r--eval/src/tests/instruction/generic_join/generic_join_test.cpp22
-rw-r--r--eval/src/tests/instruction/generic_merge/generic_merge_test.cpp22
-rw-r--r--eval/src/tests/instruction/generic_reduce/generic_reduce_test.cpp24
-rw-r--r--eval/src/tests/instruction/generic_rename/generic_rename_test.cpp25
5 files changed, 113 insertions, 0 deletions
diff --git a/eval/src/tests/instruction/generic_concat/generic_concat_test.cpp b/eval/src/tests/instruction/generic_concat/generic_concat_test.cpp
index b48c1e2253c..675aa36d63a 100644
--- a/eval/src/tests/instruction/generic_concat/generic_concat_test.cpp
+++ b/eval/src/tests/instruction/generic_concat/generic_concat_test.cpp
@@ -177,4 +177,24 @@ TEST(GenericConcatTest, dense_concat_plan_can_be_created) {
EXPECT_EQ(plan.right.out_stride, expect_right_out_s);
}
+TensorSpec immediate_generic_concat(const TensorSpec &a, const TensorSpec &b, const std::string &concat_dim) {
+ const auto &factory = SimpleValueBuilderFactory::get();
+ auto lhs = value_from_spec(a, factory);
+ auto rhs = value_from_spec(b, factory);
+ auto up = GenericConcat::perform_concat(*lhs, *rhs, concat_dim, factory);
+ return spec_from_value(*up);
+}
+
+TEST(GenericConcatTest, immediate_generic_concat_works) {
+ ASSERT_TRUE((concat_layouts.size() % 2) == 0);
+ for (size_t i = 0; i < concat_layouts.size(); i += 2) {
+ const TensorSpec lhs = spec(concat_layouts[i], N());
+ const TensorSpec rhs = spec(concat_layouts[i + 1], Div16(N()));
+ SCOPED_TRACE(fmt("\n===\nin LHS: %s\nin RHS: %s\n===\n", lhs.to_string().c_str(), rhs.to_string().c_str()));
+ auto actual = immediate_generic_concat(lhs, rhs, "y");
+ auto expect = reference_concat(lhs, rhs, "y");
+ EXPECT_EQ(actual, expect);
+ }
+}
+
GTEST_MAIN_RUN_ALL_TESTS()
diff --git a/eval/src/tests/instruction/generic_join/generic_join_test.cpp b/eval/src/tests/instruction/generic_join/generic_join_test.cpp
index 82696bbbd5e..cf04b2ca990 100644
--- a/eval/src/tests/instruction/generic_join/generic_join_test.cpp
+++ b/eval/src/tests/instruction/generic_join/generic_join_test.cpp
@@ -148,4 +148,26 @@ TEST(GenericJoinTest, generic_join_works_for_simple_and_fast_values) {
}
}
+TensorSpec immediate_generic_join(const TensorSpec &a, const TensorSpec &b, join_fun_t function) {
+ const auto &factory = SimpleValueBuilderFactory::get();
+ auto lhs = value_from_spec(a, factory);
+ auto rhs = value_from_spec(b, factory);
+ auto up = GenericJoin::perform_join(*lhs, *rhs, function, factory);
+ return spec_from_value(*up);
+}
+
+TEST(GenericJoinTest, immediate_generic_join_works) {
+ ASSERT_TRUE((join_layouts.size() % 2) == 0);
+ for (size_t i = 0; i < join_layouts.size(); i += 2) {
+ TensorSpec lhs = spec(join_layouts[i], Div16(N()));
+ TensorSpec rhs = spec(join_layouts[i + 1], Div16(N()));
+ for (auto fun: {operation::Add::f, operation::Sub::f, operation::Mul::f, operation::Div::f}) {
+ SCOPED_TRACE(fmt("\n===\nLHS: %s\nRHS: %s\n===\n", lhs.to_string().c_str(), rhs.to_string().c_str()));
+ auto expect = reference_join(lhs, rhs, fun);
+ auto actual = immediate_generic_join(lhs, rhs, fun);
+ EXPECT_EQ(actual, expect);
+ }
+ }
+}
+
GTEST_MAIN_RUN_ALL_TESTS()
diff --git a/eval/src/tests/instruction/generic_merge/generic_merge_test.cpp b/eval/src/tests/instruction/generic_merge/generic_merge_test.cpp
index ae2e100176b..fd9b8513acb 100644
--- a/eval/src/tests/instruction/generic_merge/generic_merge_test.cpp
+++ b/eval/src/tests/instruction/generic_merge/generic_merge_test.cpp
@@ -79,4 +79,26 @@ TEST(GenericMergeTest, generic_merge_works_for_simple_values) {
}
}
+TensorSpec immediate_generic_merge(const TensorSpec &a, const TensorSpec &b, join_fun_t fun) {
+ const auto &factory = SimpleValueBuilderFactory::get();
+ auto lhs = value_from_spec(a, factory);
+ auto rhs = value_from_spec(b, factory);
+ auto up = GenericMerge::perform_merge(*lhs, *rhs, fun, factory);
+ return spec_from_value(*up);
+}
+
+TEST(GenericMergeTest, immediate_generic_merge_works) {
+ ASSERT_TRUE((merge_layouts.size() % 2) == 0);
+ for (size_t i = 0; i < merge_layouts.size(); i += 2) {
+ TensorSpec lhs = spec(merge_layouts[i], N());
+ TensorSpec rhs = spec(merge_layouts[i + 1], Div16(N()));
+ SCOPED_TRACE(fmt("\n===\nLHS: %s\nRHS: %s\n===\n", lhs.to_string().c_str(), rhs.to_string().c_str()));
+ for (auto fun: {operation::Add::f, operation::Mul::f, operation::Sub::f, operation::Max::f}) {
+ auto expect = reference_merge(lhs, rhs, fun);
+ auto actual = immediate_generic_merge(lhs, rhs, fun);
+ EXPECT_EQ(actual, expect);
+ }
+ }
+}
+
GTEST_MAIN_RUN_ALL_TESTS()
diff --git a/eval/src/tests/instruction/generic_reduce/generic_reduce_test.cpp b/eval/src/tests/instruction/generic_reduce/generic_reduce_test.cpp
index 1329ad549c5..490055bf02f 100644
--- a/eval/src/tests/instruction/generic_reduce/generic_reduce_test.cpp
+++ b/eval/src/tests/instruction/generic_reduce/generic_reduce_test.cpp
@@ -110,4 +110,28 @@ TEST(GenericReduceTest, generic_reduce_works_for_simple_values) {
}
}
+TensorSpec immediate_generic_reduce(const TensorSpec &a, const std::vector<vespalib::string> &dims, Aggr aggr) {
+ const auto &factory = SimpleValueBuilderFactory::get();
+ auto lhs = value_from_spec(a, factory);
+ auto up = GenericReduce::perform_reduce(*lhs, aggr, dims, factory);
+ return spec_from_value(*up);
+}
+
+TEST(GenericReduceTest, immediate_generic_reduce_works) {
+ for (const Layout &layout: layouts) {
+ TensorSpec input = spec(layout, Div16(N()));
+ for (Aggr aggr: {Aggr::SUM, Aggr::AVG, Aggr::MIN, Aggr::MAX}) {
+ for (const Domain &domain: layout) {
+ auto expect = reference_reduce(input, {domain.dimension}, aggr);
+ auto actual = immediate_generic_reduce(input, {domain.dimension}, aggr);
+ EXPECT_EQ(actual, expect);
+ }
+ auto expect = reference_reduce(input, {}, aggr);
+ auto actual = immediate_generic_reduce(input, {}, aggr);
+ EXPECT_EQ(actual, expect);
+ }
+ }
+}
+
+
GTEST_MAIN_RUN_ALL_TESTS()
diff --git a/eval/src/tests/instruction/generic_rename/generic_rename_test.cpp b/eval/src/tests/instruction/generic_rename/generic_rename_test.cpp
index 3f151af1fd6..124462f0e0f 100644
--- a/eval/src/tests/instruction/generic_rename/generic_rename_test.cpp
+++ b/eval/src/tests/instruction/generic_rename/generic_rename_test.cpp
@@ -142,4 +142,29 @@ TEST(GenericRenameTest, generic_rename_works_for_simple_values) {
test_generic_rename(SimpleValueBuilderFactory::get());
}
+TensorSpec immediate_generic_rename(const TensorSpec &a, const FromTo &ft)
+{
+ auto &factory = SimpleValueBuilderFactory::get();
+ auto lhs = value_from_spec(a, factory);
+ auto up = GenericRename::perform_rename(*lhs, ft.from, ft.to, factory);
+ return spec_from_value(*up);
+}
+
+TEST(GenericRenameTest, immediate_generic_rename_works) {
+ for (const auto & layout : rename_layouts) {
+ TensorSpec lhs = spec(layout, N());
+ ValueType lhs_type = ValueType::from_spec(lhs.type());
+ // printf("lhs_type: %s\n", lhs_type.to_spec().c_str());
+ for (const auto & from_to : rename_from_to) {
+ ValueType renamed_type = lhs_type.rename(from_to.from, from_to.to);
+ if (renamed_type.is_error()) continue;
+ // printf("type %s -> %s\n", lhs_type.to_spec().c_str(), renamed_type.to_spec().c_str());
+ SCOPED_TRACE(fmt("\n===\nLHS: %s\n===\n", lhs.to_string().c_str()));
+ auto expect = reference_rename(lhs, from_to);
+ auto actual = immediate_generic_rename(lhs, from_to);
+ EXPECT_EQ(actual, expect);
+ }
+ }
+}
+
GTEST_MAIN_RUN_ALL_TESTS()