// Copyright (C) 2018-2021 Intel Corporation // SPDX-License-Identifier: Apache-2.0 // #include "engines_util/execute_tools.hpp" #include "gtest/gtest.h" #include "ngraph/ngraph.hpp" #include "ngraph/runtime/tensor.hpp" #include "runtime/backend.hpp" #include "util/all_close.hpp" #include "util/all_close_f.hpp" #include "util/ndarray.hpp" #include "util/test_control.hpp" using namespace std; using namespace ngraph; static string s_manifest = "${MANIFEST}"; NGRAPH_TEST(${BACKEND_NAME}, shape_of_scalar_v0) { Shape input_shape{}; Shape output_shape{0}; auto A = std::make_shared(element::f32, input_shape); auto f = std::make_shared(std::make_shared(A), ParameterVector{A}); auto backend = runtime::Backend::create("${BACKEND_NAME}"); auto a = backend->create_tensor(element::f32, input_shape); copy_data(a, vector{0}); auto result = backend->create_tensor(element::i64, output_shape); auto handle = backend->compile(f); handle->call_with_validate({result}, {a}); vector expected{}; EXPECT_EQ(expected, read_vector(result)); } NGRAPH_TEST(${BACKEND_NAME}, shape_of_scalar_v3) { Shape input_shape{}; Shape output_shape{0}; auto A = std::make_shared(element::f32, input_shape); auto f = std::make_shared( OutputVector{std::make_shared(A), std::make_shared(A, element::i32)}, ParameterVector{A}); auto backend = runtime::Backend::create("${BACKEND_NAME}"); auto a = backend->create_tensor(element::f32, input_shape); copy_data(a, vector{0}); auto result64 = backend->create_tensor(element::i64, output_shape); auto result32 = backend->create_tensor(element::i32, output_shape); auto handle = backend->compile(f); handle->call_with_validate({result64, result32}, {a}); vector expected64{}; vector expected32{}; EXPECT_EQ(expected64, read_vector(result64)); EXPECT_EQ(expected32, read_vector(result32)); } NGRAPH_TEST(${BACKEND_NAME}, shape_of_vector_v0) { Shape input_shape{2}; Shape output_shape{1}; auto A = std::make_shared(element::f32, input_shape); auto f = std::make_shared(std::make_shared(A), ParameterVector{A}); auto backend = runtime::Backend::create("${BACKEND_NAME}"); auto a = backend->create_tensor(element::f32, input_shape); copy_data(a, vector(2, 0)); auto result = backend->create_tensor(element::i64, output_shape); auto handle = backend->compile(f); handle->call_with_validate({result}, {a}); vector expected{2}; EXPECT_EQ(expected, read_vector(result)); } NGRAPH_TEST(${BACKEND_NAME}, shape_of_vector_v3) { Shape input_shape{2}; Shape output_shape{1}; auto A = std::make_shared(element::f32, input_shape); auto f = std::make_shared( OutputVector{std::make_shared(A), std::make_shared(A, element::i32)}, ParameterVector{A}); auto backend = runtime::Backend::create("${BACKEND_NAME}"); auto a = backend->create_tensor(element::f32, input_shape); copy_data(a, vector{2, 0}); auto result64 = backend->create_tensor(element::i64, output_shape); auto result32 = backend->create_tensor(element::i32, output_shape); auto handle = backend->compile(f); handle->call_with_validate({result64, result32}, {a}); vector expected64{2}; vector expected32{2}; EXPECT_EQ(expected64, read_vector(result64)); EXPECT_EQ(expected32, read_vector(result32)); } NGRAPH_TEST(${BACKEND_NAME}, shape_of_matrix_v0) { Shape input_shape{2, 4}; Shape output_shape{2}; auto A = std::make_shared(element::f32, input_shape); auto f = std::make_shared(std::make_shared(A), ParameterVector{A}); auto backend = runtime::Backend::create("${BACKEND_NAME}"); auto a = backend->create_tensor(element::f32, input_shape); copy_data(a, vector(2 * 4, 0)); auto result = backend->create_tensor(element::i64, output_shape); auto handle = backend->compile(f); handle->call_with_validate({result}, {a}); vector expected{2, 4}; EXPECT_EQ(expected, read_vector(result)); } NGRAPH_TEST(${BACKEND_NAME}, shape_of_matrix_v3) { Shape input_shape{2, 4}; Shape output_shape{2}; auto A = std::make_shared(element::f32, input_shape); auto f = std::make_shared( OutputVector{std::make_shared(A), std::make_shared(A, element::i32)}, ParameterVector{A}); auto backend = runtime::Backend::create("${BACKEND_NAME}"); auto a = backend->create_tensor(element::f32, input_shape); copy_data(a, vector(2 * 4, 0)); auto result64 = backend->create_tensor(element::i64, output_shape); auto result32 = backend->create_tensor(element::i32, output_shape); auto handle = backend->compile(f); handle->call_with_validate({result64, result32}, {a}); vector expected64{2, 4}; vector expected32{2, 4}; EXPECT_EQ(expected64, read_vector(result64)); EXPECT_EQ(expected32, read_vector(result32)); } NGRAPH_TEST(${BACKEND_NAME}, shape_of_5d_v0) { Shape input_shape{2, 4, 8, 16, 32}; Shape output_shape{5}; auto A = std::make_shared(element::f32, input_shape); auto f = std::make_shared(std::make_shared(A), ParameterVector{A}); auto backend = runtime::Backend::create("${BACKEND_NAME}"); auto a = backend->create_tensor(element::f32, input_shape); copy_data(a, vector(2 * 4 * 8 * 16 * 32, 0)); auto result = backend->create_tensor(element::i64, output_shape); auto handle = backend->compile(f); handle->call_with_validate({result}, {a}); vector expected{2, 4, 8, 16, 32}; EXPECT_EQ(expected, read_vector(result)); } NGRAPH_TEST(${BACKEND_NAME}, shape_of_5d_v3) { Shape input_shape{2, 4, 8, 16, 32}; Shape output_shape{5}; auto A = std::make_shared(element::f32, input_shape); auto f = std::make_shared( OutputVector{std::make_shared(A), std::make_shared(A, element::i32)}, ParameterVector{A}); auto backend = runtime::Backend::create("${BACKEND_NAME}"); auto a = backend->create_tensor(element::f32, input_shape); copy_data(a, vector(2 * 4 * 8 * 16 * 32, 0)); auto result64 = backend->create_tensor(element::i64, output_shape); auto result32 = backend->create_tensor(element::i32, output_shape); auto handle = backend->compile(f); handle->call_with_validate({result64, result32}, {a}); vector expected64{2, 4, 8, 16, 32}; vector expected32{2, 4, 8, 16, 32}; EXPECT_EQ(expected64, read_vector(result64)); EXPECT_EQ(expected32, read_vector(result32)); }