201 lines
9.2 KiB
C++
201 lines
9.2 KiB
C++
// Copyright (C) 2021 Intel Corporation
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
//
|
|
|
|
#include "gtest/gtest.h"
|
|
#include "ngraph/ngraph.hpp"
|
|
#include "util/ndarray.hpp"
|
|
#include "util/test_case.hpp"
|
|
#include "util/engine/test_engines.hpp"
|
|
#include "util/test_control.hpp"
|
|
|
|
using namespace std;
|
|
using namespace ngraph;
|
|
|
|
static string s_manifest = "${MANIFEST}";
|
|
using TestEngine = test::ENGINE_CLASS_NAME(${BACKEND_NAME});
|
|
|
|
namespace
|
|
{
|
|
template<typename dataType>
|
|
struct BatchToSpaceParams
|
|
{
|
|
using Data = test::NDArrayBase<dataType>;
|
|
using BlockShape = test::NDArrayBase<int64_t>;
|
|
using Crops = test::NDArrayBase<int64_t>;
|
|
|
|
BatchToSpaceParams(Data in_data,
|
|
BlockShape block_shape,
|
|
Crops crops_begin,
|
|
Crops crops_end,
|
|
Data expected_output)
|
|
: m_data{std::move(in_data)}
|
|
, m_block_shape{std::move(block_shape)}
|
|
, m_crops_begin{std::move(crops_begin)}
|
|
, m_crops_end{std::move(crops_end)}
|
|
, m_expected_output{std::move(expected_output)}
|
|
{
|
|
}
|
|
|
|
Data m_data;
|
|
BlockShape m_block_shape;
|
|
Crops m_crops_begin;
|
|
Crops m_crops_end;
|
|
Data m_expected_output;
|
|
};
|
|
|
|
template <typename dataType>
|
|
static void BatchToSpaceTestExecute(const BatchToSpaceParams<dataType>& params)
|
|
{
|
|
const auto data =
|
|
make_shared<op::Parameter>(element::from<dataType>(), params.m_data.get_shape());
|
|
|
|
const auto block_shape = op::Constant::create(
|
|
element::i64, params.m_block_shape.get_shape(), params.m_block_shape.get_vector());
|
|
|
|
const auto crops_begin = op::Constant::create(
|
|
element::i64, params.m_crops_begin.get_shape(), params.m_crops_begin.get_vector());
|
|
|
|
const auto crops_end = op::Constant::create(
|
|
element::i64, params.m_crops_end.get_shape(), params.m_crops_end.get_vector());
|
|
|
|
const auto batch_to_space =
|
|
make_shared<op::v1::BatchToSpace>(data, block_shape, crops_begin, crops_end);
|
|
|
|
auto f = make_shared<Function>(batch_to_space, ParameterVector{data});
|
|
auto test_case = test::TestCase<TestEngine>(f);
|
|
test_case.add_input(params.m_data.get_vector());
|
|
test_case.add_expected_output(params.m_expected_output.get_vector());
|
|
test_case.run_with_tolerance_as_fp(1e-4f);
|
|
}
|
|
|
|
class BatchToSpaceTestFloat : public testing::TestWithParam<BatchToSpaceParams<float>>
|
|
{
|
|
};
|
|
} // namespace
|
|
|
|
NGRAPH_TEST_P(${BACKEND_NAME}, BatchToSpaceTestFloat, BatchToSpaceTestFloatCases)
|
|
{
|
|
BatchToSpaceTestExecute(GetParam());
|
|
}
|
|
|
|
const test::NDArray<float, 2> input_with_shape_4x3(
|
|
{{1.0f, 2.0f, 3.0f},
|
|
{4.0f, 5.0f, 6.0f},
|
|
{7.0f, 8.0f, 9.0f},
|
|
{10.0f, 11.0f, 12.0f}});
|
|
|
|
const test::NDArray<int64_t, 1> zero_crops_2d({0, 0});
|
|
|
|
NGRAPH_INSTANTIATE_TEST_SUITE_P(
|
|
${BACKEND_NAME},
|
|
batch_to_space_2d_without_crops,
|
|
BatchToSpaceTestFloat,
|
|
testing::Values(
|
|
BatchToSpaceParams<float>{input_with_shape_4x3,
|
|
test::NDArray<int64_t, 1>({1, 2}),
|
|
zero_crops_2d,
|
|
zero_crops_2d,
|
|
test::NDArray<float, 2>(
|
|
{{1.0f, 7.0f, 2.0f, 8.0f, 3.0f, 9.0f},
|
|
{4.0f, 10.0f, 5.0f, 11.0f, 6.0f, 12.0f}})}));
|
|
|
|
const test::NDArray<float, 4> input_with_shape_4x1x1x3(
|
|
{{{{1.0f, 2.0f, 3.0f}}},
|
|
{{{4.0f, 5.0f, 6.0f}}},
|
|
{{{7.0f, 8.0f, 9.0f}}},
|
|
{{{10.0f, 11.0f, 12.0f}}}});
|
|
|
|
const test::NDArray<float, 4> input_with_shape_4x1x2x3(
|
|
{{{{1.0f, 2.0f, 3.0f}, {4.0f, 5.0f, 6.0f}}},
|
|
{{{7.0f, 8.0f, 9.0f}, {10.0f, 11.0f, 12.0f}}},
|
|
{{{13.0f, 14.0f, 15.0f}, {16.0f, 17.0f, 18.0f}}},
|
|
{{{19.0f, 20.0f, 21.0f}, {22.0f, 23.0f, 24.0f}}}});
|
|
|
|
const test::NDArray<int64_t, 1> zero_crops_4d({0, 0, 0, 0});
|
|
|
|
NGRAPH_INSTANTIATE_TEST_SUITE_P(
|
|
${BACKEND_NAME},
|
|
batch_to_space_4d_without_crops,
|
|
BatchToSpaceTestFloat,
|
|
testing::Values(
|
|
BatchToSpaceParams<float>{input_with_shape_4x1x1x3,
|
|
test::NDArray<int64_t, 1>({1, 1, 1, 2}),
|
|
zero_crops_4d,
|
|
zero_crops_4d,
|
|
test::NDArray<float, 4>(
|
|
{{{{1.0f, 7.0f, 2.0f, 8.0f, 3.0f, 9.0f}}},
|
|
{{{4.0f, 10.0f, 5.0f, 11.0f, 6.0f, 12.0f}}}})},
|
|
BatchToSpaceParams<float>{input_with_shape_4x1x1x3,
|
|
test::NDArray<int64_t, 1>({1, 1, 2, 1}),
|
|
zero_crops_4d,
|
|
zero_crops_4d,
|
|
test::NDArray<float, 4>(
|
|
{{{{1.0f, 2.0f, 3.0f}, {7.0f, 8.0f, 9.0f}}},
|
|
{{{4.0f, 5.0f, 6.0f}, {10.0f, 11.0f, 12.0f}}}})},
|
|
BatchToSpaceParams<float>{input_with_shape_4x1x1x3,
|
|
test::NDArray<int64_t, 1>({1, 1, 2, 2}),
|
|
zero_crops_4d,
|
|
zero_crops_4d,
|
|
test::NDArray<float, 4>(
|
|
{{{{1.0f, 4.0f, 2.0f, 5.0f, 3.0f, 6.0f},
|
|
{7.0f, 10.0f, 8.0f, 11.0f, 9.0f, 12.0f}}}})},
|
|
BatchToSpaceParams<float>{input_with_shape_4x1x2x3,
|
|
test::NDArray<int64_t, 1>({1, 1, 1, 2}),
|
|
zero_crops_4d,
|
|
zero_crops_4d,
|
|
test::NDArray<float, 4>(
|
|
{{{{1.0f, 13.0f, 2.0f, 14.0f, 3.0f, 15.0f},
|
|
{4.0f, 16.0f, 5.0f, 17.0f, 6.0f, 18.0f}}},
|
|
{{{7.0f, 19.0f, 8.0f, 20.0f, 9.0f, 21.0f},
|
|
{10.0f, 22.0f, 11.0f, 23.0f, 12.0f, 24.0f}}}})},
|
|
BatchToSpaceParams<float>{input_with_shape_4x1x2x3,
|
|
test::NDArray<int64_t, 1>({1, 1, 2, 1}),
|
|
zero_crops_4d,
|
|
zero_crops_4d,
|
|
test::NDArray<float, 4>(
|
|
{{{{1.0f, 2.0f, 3.0f}, {13.0f, 14.0f, 15.0f},
|
|
{4.0f, 5.0f, 6.0f}, {16.0f, 17.0f, 18.0f}}},
|
|
{{{7.0f, 8.0f, 9.0f}, {19.0f, 20.0f, 21.0f},
|
|
{10.0f, 11.0f, 12.0f}, {22.0f, 23.0f, 24.0f}}}})},
|
|
BatchToSpaceParams<float>{input_with_shape_4x1x2x3,
|
|
test::NDArray<int64_t, 1>({1, 1, 2, 2}),
|
|
zero_crops_4d,
|
|
zero_crops_4d,
|
|
test::NDArray<float, 4>(
|
|
{{{{1.0f, 7.0f, 2.0f, 8.0f, 3.0f, 9.0f},
|
|
{13.0f, 19.0f, 14.0f, 20.0f, 15.0f, 21.0f},
|
|
{4.0f, 10.0f, 5.0f, 11.0f, 6.0f, 12.0f},
|
|
{16.0f, 22.0f, 17.0f, 23.0f, 18.0f, 24.0f}}}})}));
|
|
|
|
NGRAPH_INSTANTIATE_TEST_SUITE_P(
|
|
${BACKEND_NAME},
|
|
batch_to_space_4d_crops,
|
|
BatchToSpaceTestFloat,
|
|
testing::Values(
|
|
BatchToSpaceParams<float>{input_with_shape_4x1x2x3,
|
|
test::NDArray<int64_t, 1>({1, 1, 2, 2}),
|
|
test::NDArray<int64_t, 1>({0, 0, 0, 0}),
|
|
test::NDArray<int64_t, 1>({0, 0, 0, 2}),
|
|
test::NDArray<float, 4>(
|
|
{{{{1.0f, 7.0f, 2.0f, 8.0f},
|
|
{13.0f, 19.0f, 14.0f, 20.0f},
|
|
{4.0f, 10.0f, 5.0f, 11.0f},
|
|
{16.0f, 22.0f, 17.0f, 23.0f}}}})},
|
|
BatchToSpaceParams<float>{input_with_shape_4x1x2x3,
|
|
test::NDArray<int64_t, 1>({1, 1, 2, 2}),
|
|
test::NDArray<int64_t, 1>({0, 0, 0, 2}),
|
|
test::NDArray<int64_t, 1>({0, 0, 0, 0}),
|
|
test::NDArray<float, 4>(
|
|
{{{{2.0f, 8.0f, 3.0f, 9.0f},
|
|
{14.0f, 20.0f, 15.0f, 21.0f},
|
|
{5.0f, 11.0f, 6.0f, 12.0f},
|
|
{17.0f, 23.0f, 18.0f, 24.0f}}}})},
|
|
BatchToSpaceParams<float>{input_with_shape_4x1x2x3,
|
|
test::NDArray<int64_t, 1>({1, 1, 2, 2}),
|
|
test::NDArray<int64_t, 1>({0, 0, 1, 0}),
|
|
test::NDArray<int64_t, 1>({0, 0, 1, 0}),
|
|
test::NDArray<float, 4>(
|
|
{{{{13.0f, 19.0f, 14.0f, 20.0f, 15.0f, 21.0f},
|
|
{4.0f, 10.0f, 5.0f, 11.0f, 6.0f, 12.0f}}}})}));
|