diff options
author | Arne Juul <arnej@verizonmedia.com> | 2020-10-19 10:55:59 +0000 |
---|---|---|
committer | Arne Juul <arnej@verizonmedia.com> | 2020-10-19 11:47:46 +0000 |
commit | 7904d8f406805c473b2bf2d324102d1ee4937232 (patch) | |
tree | 5b38b3716e79c252ebb2d2c0abcdeba870000c99 /eval | |
parent | 0dd7e0c9bf218006465a4713f0d642f8575e53fd (diff) |
test immediate forms
Diffstat (limited to 'eval')
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() |