IVGCVSW-1946: Remove armnn/src from the include paths
[platform/upstream/armnn.git] / src / backends / aclCommon / test / MemCopyTestImpl.hpp
1 //
2 // Copyright © 2017 Arm Ltd. All rights reserved.
3 // SPDX-License-Identifier: MIT
4 //
5 #pragma once
6
7 #include <backendsCommon/test/LayerTests.hpp>
8 #include <backendsCommon/test/TensorCopyUtils.hpp>
9 #include <backendsCommon/test/WorkloadTestUtils.hpp>
10
11 #include <test/TensorHelpers.hpp>
12
13 #include <boost/multi_array.hpp>
14
15 namespace
16 {
17
18 LayerTestResult<float, 4> MemCopyTest(armnn::IWorkloadFactory& srcWorkloadFactory,
19                                       armnn::IWorkloadFactory& dstWorkloadFactory,
20                                       bool withSubtensors)
21 {
22     const std::array<unsigned int, 4> shapeData = { { 1u, 1u, 6u, 5u } };
23     const armnn::TensorShape tensorShape(4, shapeData.data());
24     const armnn::TensorInfo tensorInfo(tensorShape, armnn::DataType::Float32);
25     boost::multi_array<float, 4> inputData = MakeTensor<float, 4>(tensorInfo, std::vector<float>(
26         {
27             1.0f, 2.0f, 3.0f, 4.0f, 5.0f,
28
29             6.0f, 7.0f, 8.0f, 9.0f, 10.0f,
30
31             11.0f, 12.0f, 13.0f, 14.0f, 15.0f,
32
33             16.0f, 17.0f, 18.0f, 19.0f, 20.0f,
34
35             21.0f, 22.0f, 23.0f, 24.0f, 25.0f,
36
37             26.0f, 27.0f, 28.0f, 29.0f, 30.0f,
38         })
39     );
40
41     LayerTestResult<float, 4> ret(tensorInfo);
42     ret.outputExpected = inputData;
43
44     boost::multi_array<float, 4> outputData(shapeData);
45
46     auto inputTensorHandle = srcWorkloadFactory.CreateTensorHandle(tensorInfo);
47     auto outputTensorHandle = dstWorkloadFactory.CreateTensorHandle(tensorInfo);
48
49     AllocateAndCopyDataToITensorHandle(inputTensorHandle.get(), inputData.data());
50     outputTensorHandle->Allocate();
51
52     armnn::MemCopyQueueDescriptor memCopyQueueDesc;
53     armnn::WorkloadInfo workloadInfo;
54
55     const unsigned int origin[4] = {};
56
57     auto workloadInput = (withSubtensors && srcWorkloadFactory.SupportsSubTensors())
58                          ? srcWorkloadFactory.CreateSubTensorHandle(*inputTensorHandle, tensorShape, origin)
59                          : std::move(inputTensorHandle);
60     auto workloadOutput = (withSubtensors && dstWorkloadFactory.SupportsSubTensors())
61                           ? dstWorkloadFactory.CreateSubTensorHandle(*outputTensorHandle, tensorShape, origin)
62                           : std::move(outputTensorHandle);
63
64     AddInputToWorkload(memCopyQueueDesc, workloadInfo, tensorInfo, workloadInput.get());
65     AddOutputToWorkload(memCopyQueueDesc, workloadInfo, tensorInfo, workloadOutput.get());
66
67     dstWorkloadFactory.CreateMemCopy(memCopyQueueDesc, workloadInfo)->Execute();
68
69     CopyDataFromITensorHandle(outputData.data(), workloadOutput.get());
70     ret.output = outputData;
71
72     return ret;
73 }
74
75 template<typename SrcWorkloadFactory, typename DstWorkloadFactory>
76 LayerTestResult<float, 4> MemCopyTest(bool withSubtensors)
77 {
78     SrcWorkloadFactory srcWorkloadFactory;
79     DstWorkloadFactory dstWorkloadFactory;
80
81     return MemCopyTest(srcWorkloadFactory, dstWorkloadFactory, withSubtensors);
82 }
83
84 } // anonymous namespace