blob: 144bf9e8e18a5fdaa4cd1f0c35b28ee93306c5e3 [file] [log] [blame]
Tianle Cheng988354d2023-06-28 13:20:47 +01001//
2// Copyright © 2023 Arm Ltd and Contributors. All rights reserved.
3// SPDX-License-Identifier: MIT
4//
5
6#include "ReverseV2TestImpl.hpp"
7
8#include <armnn/backends/IBackendInternal.hpp>
9#include <armnn/backends/Workload.hpp>
10#include <armnn/backends/WorkloadData.hpp>
11#include <armnn/backends/WorkloadFactory.hpp>
12
13#include <armnnTestUtils/WorkloadTestUtils.hpp>
14#include <armnnUtils/QuantizeHelper.hpp>
15#include <armnnTestUtils/TensorCopyUtils.hpp>
16#include <armnn/Optional.hpp>
17#include <armnn/BackendHelper.hpp>
18
19namespace
20{
Tianle Cheng21a9f332023-11-09 13:56:53 +000021template<armnn::DataType ArmnnType, typename T, std::size_t NumDims>
22LayerTestResult<T, NumDims> ReverseV2TestImpl(
23 armnn::IWorkloadFactory& workloadFactory,
24 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
25 const armnn::ITensorHandleFactory& tensorHandleFactory,
26 const std::vector<T>& input,
27 const std::vector<int>& axis,
28 const std::vector<T>& outputExpected,
29 const armnn::TensorInfo& inputInfo,
30 const armnn::TensorInfo& axisInfo,
31 const armnn::TensorInfo& outputInfo)
32{
33 LayerTestResult<T, NumDims> result(outputInfo);
34 std::vector<T> outputActual(outputInfo.GetNumElements());
35
36 std::unique_ptr<armnn::ITensorHandle> inputHandle = tensorHandleFactory.CreateTensorHandle(inputInfo);
37 std::unique_ptr<armnn::ITensorHandle> axisHandle = tensorHandleFactory.CreateTensorHandle(axisInfo);
38 std::unique_ptr<armnn::ITensorHandle> outputHandle = tensorHandleFactory.CreateTensorHandle(outputInfo);
39
40 armnn::ReverseV2QueueDescriptor queueDescriptor;
41 armnn::WorkloadInfo workloadInfo;
42
43 AddInputToWorkload(queueDescriptor, workloadInfo, inputInfo, inputHandle.get());
44 AddInputToWorkload(queueDescriptor, workloadInfo, axisInfo, axisHandle.get());
45 AddOutputToWorkload(queueDescriptor, workloadInfo, outputInfo, outputHandle.get());
46
47 // Don't execute if ReverseV2 is not supported, as an exception will be raised.
48 const armnn::BackendId& backend = workloadFactory.GetBackendId();
49 std::string reasonIfUnsupported;
50 armnn::LayerSupportHandle handle = armnn::GetILayerSupportByBackendId(backend);
51 result.m_Supported = handle.IsReverseV2Supported(inputInfo,
52 axisInfo,
53 outputInfo,
54 reasonIfUnsupported);
55 if (!result.m_Supported)
Tianle Cheng988354d2023-06-28 13:20:47 +010056 {
Tianle Cheng21a9f332023-11-09 13:56:53 +000057 return result;
Tianle Cheng988354d2023-06-28 13:20:47 +010058 }
Tianle Cheng21a9f332023-11-09 13:56:53 +000059
60 auto workload = workloadFactory.CreateWorkload(armnn::LayerType::ReverseV2, queueDescriptor, workloadInfo);
61
62 inputHandle->Allocate();
63 axisHandle->Allocate();
64 outputHandle->Allocate();
65
66 if (input.data() != nullptr)
67 {
68 CopyDataToITensorHandle(inputHandle.get(), input.data());
69 }
70 if (axis.data() != nullptr)
71 {
72 CopyDataToITensorHandle(axisHandle.get(), axis.data());
73 }
74
75 workload->PostAllocationConfigure();
76 ExecuteWorkload(*workload, memoryManager);
77
78 if (outputActual.data() != nullptr)
79 {
80 CopyDataFromITensorHandle(outputActual.data(), outputHandle.get());
81 }
82
83 return LayerTestResult<T, NumDims>(outputActual,
84 outputExpected,
85 outputHandle->GetShape(),
86 outputInfo.GetShape());
87
88}
Tianle Cheng988354d2023-06-28 13:20:47 +010089}
90
91template<armnn::DataType ArmnnType, typename T>
92LayerTestResult<T, 2> ReverseV2SimpleTestEmptyAxis(
93 armnn::IWorkloadFactory& workloadFactory,
94 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
95 const armnn::ITensorHandleFactory& tensorHandleFactory)
96{
Tracy Narinebb8d7592023-07-13 16:50:54 +010097 // Simple test with no axes set so output is the same as input
Tianle Cheng988354d2023-06-28 13:20:47 +010098
99 float qScale = 1.0f;
100 int32_t qOffset = 0;
101
102 armnn::TensorInfo inputInfo({2,2}, ArmnnType, qScale, qOffset);
Tracy Narinebb8d7592023-07-13 16:50:54 +0100103 armnn::TensorInfo axisInfo({}, armnn::DataType::Signed32, qScale, qOffset);
Tianle Cheng988354d2023-06-28 13:20:47 +0100104 armnn::TensorInfo outputInfo({2,2}, ArmnnType, qScale, qOffset);
105
106 std::vector<T> input = armnnUtils::QuantizedVector<T>({
107 1, 2,
108 3, 4
109 }, qScale, qOffset);
110
Tianle Cheng21a9f332023-11-09 13:56:53 +0000111 std::vector<int> axis = armnnUtils::QuantizedVector<int>({}, qScale, qOffset);
Tracy Narinebb8d7592023-07-13 16:50:54 +0100112
Tianle Cheng988354d2023-06-28 13:20:47 +0100113 std::vector<T> outputExpected = armnnUtils::QuantizedVector<T>({
114 1, 2,
115 3, 4
116 }, qScale, qOffset);
117
118 return ReverseV2TestImpl<ArmnnType, T, 2>(workloadFactory,
Tianle Cheng21a9f332023-11-09 13:56:53 +0000119 memoryManager,
120 tensorHandleFactory,
121 input,
122 axis,
123 outputExpected,
124 inputInfo,
125 axisInfo,
126 outputInfo);
Tianle Cheng988354d2023-06-28 13:20:47 +0100127}
128
129template<armnn::DataType ArmnnType, typename T>
130LayerTestResult<T, 2> ReverseV2SimpleTestEmptyTensor(
131 armnn::IWorkloadFactory& workloadFactory,
132 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
133 const armnn::ITensorHandleFactory& tensorHandleFactory)
134{
Tracy Narinebb8d7592023-07-13 16:50:54 +0100135 // Simple test with empty input tensor
Tianle Cheng988354d2023-06-28 13:20:47 +0100136
137 float qScale = 1.0f;
138 int32_t qOffset = 0;
139
140 armnn::TensorInfo inputInfo({0}, ArmnnType, qScale, qOffset);
Tracy Narinebb8d7592023-07-13 16:50:54 +0100141 armnn::TensorInfo axisInfo({0}, armnn::DataType::Signed32, qScale, qOffset);
Tianle Cheng988354d2023-06-28 13:20:47 +0100142 armnn::TensorInfo outputInfo({0}, ArmnnType, qScale, qOffset);
143
144 std::vector<T> input = armnnUtils::QuantizedVector<T>({}, qScale, qOffset);
Tracy Narinebb8d7592023-07-13 16:50:54 +0100145 std::vector<int> axis = armnnUtils::QuantizedVector<int>({}, qScale, qOffset);
Tianle Cheng988354d2023-06-28 13:20:47 +0100146 std::vector<T> outputExpected = armnnUtils::QuantizedVector<T>({}, qScale, qOffset);
147
148 return ReverseV2TestImpl<ArmnnType, T, 2>(workloadFactory,
149 memoryManager,
150 tensorHandleFactory,
Tianle Cheng988354d2023-06-28 13:20:47 +0100151 input,
Tracy Narinebb8d7592023-07-13 16:50:54 +0100152 axis,
Tianle Cheng988354d2023-06-28 13:20:47 +0100153 outputExpected,
154 inputInfo,
Tracy Narinebb8d7592023-07-13 16:50:54 +0100155 axisInfo,
Tianle Cheng988354d2023-06-28 13:20:47 +0100156 outputInfo);
157}
158
159template<armnn::DataType ArmnnType, typename T>
160LayerTestResult<T, 2> ReverseV2SimpleTest1Dim(
161 armnn::IWorkloadFactory& workloadFactory,
162 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
163 const armnn::ITensorHandleFactory& tensorHandleFactory)
164{
Tianle Cheng988354d2023-06-28 13:20:47 +0100165 float qScale = 1.0f;
166 int32_t qOffset = 0;
167
168 armnn::TensorInfo inputInfo({4}, ArmnnType, qScale, qOffset);
Tracy Narinebb8d7592023-07-13 16:50:54 +0100169 armnn::TensorInfo axisInfo({1}, armnn::DataType::Signed32, qScale, qOffset);
Tianle Cheng988354d2023-06-28 13:20:47 +0100170 armnn::TensorInfo outputInfo({4}, ArmnnType, qScale, qOffset);
171
172 std::vector<T> input = armnnUtils::QuantizedVector<T>({
173 1, 2,
174 3, 4
175 }, qScale, qOffset);
176
Tracy Narinebb8d7592023-07-13 16:50:54 +0100177 std::vector<int> axis = {0};
178
Tianle Cheng988354d2023-06-28 13:20:47 +0100179 std::vector<T> outputExpected = armnnUtils::QuantizedVector<T>({
180 4, 3,
181 2, 1
182 }, qScale, qOffset);
183
184 return ReverseV2TestImpl<ArmnnType, T, 2>(workloadFactory,
185 memoryManager,
186 tensorHandleFactory,
Tianle Cheng988354d2023-06-28 13:20:47 +0100187 input,
Tracy Narinebb8d7592023-07-13 16:50:54 +0100188 axis,
Tianle Cheng988354d2023-06-28 13:20:47 +0100189 outputExpected,
190 inputInfo,
Tracy Narinebb8d7592023-07-13 16:50:54 +0100191 axisInfo,
Tianle Cheng988354d2023-06-28 13:20:47 +0100192 outputInfo);
193}
194
195template<armnn::DataType ArmnnType, typename T>
196LayerTestResult<T, 2> ReverseV2SimpleTest2Dim1Axis(
197 armnn::IWorkloadFactory& workloadFactory,
198 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
199 const armnn::ITensorHandleFactory& tensorHandleFactory)
200{
Tianle Cheng988354d2023-06-28 13:20:47 +0100201 float qScale = 1.0f;
202 int32_t qOffset = 0;
203
204 armnn::TensorInfo inputInfo({2,2}, ArmnnType, qScale, qOffset);
Tracy Narinebb8d7592023-07-13 16:50:54 +0100205 armnn::TensorInfo axisInfo({1}, armnn::DataType::Signed32, qScale, qOffset);
Tianle Cheng988354d2023-06-28 13:20:47 +0100206 armnn::TensorInfo outputInfo({2,2}, ArmnnType, qScale, qOffset);
207
208 std::vector<T> input = armnnUtils::QuantizedVector<T>({
209 1, 2,
210 3, 4
211 }, qScale, qOffset);
212
Tracy Narinebb8d7592023-07-13 16:50:54 +0100213 std::vector<int> axis = {1};
214
Tianle Cheng988354d2023-06-28 13:20:47 +0100215 std::vector<T> outputExpected = armnnUtils::QuantizedVector<T>({
216 2, 1,
217 4, 3
218 }, qScale, qOffset);
219
220 return ReverseV2TestImpl<ArmnnType, T, 2>(workloadFactory,
221 memoryManager,
222 tensorHandleFactory,
Tianle Cheng988354d2023-06-28 13:20:47 +0100223 input,
Tracy Narinebb8d7592023-07-13 16:50:54 +0100224 axis,
Tianle Cheng988354d2023-06-28 13:20:47 +0100225 outputExpected,
226 inputInfo,
Tracy Narinebb8d7592023-07-13 16:50:54 +0100227 axisInfo,
Tianle Cheng988354d2023-06-28 13:20:47 +0100228 outputInfo);
229}
230
231template<armnn::DataType ArmnnType, typename T>
232LayerTestResult<T, 2> ReverseV2SimpleTest2Dim2Axis(
233 armnn::IWorkloadFactory& workloadFactory,
234 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
235 const armnn::ITensorHandleFactory& tensorHandleFactory)
236{
Tianle Cheng988354d2023-06-28 13:20:47 +0100237 float qScale = 1.0f;
238 int32_t qOffset = 0;
239
240 armnn::TensorInfo inputInfo({2,2}, ArmnnType, qScale, qOffset);
Tracy Narinebb8d7592023-07-13 16:50:54 +0100241 armnn::TensorInfo axisInfo({2}, armnn::DataType::Signed32, qScale, qOffset);
Tianle Cheng988354d2023-06-28 13:20:47 +0100242 armnn::TensorInfo outputInfo({2,2}, ArmnnType, qScale, qOffset);
243
244 std::vector<T> input = armnnUtils::QuantizedVector<T>({
245 1, 2,
246 3, 4
247 }, qScale, qOffset);
248
Tracy Narinebb8d7592023-07-13 16:50:54 +0100249 std::vector<int> axis = {1,0};
250
Tianle Cheng988354d2023-06-28 13:20:47 +0100251 std::vector<T> outputExpected = armnnUtils::QuantizedVector<T>({
252 4, 3,
253 2, 1
254 }, qScale, qOffset);
255
256 return ReverseV2TestImpl<ArmnnType, T, 2>(workloadFactory,
257 memoryManager,
258 tensorHandleFactory,
Tianle Cheng988354d2023-06-28 13:20:47 +0100259 input,
Tracy Narinebb8d7592023-07-13 16:50:54 +0100260 axis,
Tianle Cheng988354d2023-06-28 13:20:47 +0100261 outputExpected,
262 inputInfo,
Tracy Narinebb8d7592023-07-13 16:50:54 +0100263 axisInfo,
Tianle Cheng988354d2023-06-28 13:20:47 +0100264 outputInfo);
265}
266
267template<armnn::DataType ArmnnType, typename T>
268LayerTestResult<T, 2> ReverseV2SimpleTest3Dim1Axis(
269 armnn::IWorkloadFactory& workloadFactory,
270 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
271 const armnn::ITensorHandleFactory& tensorHandleFactory)
272{
Tianle Cheng988354d2023-06-28 13:20:47 +0100273 float qScale = 1.0f;
274 int32_t qOffset = 0;
275
276 armnn::TensorInfo inputInfo({2, 3, 4}, ArmnnType, qScale, qOffset);
Tracy Narinebb8d7592023-07-13 16:50:54 +0100277 armnn::TensorInfo axisInfo({1}, armnn::DataType::Signed32, qScale, qOffset);
Tianle Cheng988354d2023-06-28 13:20:47 +0100278 armnn::TensorInfo outputInfo({2, 3, 4}, ArmnnType, qScale, qOffset);
279
280 std::vector<T> input = armnnUtils::QuantizedVector<T>({
281 1, 2, 3, 4,
282 5, 6, 7, 8,
283 9, 10, 11, 12,
284 13, 14, 15, 16,
285 17, 18, 19, 20,
286 21, 22, 23, 24
287 }, qScale, qOffset);
288
Tracy Narinebb8d7592023-07-13 16:50:54 +0100289 std::vector<int> axis = {1};
290
Tianle Cheng988354d2023-06-28 13:20:47 +0100291 std::vector<T> outputExpected = armnnUtils::QuantizedVector<T>({
292 9, 10, 11, 12,
293 5, 6, 7, 8,
294 1, 2, 3, 4,
295 21, 22, 23, 24,
296 17, 18, 19, 20,
297 13, 14, 15, 16
298 }, qScale, qOffset);
299
300 return ReverseV2TestImpl<ArmnnType, T, 2>(workloadFactory,
301 memoryManager,
302 tensorHandleFactory,
Tianle Cheng988354d2023-06-28 13:20:47 +0100303 input,
Tracy Narinebb8d7592023-07-13 16:50:54 +0100304 axis,
Tianle Cheng988354d2023-06-28 13:20:47 +0100305 outputExpected,
306 inputInfo,
Tracy Narinebb8d7592023-07-13 16:50:54 +0100307 axisInfo,
Tianle Cheng988354d2023-06-28 13:20:47 +0100308 outputInfo);
309}
310
311template<armnn::DataType ArmnnType, typename T>
312LayerTestResult<T, 2> ReverseV2SimpleTest3Dim2Axis(
313 armnn::IWorkloadFactory& workloadFactory,
314 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
315 const armnn::ITensorHandleFactory& tensorHandleFactory)
316{
Tianle Cheng988354d2023-06-28 13:20:47 +0100317 float qScale = 1.0f;
318 int32_t qOffset = 0;
319
320 armnn::TensorInfo inputInfo({2, 3, 4}, ArmnnType, qScale, qOffset);
Tracy Narinebb8d7592023-07-13 16:50:54 +0100321 armnn::TensorInfo axisInfo({2}, armnn::DataType::Signed32, qScale, qOffset);
Tianle Cheng988354d2023-06-28 13:20:47 +0100322 armnn::TensorInfo outputInfo({2, 3, 4}, ArmnnType, qScale, qOffset);
323
324 std::vector<T> input = armnnUtils::QuantizedVector<T>({
325 1, 2, 3, 4,
326 5, 6, 7, 8,
327 9, 10, 11, 12,
328 13, 14, 15, 16,
329 17, 18, 19, 20,
330 21, 22, 23, 24
331 }, qScale, qOffset);
332
Tracy Narinebb8d7592023-07-13 16:50:54 +0100333 std::vector<int> axis = {0, 1};
334
Tianle Cheng988354d2023-06-28 13:20:47 +0100335 std::vector<T> outputExpected = armnnUtils::QuantizedVector<T>({
336 21, 22, 23, 24,
337 17, 18, 19, 20,
338 13, 14, 15, 16,
339 9, 10, 11, 12,
340 5, 6, 7, 8,
341 1, 2, 3, 4
342 }, qScale, qOffset);
343
344 return ReverseV2TestImpl<ArmnnType, T, 2>(workloadFactory,
345 memoryManager,
346 tensorHandleFactory,
Tianle Cheng988354d2023-06-28 13:20:47 +0100347 input,
Tracy Narinebb8d7592023-07-13 16:50:54 +0100348 axis,
Tianle Cheng988354d2023-06-28 13:20:47 +0100349 outputExpected,
350 inputInfo,
Tracy Narinebb8d7592023-07-13 16:50:54 +0100351 axisInfo,
Tianle Cheng988354d2023-06-28 13:20:47 +0100352 outputInfo);
353}
354
355template<armnn::DataType ArmnnType, typename T>
356LayerTestResult<T, 2> ReverseV2SimpleTest3Dim3Axis(
357 armnn::IWorkloadFactory& workloadFactory,
358 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
359 const armnn::ITensorHandleFactory& tensorHandleFactory)
360{
Tianle Cheng988354d2023-06-28 13:20:47 +0100361 float qScale = 1.0f;
362 int32_t qOffset = 0;
363
364 armnn::TensorInfo inputInfo({2, 3, 4}, ArmnnType, qScale, qOffset);
Tracy Narinebb8d7592023-07-13 16:50:54 +0100365 armnn::TensorInfo axisInfo({3}, armnn::DataType::Signed32, qScale, qOffset);
Tianle Cheng988354d2023-06-28 13:20:47 +0100366 armnn::TensorInfo outputInfo({2, 3, 4}, ArmnnType, qScale, qOffset);
367
368 std::vector<T> input = armnnUtils::QuantizedVector<T>({
369 1, 2, 3, 4,
370 5, 6, 7, 8,
371 9, 10, 11, 12,
372 13, 14, 15, 16,
373 17, 18, 19, 20,
374 21, 22, 23, 24
375 }, qScale, qOffset);
376
Tracy Narinebb8d7592023-07-13 16:50:54 +0100377 std::vector<int> axis = {1, 0, 2};
378
Tianle Cheng988354d2023-06-28 13:20:47 +0100379 std::vector<T> outputExpected = armnnUtils::QuantizedVector<T>({
380 24, 23, 22, 21,
381 20, 19, 18, 17,
382 16, 15, 14, 13,
383 12, 11, 10, 9,
384 8, 7, 6, 5,
385 4, 3, 2, 1
386 }, qScale, qOffset);
387
388 return ReverseV2TestImpl<ArmnnType, T, 2>(workloadFactory,
389 memoryManager,
390 tensorHandleFactory,
Tianle Cheng988354d2023-06-28 13:20:47 +0100391 input,
Tracy Narinebb8d7592023-07-13 16:50:54 +0100392 axis,
Tianle Cheng988354d2023-06-28 13:20:47 +0100393 outputExpected,
394 inputInfo,
Tracy Narinebb8d7592023-07-13 16:50:54 +0100395 axisInfo,
Tianle Cheng988354d2023-06-28 13:20:47 +0100396 outputInfo);
397}
398
399template<armnn::DataType ArmnnType, typename T>
400LayerTestResult<T, 2> ReverseV2SimpleTest4Dim1Axis(
401 armnn::IWorkloadFactory& workloadFactory,
402 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
403 const armnn::ITensorHandleFactory& tensorHandleFactory)
404{
Tianle Cheng988354d2023-06-28 13:20:47 +0100405 float qScale = 1.0f;
406 int32_t qOffset = 0;
407
408 armnn::TensorInfo inputInfo({2, 2, 2, 3}, ArmnnType, qScale, qOffset);
Tracy Narinebb8d7592023-07-13 16:50:54 +0100409 armnn::TensorInfo axisInfo({1}, armnn::DataType::Signed32, qScale, qOffset);
Tianle Cheng988354d2023-06-28 13:20:47 +0100410 armnn::TensorInfo outputInfo({2, 2, 2, 3}, ArmnnType, qScale, qOffset);
411
412 std::vector<T> input = armnnUtils::QuantizedVector<T>({
413 1, 2, 3,
414 4, 5, 6,
415 7, 8, 9,
416 10, 11, 12,
417 13, 14, 15,
418 16, 17, 18,
419 19, 20, 21,
420 22, 23, 24
421 }, qScale, qOffset);
422
Tracy Narinebb8d7592023-07-13 16:50:54 +0100423 std::vector<int> axis = {0};
424
Tianle Cheng988354d2023-06-28 13:20:47 +0100425 std::vector<T> outputExpected = armnnUtils::QuantizedVector<T>({
426 13, 14, 15,
427 16, 17, 18,
428 19, 20, 21,
429 22, 23, 24,
430 1, 2, 3,
431 4, 5, 6,
432 7, 8, 9,
433 10, 11, 12
434 }, qScale, qOffset);
435
436 return ReverseV2TestImpl<ArmnnType, T, 2>(workloadFactory,
437 memoryManager,
438 tensorHandleFactory,
Tianle Cheng988354d2023-06-28 13:20:47 +0100439 input,
Tracy Narinebb8d7592023-07-13 16:50:54 +0100440 axis,
Tianle Cheng988354d2023-06-28 13:20:47 +0100441 outputExpected,
442 inputInfo,
Tracy Narinebb8d7592023-07-13 16:50:54 +0100443 axisInfo,
Tianle Cheng988354d2023-06-28 13:20:47 +0100444 outputInfo);
445}
446
447template<armnn::DataType ArmnnType, typename T>
448LayerTestResult<T, 2> ReverseV2SimpleTest4Dim2Axis(
449 armnn::IWorkloadFactory& workloadFactory,
450 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
451 const armnn::ITensorHandleFactory& tensorHandleFactory)
452{
Tianle Cheng988354d2023-06-28 13:20:47 +0100453 float qScale = 1.0f;
454 int32_t qOffset = 0;
455
456 armnn::TensorInfo inputInfo({2, 2, 2, 3}, ArmnnType, qScale, qOffset);
Tracy Narinebb8d7592023-07-13 16:50:54 +0100457 armnn::TensorInfo axisInfo({2}, armnn::DataType::Signed32, qScale, qOffset);
Tianle Cheng988354d2023-06-28 13:20:47 +0100458 armnn::TensorInfo outputInfo({2, 2, 2, 3}, ArmnnType, qScale, qOffset);
459
460 std::vector<T> input = armnnUtils::QuantizedVector<T>({
461 1, 2, 3,
462 4, 5, 6,
463 7, 8, 9,
464 10, 11, 12,
465 13, 14, 15,
466 16, 17, 18,
467 19, 20, 21,
468 22, 23, 24
469 }, qScale, qOffset);
470
Tracy Narinebb8d7592023-07-13 16:50:54 +0100471 std::vector<int> axis = {0, 1};
472
Tianle Cheng988354d2023-06-28 13:20:47 +0100473 std::vector<T> outputExpected = armnnUtils::QuantizedVector<T>({
474 19, 20, 21,
475 22, 23, 24,
476 13, 14, 15,
477 16, 17, 18,
478 7, 8, 9,
479 10, 11, 12,
480 1, 2, 3,
481 4, 5, 6
482 }, qScale, qOffset);
483
484 return ReverseV2TestImpl<ArmnnType, T, 2>(workloadFactory,
485 memoryManager,
486 tensorHandleFactory,
Tianle Cheng988354d2023-06-28 13:20:47 +0100487 input,
Tracy Narinebb8d7592023-07-13 16:50:54 +0100488 axis,
Tianle Cheng988354d2023-06-28 13:20:47 +0100489 outputExpected,
490 inputInfo,
Tracy Narinebb8d7592023-07-13 16:50:54 +0100491 axisInfo,
Tianle Cheng988354d2023-06-28 13:20:47 +0100492 outputInfo);
493}
494
495template<armnn::DataType ArmnnType, typename T>
496LayerTestResult<T, 2> ReverseV2SimpleTest4Dim3Axis(
497 armnn::IWorkloadFactory& workloadFactory,
498 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
499 const armnn::ITensorHandleFactory& tensorHandleFactory)
500{
Tianle Cheng988354d2023-06-28 13:20:47 +0100501 float qScale = 1.0f;
502 int32_t qOffset = 0;
503
504 armnn::TensorInfo inputInfo({2, 2, 2, 3}, ArmnnType, qScale, qOffset);
Tracy Narinebb8d7592023-07-13 16:50:54 +0100505 armnn::TensorInfo axisInfo({3}, armnn::DataType::Signed32, qScale, qOffset);
Tianle Cheng988354d2023-06-28 13:20:47 +0100506 armnn::TensorInfo outputInfo({2, 2, 2, 3}, ArmnnType, qScale, qOffset);
507
508 std::vector<T> input = armnnUtils::QuantizedVector<T>({
509 1, 2, 3,
510 4, 5, 6,
511 7, 8, 9,
512 10, 11, 12,
513 13, 14, 15,
514 16, 17, 18,
515 19, 20, 21,
516 22, 23, 24
517 }, qScale, qOffset);
518
Tracy Narinebb8d7592023-07-13 16:50:54 +0100519 std::vector<int> axis = {0, 1, 2};
520
Tianle Cheng988354d2023-06-28 13:20:47 +0100521 std::vector<T> outputExpected = armnnUtils::QuantizedVector<T>({
522 22, 23, 24,
523 19, 20, 21,
524 16, 17, 18,
525 13, 14, 15,
526 10, 11, 12,
527 7, 8, 9,
528 4, 5, 6,
529 1, 2, 3
530 }, qScale, qOffset);
531
532 return ReverseV2TestImpl<ArmnnType, T, 2>(workloadFactory,
533 memoryManager,
534 tensorHandleFactory,
Tianle Cheng988354d2023-06-28 13:20:47 +0100535 input,
Tracy Narinebb8d7592023-07-13 16:50:54 +0100536 axis,
Tianle Cheng988354d2023-06-28 13:20:47 +0100537 outputExpected,
538 inputInfo,
Tracy Narinebb8d7592023-07-13 16:50:54 +0100539 axisInfo,
Tianle Cheng988354d2023-06-28 13:20:47 +0100540 outputInfo);
541}
542
543template<armnn::DataType ArmnnType, typename T>
544LayerTestResult<T, 2> ReverseV2SimpleTest4Dim4Axis(
545 armnn::IWorkloadFactory& workloadFactory,
546 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
547 const armnn::ITensorHandleFactory& tensorHandleFactory)
548{
Tianle Cheng988354d2023-06-28 13:20:47 +0100549 float qScale = 1.0f;
550 int32_t qOffset = 0;
551
552 armnn::TensorInfo inputInfo({2, 2, 2, 3}, ArmnnType, qScale, qOffset);
Tracy Narinebb8d7592023-07-13 16:50:54 +0100553 armnn::TensorInfo axisInfo({4}, armnn::DataType::Signed32, qScale, qOffset);
Tianle Cheng988354d2023-06-28 13:20:47 +0100554 armnn::TensorInfo outputInfo({2, 2, 2, 3}, ArmnnType, qScale, qOffset);
555
556 std::vector<T> input = armnnUtils::QuantizedVector<T>({
557 1, 2, 3,
558 4, 5, 6,
559 7, 8, 9,
560 10, 11, 12,
561 13, 14, 15,
562 16, 17, 18,
563 19, 20, 21,
564 22, 23, 24
565 }, qScale, qOffset);
566
Tracy Narinebb8d7592023-07-13 16:50:54 +0100567 std::vector<int> axis = {0, 1, 2, 3};
568
Tianle Cheng988354d2023-06-28 13:20:47 +0100569 std::vector<T> outputExpected = armnnUtils::QuantizedVector<T>({
Tracy Narinebb8d7592023-07-13 16:50:54 +0100570 24, 23, 22,
571 21, 20, 19,
572 18, 17, 16,
573 15, 14, 13,
574 12, 11, 10,
575 9, 8, 7,
576 6, 5, 4,
577 3, 2, 1
578 }, qScale, qOffset);
Tianle Cheng988354d2023-06-28 13:20:47 +0100579
580 return ReverseV2TestImpl<ArmnnType, T, 2>(workloadFactory,
581 memoryManager,
582 tensorHandleFactory,
Tianle Cheng988354d2023-06-28 13:20:47 +0100583 input,
Tracy Narinebb8d7592023-07-13 16:50:54 +0100584 axis,
Tianle Cheng988354d2023-06-28 13:20:47 +0100585 outputExpected,
586 inputInfo,
Tracy Narinebb8d7592023-07-13 16:50:54 +0100587 axisInfo,
Tianle Cheng988354d2023-06-28 13:20:47 +0100588 outputInfo);
589}
590
591template<armnn::DataType ArmnnType, typename T>
592LayerTestResult<T, 2> ReverseV2EvenRowOddColTest2Dim(
593 armnn::IWorkloadFactory& workloadFactory,
594 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
595 const armnn::ITensorHandleFactory& tensorHandleFactory)
596{
Tianle Cheng988354d2023-06-28 13:20:47 +0100597 float qScale = 1.0f;
598 int32_t qOffset = 0;
599
600 armnn::TensorInfo inputInfo({2, 3}, ArmnnType, qScale, qOffset);
Tracy Narinebb8d7592023-07-13 16:50:54 +0100601 armnn::TensorInfo axisInfo({1}, armnn::DataType::Signed32, qScale, qOffset);
Tianle Cheng988354d2023-06-28 13:20:47 +0100602 armnn::TensorInfo outputInfo({2, 3}, ArmnnType, qScale, qOffset);
603
604 std::vector<T> input = armnnUtils::QuantizedVector<T>({
605 1, 2, 3,
606 4, 5, 6
607 }, qScale, qOffset);
608
Tracy Narinebb8d7592023-07-13 16:50:54 +0100609 std::vector<int> axis = {1};
610
Tianle Cheng988354d2023-06-28 13:20:47 +0100611 std::vector<T> outputExpected = armnnUtils::QuantizedVector<T>({
612 3, 2, 1,
613 6, 5, 4
614 }, qScale, qOffset);
615
616 return ReverseV2TestImpl<ArmnnType, T, 2>(workloadFactory,
617 memoryManager,
618 tensorHandleFactory,
Tianle Cheng988354d2023-06-28 13:20:47 +0100619 input,
Tracy Narinebb8d7592023-07-13 16:50:54 +0100620 axis,
Tianle Cheng988354d2023-06-28 13:20:47 +0100621 outputExpected,
622 inputInfo,
Tracy Narinebb8d7592023-07-13 16:50:54 +0100623 axisInfo,
Tianle Cheng988354d2023-06-28 13:20:47 +0100624 outputInfo);
625}
626
627template<armnn::DataType ArmnnType, typename T>
628LayerTestResult<T, 2> ReverseV2EvenRowOddColTest3Dim(
629 armnn::IWorkloadFactory& workloadFactory,
630 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
631 const armnn::ITensorHandleFactory& tensorHandleFactory)
632{
Tianle Cheng988354d2023-06-28 13:20:47 +0100633 float qScale = 1.0f;
634 int32_t qOffset = 0;
635
636 armnn::TensorInfo inputInfo({2, 3, 1}, ArmnnType, qScale, qOffset);
Tracy Narinebb8d7592023-07-13 16:50:54 +0100637 armnn::TensorInfo axisInfo({1}, armnn::DataType::Signed32, qScale, qOffset);
Tianle Cheng988354d2023-06-28 13:20:47 +0100638 armnn::TensorInfo outputInfo({2, 3, 1}, ArmnnType, qScale, qOffset);
639
640 std::vector<T> input = armnnUtils::QuantizedVector<T>({
641 1, 2, 3,
642 4, 5, 6
643 }, qScale, qOffset);
644
Tracy Narinebb8d7592023-07-13 16:50:54 +0100645 std::vector<int> axis = {1};
646
Tianle Cheng988354d2023-06-28 13:20:47 +0100647 std::vector<T> outputExpected = armnnUtils::QuantizedVector<T>({
648 3, 2, 1,
649 6, 5, 4
650 }, qScale, qOffset);
651
652 return ReverseV2TestImpl<ArmnnType, T, 2>(workloadFactory,
653 memoryManager,
654 tensorHandleFactory,
Tianle Cheng988354d2023-06-28 13:20:47 +0100655 input,
Tracy Narinebb8d7592023-07-13 16:50:54 +0100656 axis,
Tianle Cheng988354d2023-06-28 13:20:47 +0100657 outputExpected,
658 inputInfo,
Tracy Narinebb8d7592023-07-13 16:50:54 +0100659 axisInfo,
Tianle Cheng988354d2023-06-28 13:20:47 +0100660 outputInfo);
661}
662
663template<armnn::DataType ArmnnType, typename T>
664LayerTestResult<T, 2> ReverseV2EvenRowEvenColTest2Dim(
665 armnn::IWorkloadFactory& workloadFactory,
666 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
667 const armnn::ITensorHandleFactory& tensorHandleFactory)
668{
Tianle Cheng988354d2023-06-28 13:20:47 +0100669 float qScale = 1.0f;
670 int32_t qOffset = 0;
671
672 armnn::TensorInfo inputInfo({2, 4}, ArmnnType, qScale, qOffset);
Tracy Narinebb8d7592023-07-13 16:50:54 +0100673 armnn::TensorInfo axisInfo({1}, armnn::DataType::Signed32, qScale, qOffset);
Tianle Cheng988354d2023-06-28 13:20:47 +0100674 armnn::TensorInfo outputInfo({2, 4}, ArmnnType, qScale, qOffset);
675
676 std::vector<T> input = armnnUtils::QuantizedVector<T>({
677 1, 2, 3, 4,
678 5, 6, 7, 8
679 }, qScale, qOffset);
680
Tracy Narinebb8d7592023-07-13 16:50:54 +0100681 std::vector<int> axis = {1};
682
Tianle Cheng988354d2023-06-28 13:20:47 +0100683 std::vector<T> outputExpected = armnnUtils::QuantizedVector<T>({
684 4, 3, 2, 1,
685 8, 7, 6, 5
686 }, qScale, qOffset);
687
688 return ReverseV2TestImpl<ArmnnType, T, 2>(workloadFactory,
689 memoryManager,
690 tensorHandleFactory,
Tianle Cheng988354d2023-06-28 13:20:47 +0100691 input,
Tracy Narinebb8d7592023-07-13 16:50:54 +0100692 axis,
Tianle Cheng988354d2023-06-28 13:20:47 +0100693 outputExpected,
694 inputInfo,
Tracy Narinebb8d7592023-07-13 16:50:54 +0100695 axisInfo,
Tianle Cheng988354d2023-06-28 13:20:47 +0100696 outputInfo);
697}
698
699template<armnn::DataType ArmnnType, typename T>
700LayerTestResult<T, 2> ReverseV2EvenRowEvenColTest3Dim(
701 armnn::IWorkloadFactory& workloadFactory,
702 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
703 const armnn::ITensorHandleFactory& tensorHandleFactory)
704{
Tianle Cheng988354d2023-06-28 13:20:47 +0100705 float qScale = 1.0f;
706 int32_t qOffset = 0;
707
708 armnn::TensorInfo inputInfo({2, 4, 1}, ArmnnType, qScale, qOffset);
Tracy Narinebb8d7592023-07-13 16:50:54 +0100709 armnn::TensorInfo axisInfo({1}, armnn::DataType::Signed32, qScale, qOffset);
Tianle Cheng988354d2023-06-28 13:20:47 +0100710 armnn::TensorInfo outputInfo({2, 4, 1}, ArmnnType, qScale, qOffset);
711
712 std::vector<T> input = armnnUtils::QuantizedVector<T>({
713 1, 2, 3, 4,
714 5, 6, 7, 8
715 }, qScale, qOffset);
716
Tracy Narinebb8d7592023-07-13 16:50:54 +0100717 std::vector<int> axis = {1};
718
Tianle Cheng988354d2023-06-28 13:20:47 +0100719 std::vector<T> outputExpected = armnnUtils::QuantizedVector<T>({
720 4, 3, 2, 1,
721 8, 7, 6, 5
722 }, qScale, qOffset);
723
724 return ReverseV2TestImpl<ArmnnType, T, 2>(workloadFactory,
725 memoryManager,
726 tensorHandleFactory,
Tianle Cheng988354d2023-06-28 13:20:47 +0100727 input,
Tracy Narinebb8d7592023-07-13 16:50:54 +0100728 axis,
Tianle Cheng988354d2023-06-28 13:20:47 +0100729 outputExpected,
730 inputInfo,
Tracy Narinebb8d7592023-07-13 16:50:54 +0100731 axisInfo,
Tianle Cheng988354d2023-06-28 13:20:47 +0100732 outputInfo);
733}
734
735template<armnn::DataType ArmnnType, typename T>
736LayerTestResult<T, 2> ReverseV2OddRowOddColTest2Dim(
737 armnn::IWorkloadFactory& workloadFactory,
738 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
739 const armnn::ITensorHandleFactory& tensorHandleFactory)
740{
Tianle Cheng988354d2023-06-28 13:20:47 +0100741 float qScale = 1.0f;
742 int32_t qOffset = 0;
743
744 armnn::TensorInfo inputInfo({3, 3}, ArmnnType, qScale, qOffset);
Tracy Narinebb8d7592023-07-13 16:50:54 +0100745 armnn::TensorInfo axisInfo({1}, armnn::DataType::Signed32, qScale, qOffset);
Tianle Cheng988354d2023-06-28 13:20:47 +0100746 armnn::TensorInfo outputInfo({3, 3}, ArmnnType, qScale, qOffset);
747
748 std::vector<T> input = armnnUtils::QuantizedVector<T>({
749 1, 2, 3,
750 4, 5, 6,
751 7, 8, 9
752 }, qScale, qOffset);
753
Tracy Narinebb8d7592023-07-13 16:50:54 +0100754 std::vector<int> axis = {1};
755
Tianle Cheng988354d2023-06-28 13:20:47 +0100756 std::vector<T> outputExpected = armnnUtils::QuantizedVector<T>({
757 3, 2, 1,
758 6, 5, 4,
759 9, 8, 7
760 }, qScale, qOffset);
761
762 return ReverseV2TestImpl<ArmnnType, T, 2>(workloadFactory,
763 memoryManager,
764 tensorHandleFactory,
Tianle Cheng988354d2023-06-28 13:20:47 +0100765 input,
Tracy Narinebb8d7592023-07-13 16:50:54 +0100766 axis,
Tianle Cheng988354d2023-06-28 13:20:47 +0100767 outputExpected,
768 inputInfo,
Tracy Narinebb8d7592023-07-13 16:50:54 +0100769 axisInfo,
Tianle Cheng988354d2023-06-28 13:20:47 +0100770 outputInfo);
771}
772
773template<armnn::DataType ArmnnType, typename T>
774LayerTestResult<T, 2> ReverseV2OddRowOddColTest3Dim(
775 armnn::IWorkloadFactory& workloadFactory,
776 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
777 const armnn::ITensorHandleFactory& tensorHandleFactory)
778{
Tianle Cheng988354d2023-06-28 13:20:47 +0100779 float qScale = 1.0f;
780 int32_t qOffset = 0;
781
782 armnn::TensorInfo inputInfo({3, 3, 1}, ArmnnType, qScale, qOffset);
Tracy Narinebb8d7592023-07-13 16:50:54 +0100783 armnn::TensorInfo axisInfo({1}, armnn::DataType::Signed32, qScale, qOffset);
Tianle Cheng988354d2023-06-28 13:20:47 +0100784 armnn::TensorInfo outputInfo({3, 3, 1}, ArmnnType, qScale, qOffset);
785
786 std::vector<T> input = armnnUtils::QuantizedVector<T>({
787 1, 2, 3,
788 4, 5, 6,
789 7, 8, 9
790 }, qScale, qOffset);
791
Tracy Narinebb8d7592023-07-13 16:50:54 +0100792 std::vector<int> axis = {1};
793
Tianle Cheng988354d2023-06-28 13:20:47 +0100794 std::vector<T> outputExpected = armnnUtils::QuantizedVector<T>({
795 3, 2, 1,
796 6, 5, 4,
797 9, 8, 7
798 }, qScale, qOffset);
799
800 return ReverseV2TestImpl<ArmnnType, T, 2>(workloadFactory,
801 memoryManager,
802 tensorHandleFactory,
Tianle Cheng988354d2023-06-28 13:20:47 +0100803 input,
Tracy Narinebb8d7592023-07-13 16:50:54 +0100804 axis,
Tianle Cheng988354d2023-06-28 13:20:47 +0100805 outputExpected,
806 inputInfo,
Tracy Narinebb8d7592023-07-13 16:50:54 +0100807 axisInfo,
Tianle Cheng988354d2023-06-28 13:20:47 +0100808 outputInfo);
809}
810
811template<armnn::DataType ArmnnType, typename T>
812LayerTestResult<T, 2> ReverseV2OddRowEvenColTest2Dim(
813 armnn::IWorkloadFactory& workloadFactory,
814 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
815 const armnn::ITensorHandleFactory& tensorHandleFactory)
816{
Tianle Cheng988354d2023-06-28 13:20:47 +0100817 float qScale = 1.0f;
818 int32_t qOffset = 0;
819
820 armnn::TensorInfo inputInfo({3, 4}, ArmnnType, qScale, qOffset);
Tracy Narinebb8d7592023-07-13 16:50:54 +0100821 armnn::TensorInfo axisInfo({1}, armnn::DataType::Signed32, qScale, qOffset);
Tianle Cheng988354d2023-06-28 13:20:47 +0100822 armnn::TensorInfo outputInfo({3, 4}, ArmnnType, qScale, qOffset);
823
824 std::vector<T> input = armnnUtils::QuantizedVector<T>({
825 1, 2, 3, 4,
826 5, 6, 7, 8,
827 9, 10, 11, 12
828 }, qScale, qOffset);
829
Tracy Narinebb8d7592023-07-13 16:50:54 +0100830 std::vector<int> axis = {1};
831
Tianle Cheng988354d2023-06-28 13:20:47 +0100832 std::vector<T> outputExpected = armnnUtils::QuantizedVector<T>({
833 4, 3, 2, 1,
834 8, 7, 6, 5,
835 12, 11, 10, 9
836 }, qScale, qOffset);
837
838 return ReverseV2TestImpl<ArmnnType, T, 2>(workloadFactory,
839 memoryManager,
840 tensorHandleFactory,
Tianle Cheng988354d2023-06-28 13:20:47 +0100841 input,
Tracy Narinebb8d7592023-07-13 16:50:54 +0100842 axis,
Tianle Cheng988354d2023-06-28 13:20:47 +0100843 outputExpected,
844 inputInfo,
Tracy Narinebb8d7592023-07-13 16:50:54 +0100845 axisInfo,
Tianle Cheng988354d2023-06-28 13:20:47 +0100846 outputInfo);
847}
848
849template<armnn::DataType ArmnnType, typename T>
850LayerTestResult<T, 2> ReverseV2OddRowEvenColTest3Dim(
851 armnn::IWorkloadFactory& workloadFactory,
852 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
853 const armnn::ITensorHandleFactory& tensorHandleFactory)
854{
Tianle Cheng988354d2023-06-28 13:20:47 +0100855 float qScale = 1.0f;
856 int32_t qOffset = 0;
857
858 armnn::TensorInfo inputInfo({3, 4, 1}, ArmnnType, qScale, qOffset);
Tracy Narinebb8d7592023-07-13 16:50:54 +0100859 armnn::TensorInfo axisInfo({1}, armnn::DataType::Signed32, qScale, qOffset);
Tianle Cheng988354d2023-06-28 13:20:47 +0100860 armnn::TensorInfo outputInfo({3, 4, 1}, ArmnnType, qScale, qOffset);
861
862 std::vector<T> input = armnnUtils::QuantizedVector<T>({
863 1, 2, 3, 4,
864 5, 6, 7, 8,
865 9, 10, 11, 12
866 }, qScale, qOffset);
867
Tracy Narinebb8d7592023-07-13 16:50:54 +0100868 std::vector<int> axis = {1};
869
Tianle Cheng988354d2023-06-28 13:20:47 +0100870 std::vector<T> outputExpected = armnnUtils::QuantizedVector<T>({
871 4, 3, 2, 1,
872 8, 7, 6, 5,
873 12, 11, 10, 9
874 }, qScale, qOffset);
875
876 return ReverseV2TestImpl<ArmnnType, T, 2>(workloadFactory,
877 memoryManager,
878 tensorHandleFactory,
Tianle Cheng988354d2023-06-28 13:20:47 +0100879 input,
Tracy Narinebb8d7592023-07-13 16:50:54 +0100880 axis,
Tianle Cheng988354d2023-06-28 13:20:47 +0100881 outputExpected,
882 inputInfo,
Tracy Narinebb8d7592023-07-13 16:50:54 +0100883 axisInfo,
Tianle Cheng988354d2023-06-28 13:20:47 +0100884 outputInfo);
885}
886
887template<armnn::DataType ArmnnType, typename T>
888LayerTestResult<T, 2> ReverseV2NegAxisTest2Dim1Axis(
889 armnn::IWorkloadFactory& workloadFactory,
890 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
891 const armnn::ITensorHandleFactory& tensorHandleFactory)
892{
Tianle Cheng988354d2023-06-28 13:20:47 +0100893 float qScale = 1.0f;
894 int32_t qOffset = 0;
895
896 armnn::TensorInfo inputInfo({2, 4}, ArmnnType, qScale, qOffset);
Tracy Narinebb8d7592023-07-13 16:50:54 +0100897 armnn::TensorInfo axisInfo({1}, armnn::DataType::Signed32, qScale, qOffset);
Tianle Cheng988354d2023-06-28 13:20:47 +0100898 armnn::TensorInfo outputInfo({2, 4}, ArmnnType, qScale, qOffset);
899
900 std::vector<T> input = armnnUtils::QuantizedVector<T>({
901 1, 2, 3, 4,
902 5, 6, 7, 8,
903 }, qScale, qOffset);
904
Tracy Narinebb8d7592023-07-13 16:50:54 +0100905 std::vector<int> axis = {-1};
906
Tianle Cheng988354d2023-06-28 13:20:47 +0100907 std::vector<T> outputExpected = armnnUtils::QuantizedVector<T>({
908 4, 3, 2, 1,
909 8, 7, 6, 5
910 }, qScale, qOffset);
911
912 return ReverseV2TestImpl<ArmnnType, T, 2>(workloadFactory,
913 memoryManager,
914 tensorHandleFactory,
Tianle Cheng988354d2023-06-28 13:20:47 +0100915 input,
Tracy Narinebb8d7592023-07-13 16:50:54 +0100916 axis,
Tianle Cheng988354d2023-06-28 13:20:47 +0100917 outputExpected,
918 inputInfo,
Tracy Narinebb8d7592023-07-13 16:50:54 +0100919 axisInfo,
Tianle Cheng988354d2023-06-28 13:20:47 +0100920 outputInfo);
921}
922
923template<armnn::DataType ArmnnType, typename T>
924LayerTestResult<T, 2> ReverseV2NegAxisTest3Dim2Axis(
925 armnn::IWorkloadFactory& workloadFactory,
926 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
927 const armnn::ITensorHandleFactory& tensorHandleFactory)
928{
Tianle Cheng988354d2023-06-28 13:20:47 +0100929 float qScale = 1.0f;
930 int32_t qOffset = 0;
931
932 armnn::TensorInfo inputInfo({2, 4, 1}, ArmnnType, qScale, qOffset);
Tracy Narinebb8d7592023-07-13 16:50:54 +0100933 armnn::TensorInfo axisInfo({2}, armnn::DataType::Signed32, qScale, qOffset);
Tianle Cheng988354d2023-06-28 13:20:47 +0100934 armnn::TensorInfo outputInfo({2, 4, 1}, ArmnnType, qScale, qOffset);
935
936 std::vector<T> input = armnnUtils::QuantizedVector<T>({
937 1, 2, 3, 4,
938 5, 6, 7, 8,
939 }, qScale, qOffset);
940
Tracy Narinebb8d7592023-07-13 16:50:54 +0100941 std::vector<int> axis = {1, -1};
942
Tianle Cheng988354d2023-06-28 13:20:47 +0100943 std::vector<T> outputExpected = armnnUtils::QuantizedVector<T>({
944 4, 3, 2, 1,
945 8, 7, 6, 5
946 }, qScale, qOffset);
947
948 return ReverseV2TestImpl<ArmnnType, T, 2>(workloadFactory,
949 memoryManager,
950 tensorHandleFactory,
Tianle Cheng988354d2023-06-28 13:20:47 +0100951 input,
Tracy Narinebb8d7592023-07-13 16:50:54 +0100952 axis,
Tianle Cheng988354d2023-06-28 13:20:47 +0100953 outputExpected,
954 inputInfo,
Tracy Narinebb8d7592023-07-13 16:50:54 +0100955 axisInfo,
Tianle Cheng988354d2023-06-28 13:20:47 +0100956 outputInfo);
957}
958
959template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 2>
960ReverseV2SimpleTestEmptyAxis<armnn::DataType::Float32>(
961 armnn::IWorkloadFactory& workloadFactory,
962 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
963 const armnn::ITensorHandleFactory& tensorHandleFactory);
964
965template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 2>
966ReverseV2SimpleTestEmptyTensor<armnn::DataType::Float32>(
967 armnn::IWorkloadFactory& workloadFactory,
968 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
969 const armnn::ITensorHandleFactory& tensorHandleFactory);
970
971template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 2>
972ReverseV2SimpleTest1Dim<armnn::DataType::Float32>(
973 armnn::IWorkloadFactory& workloadFactory,
974 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
975 const armnn::ITensorHandleFactory& tensorHandleFactory);
976
977template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 2>
978ReverseV2SimpleTest2Dim1Axis<armnn::DataType::Float32>(
979 armnn::IWorkloadFactory& workloadFactory,
980 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
981 const armnn::ITensorHandleFactory& tensorHandleFactory);
982
983template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 2>
984ReverseV2SimpleTest2Dim2Axis<armnn::DataType::Float32>(
985 armnn::IWorkloadFactory& workloadFactory,
986 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
987 const armnn::ITensorHandleFactory& tensorHandleFactory);
988
989template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 2>
990ReverseV2SimpleTest3Dim1Axis<armnn::DataType::Float32>(
991 armnn::IWorkloadFactory& workloadFactory,
992 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
993 const armnn::ITensorHandleFactory& tensorHandleFactory);
994
995template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 2>
996ReverseV2SimpleTest3Dim2Axis<armnn::DataType::Float32>(
997 armnn::IWorkloadFactory& workloadFactory,
998 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
999 const armnn::ITensorHandleFactory& tensorHandleFactory);
1000
1001template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 2>
1002ReverseV2SimpleTest3Dim3Axis<armnn::DataType::Float32>(
1003 armnn::IWorkloadFactory& workloadFactory,
1004 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1005 const armnn::ITensorHandleFactory& tensorHandleFactory);
1006
1007template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 2>
1008ReverseV2SimpleTest4Dim1Axis<armnn::DataType::Float32>(
1009 armnn::IWorkloadFactory& workloadFactory,
1010 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1011 const armnn::ITensorHandleFactory& tensorHandleFactory);
1012
1013template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 2>
1014ReverseV2SimpleTest4Dim2Axis<armnn::DataType::Float32>(
1015 armnn::IWorkloadFactory& workloadFactory,
1016 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1017 const armnn::ITensorHandleFactory& tensorHandleFactory);
1018
1019template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 2>
1020ReverseV2SimpleTest4Dim3Axis<armnn::DataType::Float32>(
1021 armnn::IWorkloadFactory& workloadFactory,
1022 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1023 const armnn::ITensorHandleFactory& tensorHandleFactory);
1024
1025template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 2>
1026ReverseV2SimpleTest4Dim4Axis<armnn::DataType::Float32>(
1027 armnn::IWorkloadFactory& workloadFactory,
1028 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1029 const armnn::ITensorHandleFactory& tensorHandleFactory);
1030
1031template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 2>
1032ReverseV2EvenRowOddColTest2Dim<armnn::DataType::Float32>(
1033 armnn::IWorkloadFactory& workloadFactory,
1034 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1035 const armnn::ITensorHandleFactory& tensorHandleFactory);
1036
1037template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 2>
1038ReverseV2EvenRowOddColTest3Dim<armnn::DataType::Float32>(
1039 armnn::IWorkloadFactory& workloadFactory,
1040 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1041 const armnn::ITensorHandleFactory& tensorHandleFactory);
1042
1043template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 2>
1044ReverseV2EvenRowEvenColTest2Dim<armnn::DataType::Float32>(
1045 armnn::IWorkloadFactory& workloadFactory,
1046 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1047 const armnn::ITensorHandleFactory& tensorHandleFactory);
1048
1049template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 2>
1050ReverseV2EvenRowEvenColTest3Dim<armnn::DataType::Float32>(
1051 armnn::IWorkloadFactory& workloadFactory,
1052 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1053 const armnn::ITensorHandleFactory& tensorHandleFactory);
1054
1055template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 2>
1056ReverseV2OddRowOddColTest2Dim<armnn::DataType::Float32>(
1057 armnn::IWorkloadFactory& workloadFactory,
1058 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1059 const armnn::ITensorHandleFactory& tensorHandleFactory);
1060
1061template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 2>
1062ReverseV2OddRowOddColTest3Dim<armnn::DataType::Float32>(
1063 armnn::IWorkloadFactory& workloadFactory,
1064 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1065 const armnn::ITensorHandleFactory& tensorHandleFactory);
1066
1067template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 2>
1068ReverseV2OddRowEvenColTest2Dim<armnn::DataType::Float32>(
1069 armnn::IWorkloadFactory& workloadFactory,
1070 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1071 const armnn::ITensorHandleFactory& tensorHandleFactory);
1072
1073template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 2>
1074ReverseV2OddRowEvenColTest3Dim<armnn::DataType::Float32>(
1075 armnn::IWorkloadFactory& workloadFactory,
1076 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1077 const armnn::ITensorHandleFactory& tensorHandleFactory);
1078
1079template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 2>
1080ReverseV2NegAxisTest2Dim1Axis<armnn::DataType::Float32>(
1081 armnn::IWorkloadFactory& workloadFactory,
1082 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1083 const armnn::ITensorHandleFactory& tensorHandleFactory);
1084
1085template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 2>
1086ReverseV2NegAxisTest3Dim2Axis<armnn::DataType::Float32>(
1087 armnn::IWorkloadFactory& workloadFactory,
1088 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1089 const armnn::ITensorHandleFactory& tensorHandleFactory);
1090
1091template LayerTestResult<armnn::ResolveType<armnn::DataType::Float16>, 2>
1092ReverseV2SimpleTest2Dim2Axis<armnn::DataType::Float16>(
1093 armnn::IWorkloadFactory& workloadFactory,
1094 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1095 const armnn::ITensorHandleFactory& tensorHandleFactory);
1096
1097template LayerTestResult<armnn::ResolveType<armnn::DataType::QAsymmS8>, 2>
1098ReverseV2SimpleTest2Dim2Axis<armnn::DataType::QAsymmS8>(
1099 armnn::IWorkloadFactory& workloadFactory,
1100 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1101 const armnn::ITensorHandleFactory& tensorHandleFactory);
1102
1103template LayerTestResult<armnn::ResolveType<armnn::DataType::QAsymmU8>, 2>
1104ReverseV2SimpleTest2Dim2Axis<armnn::DataType::QAsymmU8>(
1105 armnn::IWorkloadFactory& workloadFactory,
1106 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1107 const armnn::ITensorHandleFactory& tensorHandleFactory);
1108
1109template LayerTestResult<armnn::ResolveType<armnn::DataType::QSymmS16>, 2>
1110ReverseV2SimpleTest2Dim2Axis<armnn::DataType::QSymmS16>(
1111 armnn::IWorkloadFactory& workloadFactory,
1112 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Tracy Narinebb8d7592023-07-13 16:50:54 +01001113 const armnn::ITensorHandleFactory& tensorHandleFactory);