diff options
Diffstat (limited to 'src/backends/backendsCommon/test/BatchToSpaceNdEndToEndTestImpl.hpp')
-rw-r--r-- | src/backends/backendsCommon/test/BatchToSpaceNdEndToEndTestImpl.hpp | 119 |
1 files changed, 119 insertions, 0 deletions
diff --git a/src/backends/backendsCommon/test/BatchToSpaceNdEndToEndTestImpl.hpp b/src/backends/backendsCommon/test/BatchToSpaceNdEndToEndTestImpl.hpp new file mode 100644 index 0000000000..d1be409480 --- /dev/null +++ b/src/backends/backendsCommon/test/BatchToSpaceNdEndToEndTestImpl.hpp @@ -0,0 +1,119 @@ +// +// Copyright © 2017 Arm Ltd. All rights reserved. +// SPDX-License-Identifier: MIT +// +#pragma once + +#include <ResolveType.hpp> + +#include <armnn/INetwork.hpp> + +#include <backendsCommon/test/CommonTestUtils.hpp> + +#include <boost/test/unit_test.hpp> + +#include <vector> + +namespace +{ + +template<typename armnn::DataType DataType> +INetworkPtr CreateBatchToSpaceNdNetwork(const armnn::TensorShape& inputShape, + const armnn::TensorShape& outputShape, + std::vector<unsigned int>& blockShape, + std::vector<std::pair<unsigned int, unsigned int>>& crops, + armnn::DataLayout dataLayout, + const float qScale = 1.0f, + const int32_t qOffset = 0) +{ + using namespace armnn; + // Builds up the structure of the network. + INetworkPtr net(INetwork::Create()); + + TensorInfo inputTensorInfo(inputShape, DataType, qScale, qOffset); + TensorInfo outputTensorInfo(outputShape, DataType, qScale, qOffset); + + BatchToSpaceNdDescriptor batchToSpaceNdDesc(blockShape, crops); + batchToSpaceNdDesc.m_DataLayout = dataLayout; + + IConnectableLayer* batchToSpaceNd = net->AddBatchToSpaceNdLayer(batchToSpaceNdDesc, "batchToSpaceNd"); + IConnectableLayer* input = net->AddInputLayer(0, "input"); + IConnectableLayer* output = net->AddOutputLayer(0, "output"); + + Connect(batchToSpaceNd, output, outputTensorInfo, 0, 0); + Connect(input, batchToSpaceNd, inputTensorInfo, 0, 0); + + return net; +} + +template<armnn::DataType ArmnnType> +void BatchToSpaceNdEndToEnd(const std::vector<BackendId>& backends, armnn::DataLayout dataLayout) +{ + using namespace armnn; + using T = ResolveType<ArmnnType>; + + std::vector<unsigned int> blockShape {2, 2}; + std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {0, 0}}; + const TensorShape& inputShape = { 4, 1, 1, 1 }; + const TensorShape& outputShape = (dataLayout == DataLayout::NCHW) + ? std::initializer_list<unsigned int>({ 1, 1, 2, 2 }) + : std::initializer_list<unsigned int>({ 1, 2, 2, 1 }); + + // Builds up the structure of the network + INetworkPtr net = CreateBatchToSpaceNdNetwork<ArmnnType>(inputShape, outputShape, blockShape, crops, dataLayout); + + BOOST_TEST_CHECKPOINT("create a network"); + + // Creates structures for input & output. + std::vector<T> inputData{ 1, 2, 3, 4 }; + + std::vector<T> expectedOutput{ 1, 2, 3, 4 }; + + std::map<int, std::vector<T>> inputTensorData = { { 0, inputData } }; + std::map<int, std::vector<T>> expectedOutputData = { { 0, expectedOutput } }; + + EndToEndLayerTestImpl<ArmnnType, ArmnnType>(move(net), inputTensorData, expectedOutputData, backends); +} + +template<armnn::DataType ArmnnType> +void BatchToSpaceNdComplexEndToEnd(const std::vector<BackendId>& backends, armnn::DataLayout dataLayout) +{ + using namespace armnn; + using T = ResolveType<ArmnnType>; + + std::vector<unsigned int> blockShape {2, 2}; + std::vector<std::pair<unsigned int, unsigned int>> crops = {{0, 0}, {2, 0}}; + const TensorShape& inputShape = (dataLayout == DataLayout::NCHW) + ? std::initializer_list<unsigned int>({ 8, 1, 1, 3 }) + : std::initializer_list<unsigned int>({ 8, 1, 3, 1 }); + const TensorShape& outputShape = (dataLayout == DataLayout::NCHW) + ? std::initializer_list<unsigned int>({ 2, 1, 2, 4 }) + : std::initializer_list<unsigned int>({ 2, 2, 4, 1 }); + + // Builds up the structure of the network + INetworkPtr net = CreateBatchToSpaceNdNetwork<ArmnnType>(inputShape, outputShape, blockShape, crops, dataLayout); + + BOOST_TEST_CHECKPOINT("create a network"); + + // Creates structures for input & output. + std::vector<T> inputData{ + 0, 1, 3, 0, 9, 11, + 0, 2, 4, 0, 10, 12, + 0, 5, 7, 0, 13, 15, + 0, 6, 8, 0, 14, 16 + }; + + std::vector<T> expectedOutput{ + 1, 2, 3, 4, + 5, 6, 7, 8, + 9, 10, 11, 12, + 13, 14, 15, 16 + }; + + std::map<int, std::vector<T>> inputTensorData = { { 0, inputData } }; + std::map<int, std::vector<T>> expectedOutputData = { { 0, expectedOutput } }; + + EndToEndLayerTestImpl<ArmnnType, ArmnnType>(move(net), inputTensorData, expectedOutputData, backends); +} + +} // anonymous namespace |