blob: f815968a7fcb2ef19fe2df74d572c9fb0de00383 [file] [log] [blame]
Finn Williams2605b232020-06-10 15:53:46 +01001//
2// Copyright © 2020 Arm Ltd and Contributors. All rights reserved.
3// SPDX-License-Identifier: MIT
4//
5
6#include "RankTestImpl.hpp"
7
8#include <backendsCommon/test/DataTypeUtils.hpp>
9#include <backendsCommon/test/TensorCopyUtils.hpp>
10#include <backendsCommon/test/WorkloadTestUtils.hpp>
11
12#include <test/TensorHelpers.hpp>
13
14template<typename T, std::size_t n>
15LayerTestResult<int32_t, 1> RankTest(
16 armnn::TensorInfo inputTensorInfo,
17 boost::multi_array<T, n> input,
18 armnn::IWorkloadFactory& workloadFactory,
19 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
20{
21 IgnoreUnused(memoryManager);
22
23 const armnn::TensorShape outputShape{armnn::Dimensionality::Scalar};
24 armnn::TensorInfo outputTensorInfo(outputShape, armnn::DataType::Signed32);
25
26 LayerTestResult<int32_t , 1> ret(outputTensorInfo);
27 ret.outputExpected = MakeTensor<uint32_t, 1>(outputTensorInfo, { n });
28
Teresa Charlinfbf0e5b2020-08-17 01:01:06 +010029 ARMNN_NO_DEPRECATE_WARN_BEGIN
Finn Williams2605b232020-06-10 15:53:46 +010030 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
31 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
Teresa Charlinfbf0e5b2020-08-17 01:01:06 +010032 ARMNN_NO_DEPRECATE_WARN_END
Finn Williams2605b232020-06-10 15:53:46 +010033
34 armnn::RankQueueDescriptor data;
35 armnn::WorkloadInfo info;
36 AddInputToWorkload(data, info, inputTensorInfo, inputHandle.get());
37 AddOutputToWorkload(data, info, outputTensorInfo, outputHandle.get());
38
39 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateRank(data, info);
40
41 inputHandle->Allocate();
42 outputHandle->Allocate();
43
44 CopyDataToITensorHandle(inputHandle.get(), input.origin());
45
46 workload->Execute();
47
48 CopyDataFromITensorHandle(&ret.output[0], outputHandle.get());
49
50 return ret;
51}
52
53template<armnn::DataType ArmnnType, typename T>
54LayerTestResult<int32_t, 1> RankDimSize1Test(
55 armnn::IWorkloadFactory& workloadFactory,
56 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
57{
58 armnn::TensorInfo inputTensorInfo({6}, ArmnnType, 1.0f, 0);
59 auto input = MakeTensor<T, 1>(inputTensorInfo, ConvertToDataType<ArmnnType>(
60 { -37.5f, -15.2f, -8.76f, -2.0f, -1.3f, -0.5f },
61 inputTensorInfo));
62
63 return RankTest<T, 1>(inputTensorInfo, input, workloadFactory, memoryManager);
64}
65
66template<armnn::DataType ArmnnType, typename T>
67LayerTestResult<int32_t, 1> RankDimSize2Test(
68 armnn::IWorkloadFactory& workloadFactory,
69 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
70{
71 armnn::TensorInfo inputTensorInfo({1, 3}, ArmnnType, 1.0f, 0);
72 auto input = MakeTensor<T, 2>(inputTensorInfo, ConvertToDataType<ArmnnType>(
73 { -37.5f, -15.2f, -8.76f },
74 inputTensorInfo));
75
76 return RankTest<T, 2>(inputTensorInfo, input, workloadFactory, memoryManager);
77}
78
79template<armnn::DataType ArmnnType, typename T>
80LayerTestResult<int32_t, 1> RankDimSize3Test(
81 armnn::IWorkloadFactory& workloadFactory,
82 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
83{
84 armnn::TensorInfo inputTensorInfo({1, 3, 2}, ArmnnType, 1.0f, 0);
85 auto input = MakeTensor<T, 3>(inputTensorInfo, ConvertToDataType<ArmnnType>(
86 { -37.5f, -15.2f, -8.76f, -2.0f, -1.5f, -1.3f},
87 inputTensorInfo));
88
89 return RankTest<T, 3>(inputTensorInfo, input, workloadFactory, memoryManager);
90}
91
92template<armnn::DataType ArmnnType, typename T>
93LayerTestResult<int32_t, 1> RankDimSize4Test(
94 armnn::IWorkloadFactory& workloadFactory,
95 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
96{
97 armnn::TensorInfo inputTensorInfo({1, 3, 2, 3}, ArmnnType, 1.0f, 0);
98 auto input = MakeTensor<T, 4>(inputTensorInfo, ConvertToDataType<ArmnnType>(
99 { -37.5f, -15.2f, -8.76f, -2.0f, -1.5f, -1.3f, -0.5f, -0.4f, 0.0f,
100 1.0f, 0.4f, 0.5f, 1.3f, 1.5f, 2.0f, 8.76f, 15.2f, 37.5f },
101 inputTensorInfo));
102
103 return RankTest<T, 4>(inputTensorInfo, input, workloadFactory, memoryManager);
104}
105
106template LayerTestResult<int32_t, 1>
107RankDimSize4Test<armnn::DataType::Float16>(
108 armnn::IWorkloadFactory& workloadFactory,
109 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
110
111template LayerTestResult<int32_t, 1>
112RankDimSize4Test<armnn::DataType::Float32>(
113 armnn::IWorkloadFactory& workloadFactory,
114 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
115
116template LayerTestResult<int32_t, 1>
117RankDimSize4Test<armnn::DataType::QAsymmU8>(
118 armnn::IWorkloadFactory& workloadFactory,
119 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
120
121template LayerTestResult<int32_t, 1>
122RankDimSize4Test<armnn::DataType::Signed32>(
123 armnn::IWorkloadFactory& workloadFactory,
124 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
125
126template LayerTestResult<int32_t, 1>
127RankDimSize4Test<armnn::DataType::QSymmS16>(
128 armnn::IWorkloadFactory& workloadFactory,
129 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
130
131template LayerTestResult<int32_t, 1>
132RankDimSize4Test<armnn::DataType::QSymmS8>(
133 armnn::IWorkloadFactory& workloadFactory,
134 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
135
136template LayerTestResult<int32_t, 1>
137RankDimSize4Test<armnn::DataType::QAsymmS8>(
138 armnn::IWorkloadFactory& workloadFactory,
139 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
140
141template LayerTestResult<int32_t, 1>
142RankDimSize4Test<armnn::DataType::BFloat16>(
143 armnn::IWorkloadFactory& workloadFactory,
144 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
145
146template LayerTestResult<int32_t, 1>
147RankDimSize3Test<armnn::DataType::Float16>(
148 armnn::IWorkloadFactory& workloadFactory,
149 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
150
151template LayerTestResult<int32_t, 1>
152RankDimSize3Test<armnn::DataType::Float32>(
153 armnn::IWorkloadFactory& workloadFactory,
154 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
155
156template LayerTestResult<int32_t, 1>
157RankDimSize3Test<armnn::DataType::QAsymmU8>(
158 armnn::IWorkloadFactory& workloadFactory,
159 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
160
161template LayerTestResult<int32_t, 1>
162RankDimSize3Test<armnn::DataType::Signed32>(
163 armnn::IWorkloadFactory& workloadFactory,
164 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
165
166template LayerTestResult<int32_t, 1>
167RankDimSize3Test<armnn::DataType::QSymmS16>(
168 armnn::IWorkloadFactory& workloadFactory,
169 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
170
171template LayerTestResult<int32_t, 1>
172RankDimSize3Test<armnn::DataType::QSymmS8>(
173 armnn::IWorkloadFactory& workloadFactory,
174 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
175
176template LayerTestResult<int32_t, 1>
177RankDimSize3Test<armnn::DataType::QAsymmS8>(
178 armnn::IWorkloadFactory& workloadFactory,
179 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
180
181template LayerTestResult<int32_t, 1>
182RankDimSize3Test<armnn::DataType::BFloat16>(
183 armnn::IWorkloadFactory& workloadFactory,
184 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
185
186template LayerTestResult<int32_t, 1>
187RankDimSize2Test<armnn::DataType::Float16>(
188 armnn::IWorkloadFactory& workloadFactory,
189 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
190
191template LayerTestResult<int32_t, 1>
192RankDimSize2Test<armnn::DataType::Float32>(
193 armnn::IWorkloadFactory& workloadFactory,
194 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
195
196template LayerTestResult<int32_t, 1>
197RankDimSize2Test<armnn::DataType::QAsymmU8>(
198 armnn::IWorkloadFactory& workloadFactory,
199 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
200
201template LayerTestResult<int32_t, 1>
202RankDimSize2Test<armnn::DataType::Signed32>(
203 armnn::IWorkloadFactory& workloadFactory,
204 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
205
206template LayerTestResult<int32_t, 1>
207RankDimSize2Test<armnn::DataType::QSymmS16>(
208 armnn::IWorkloadFactory& workloadFactory,
209 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
210
211template LayerTestResult<int32_t, 1>
212RankDimSize2Test<armnn::DataType::QSymmS8>(
213 armnn::IWorkloadFactory& workloadFactory,
214 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
215
216template LayerTestResult<int32_t, 1>
217RankDimSize2Test<armnn::DataType::QAsymmS8>(
218 armnn::IWorkloadFactory& workloadFactory,
219 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
220
221template LayerTestResult<int32_t, 1>
222RankDimSize2Test<armnn::DataType::BFloat16>(
223 armnn::IWorkloadFactory& workloadFactory,
224 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
225
226template LayerTestResult<int32_t, 1>
227RankDimSize1Test<armnn::DataType::Float16>(
228 armnn::IWorkloadFactory& workloadFactory,
229 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
230
231template LayerTestResult<int32_t, 1>
232RankDimSize1Test<armnn::DataType::Float32>(
233 armnn::IWorkloadFactory& workloadFactory,
234 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
235
236template LayerTestResult<int32_t, 1>
237RankDimSize1Test<armnn::DataType::QAsymmU8>(
238 armnn::IWorkloadFactory& workloadFactory,
239 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
240
241template LayerTestResult<int32_t, 1>
242RankDimSize1Test<armnn::DataType::Signed32>(
243 armnn::IWorkloadFactory& workloadFactory,
244 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
245
246template LayerTestResult<int32_t, 1>
247RankDimSize1Test<armnn::DataType::QSymmS16>(
248 armnn::IWorkloadFactory& workloadFactory,
249 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
250
251template LayerTestResult<int32_t, 1>
252RankDimSize1Test<armnn::DataType::QSymmS8>(
253 armnn::IWorkloadFactory& workloadFactory,
254 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
255
256template LayerTestResult<int32_t, 1>
257RankDimSize1Test<armnn::DataType::QAsymmS8>(
258 armnn::IWorkloadFactory& workloadFactory,
259 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
260
261template LayerTestResult<int32_t, 1>
262RankDimSize1Test<armnn::DataType::BFloat16>(
263 armnn::IWorkloadFactory& workloadFactory,
264 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);