blob: 3cfd614336e8b046da8e757c2c4badf1f8f57e42 [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{
21 template<armnn::DataType ArmnnType, typename T, std::size_t NumDims>
22 LayerTestResult<T, NumDims> ReverseV2TestImpl(
23 armnn::IWorkloadFactory& workloadFactory,
24 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
25 const armnn::ITensorHandleFactory& tensorHandleFactory,
Tianle Cheng988354d2023-06-28 13:20:47 +010026 const std::vector<T>& input,
Tracy Narinebb8d7592023-07-13 16:50:54 +010027 const std::vector<int>& axis,
Tianle Cheng988354d2023-06-28 13:20:47 +010028 const std::vector<T>& outputExpected,
29 const armnn::TensorInfo& inputInfo,
Tracy Narinebb8d7592023-07-13 16:50:54 +010030 const armnn::TensorInfo& axisInfo,
Tianle Cheng988354d2023-06-28 13:20:47 +010031 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);
Tracy Narinebb8d7592023-07-13 16:50:54 +010037 std::unique_ptr<armnn::ITensorHandle> axisHandle = tensorHandleFactory.CreateTensorHandle(axisInfo);
Tianle Cheng988354d2023-06-28 13:20:47 +010038 std::unique_ptr<armnn::ITensorHandle> outputHandle = tensorHandleFactory.CreateTensorHandle(outputInfo);
39
40 armnn::ReverseV2QueueDescriptor queueDescriptor;
Tianle Cheng988354d2023-06-28 13:20:47 +010041 armnn::WorkloadInfo workloadInfo;
42
43 AddInputToWorkload(queueDescriptor, workloadInfo, inputInfo, inputHandle.get());
Tracy Narinebb8d7592023-07-13 16:50:54 +010044 AddInputToWorkload(queueDescriptor, workloadInfo, axisInfo, axisHandle.get());
Tianle Cheng988354d2023-06-28 13:20:47 +010045 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,
Tracy Narinebb8d7592023-07-13 16:50:54 +010052 axisInfo,
53 outputInfo,
54 reasonIfUnsupported);
Tianle Cheng988354d2023-06-28 13:20:47 +010055 if (!result.m_Supported)
56 {
57 return result;
58 }
59
60 auto workload = workloadFactory.CreateWorkload(armnn::LayerType::ReverseV2, queueDescriptor, workloadInfo);
61
62 inputHandle->Allocate();
Tracy Narinebb8d7592023-07-13 16:50:54 +010063 axisHandle->Allocate();
Tianle Cheng988354d2023-06-28 13:20:47 +010064 outputHandle->Allocate();
65
66 CopyDataToITensorHandle(inputHandle.get(), input.data());
Tracy Narinebb8d7592023-07-13 16:50:54 +010067 CopyDataToITensorHandle(axisHandle.get(), axis.data());
Tianle Cheng988354d2023-06-28 13:20:47 +010068
69 workload->PostAllocationConfigure();
70 ExecuteWorkload(*workload, memoryManager);
71
72 CopyDataFromITensorHandle(outputActual.data(), outputHandle.get());
73
74 return LayerTestResult<T, NumDims>(outputActual,
75 outputExpected,
76 outputHandle->GetShape(),
77 outputInfo.GetShape());
78 }
79}
80
81template<armnn::DataType ArmnnType, typename T>
82LayerTestResult<T, 2> ReverseV2SimpleTestEmptyAxis(
83 armnn::IWorkloadFactory& workloadFactory,
84 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
85 const armnn::ITensorHandleFactory& tensorHandleFactory)
86{
Tracy Narinebb8d7592023-07-13 16:50:54 +010087 // Simple test with no axes set so output is the same as input
Tianle Cheng988354d2023-06-28 13:20:47 +010088
89 float qScale = 1.0f;
90 int32_t qOffset = 0;
91
92 armnn::TensorInfo inputInfo({2,2}, ArmnnType, qScale, qOffset);
Tracy Narinebb8d7592023-07-13 16:50:54 +010093 armnn::TensorInfo axisInfo({}, armnn::DataType::Signed32, qScale, qOffset);
Tianle Cheng988354d2023-06-28 13:20:47 +010094 armnn::TensorInfo outputInfo({2,2}, ArmnnType, qScale, qOffset);
95
96 std::vector<T> input = armnnUtils::QuantizedVector<T>({
97 1, 2,
98 3, 4
99 }, qScale, qOffset);
100
Tracy Narinebb8d7592023-07-13 16:50:54 +0100101 std::vector<int> axis = armnnUtils::QuantizedVector<int>({}, qScale, qOffset);
102
Tianle Cheng988354d2023-06-28 13:20:47 +0100103 std::vector<T> outputExpected = armnnUtils::QuantizedVector<T>({
104 1, 2,
105 3, 4
106 }, qScale, qOffset);
107
108 return ReverseV2TestImpl<ArmnnType, T, 2>(workloadFactory,
109 memoryManager,
110 tensorHandleFactory,
Tianle Cheng988354d2023-06-28 13:20:47 +0100111 input,
Tracy Narinebb8d7592023-07-13 16:50:54 +0100112 axis,
Tianle Cheng988354d2023-06-28 13:20:47 +0100113 outputExpected,
114 inputInfo,
Tracy Narinebb8d7592023-07-13 16:50:54 +0100115 axisInfo,
Tianle Cheng988354d2023-06-28 13:20:47 +0100116 outputInfo);
117}
118
119template<armnn::DataType ArmnnType, typename T>
120LayerTestResult<T, 2> ReverseV2SimpleTestEmptyTensor(
121 armnn::IWorkloadFactory& workloadFactory,
122 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
123 const armnn::ITensorHandleFactory& tensorHandleFactory)
124{
Tracy Narinebb8d7592023-07-13 16:50:54 +0100125 // Simple test with empty input tensor
Tianle Cheng988354d2023-06-28 13:20:47 +0100126
127 float qScale = 1.0f;
128 int32_t qOffset = 0;
129
130 armnn::TensorInfo inputInfo({0}, ArmnnType, qScale, qOffset);
Tracy Narinebb8d7592023-07-13 16:50:54 +0100131 armnn::TensorInfo axisInfo({0}, armnn::DataType::Signed32, qScale, qOffset);
Tianle Cheng988354d2023-06-28 13:20:47 +0100132 armnn::TensorInfo outputInfo({0}, ArmnnType, qScale, qOffset);
133
134 std::vector<T> input = armnnUtils::QuantizedVector<T>({}, qScale, qOffset);
Tracy Narinebb8d7592023-07-13 16:50:54 +0100135 std::vector<int> axis = armnnUtils::QuantizedVector<int>({}, qScale, qOffset);
Tianle Cheng988354d2023-06-28 13:20:47 +0100136 std::vector<T> outputExpected = armnnUtils::QuantizedVector<T>({}, qScale, qOffset);
137
138 return ReverseV2TestImpl<ArmnnType, T, 2>(workloadFactory,
139 memoryManager,
140 tensorHandleFactory,
Tianle Cheng988354d2023-06-28 13:20:47 +0100141 input,
Tracy Narinebb8d7592023-07-13 16:50:54 +0100142 axis,
Tianle Cheng988354d2023-06-28 13:20:47 +0100143 outputExpected,
144 inputInfo,
Tracy Narinebb8d7592023-07-13 16:50:54 +0100145 axisInfo,
Tianle Cheng988354d2023-06-28 13:20:47 +0100146 outputInfo);
147}
148
149template<armnn::DataType ArmnnType, typename T>
150LayerTestResult<T, 2> ReverseV2SimpleTest1Dim(
151 armnn::IWorkloadFactory& workloadFactory,
152 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
153 const armnn::ITensorHandleFactory& tensorHandleFactory)
154{
Tianle Cheng988354d2023-06-28 13:20:47 +0100155 float qScale = 1.0f;
156 int32_t qOffset = 0;
157
158 armnn::TensorInfo inputInfo({4}, ArmnnType, qScale, qOffset);
Tracy Narinebb8d7592023-07-13 16:50:54 +0100159 armnn::TensorInfo axisInfo({1}, armnn::DataType::Signed32, qScale, qOffset);
Tianle Cheng988354d2023-06-28 13:20:47 +0100160 armnn::TensorInfo outputInfo({4}, ArmnnType, qScale, qOffset);
161
162 std::vector<T> input = armnnUtils::QuantizedVector<T>({
163 1, 2,
164 3, 4
165 }, qScale, qOffset);
166
Tracy Narinebb8d7592023-07-13 16:50:54 +0100167 std::vector<int> axis = {0};
168
Tianle Cheng988354d2023-06-28 13:20:47 +0100169 std::vector<T> outputExpected = armnnUtils::QuantizedVector<T>({
170 4, 3,
171 2, 1
172 }, qScale, qOffset);
173
174 return ReverseV2TestImpl<ArmnnType, T, 2>(workloadFactory,
175 memoryManager,
176 tensorHandleFactory,
Tianle Cheng988354d2023-06-28 13:20:47 +0100177 input,
Tracy Narinebb8d7592023-07-13 16:50:54 +0100178 axis,
Tianle Cheng988354d2023-06-28 13:20:47 +0100179 outputExpected,
180 inputInfo,
Tracy Narinebb8d7592023-07-13 16:50:54 +0100181 axisInfo,
Tianle Cheng988354d2023-06-28 13:20:47 +0100182 outputInfo);
183}
184
185template<armnn::DataType ArmnnType, typename T>
186LayerTestResult<T, 2> ReverseV2SimpleTest2Dim1Axis(
187 armnn::IWorkloadFactory& workloadFactory,
188 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
189 const armnn::ITensorHandleFactory& tensorHandleFactory)
190{
Tianle Cheng988354d2023-06-28 13:20:47 +0100191 float qScale = 1.0f;
192 int32_t qOffset = 0;
193
194 armnn::TensorInfo inputInfo({2,2}, ArmnnType, qScale, qOffset);
Tracy Narinebb8d7592023-07-13 16:50:54 +0100195 armnn::TensorInfo axisInfo({1}, armnn::DataType::Signed32, qScale, qOffset);
Tianle Cheng988354d2023-06-28 13:20:47 +0100196 armnn::TensorInfo outputInfo({2,2}, ArmnnType, qScale, qOffset);
197
198 std::vector<T> input = armnnUtils::QuantizedVector<T>({
199 1, 2,
200 3, 4
201 }, qScale, qOffset);
202
Tracy Narinebb8d7592023-07-13 16:50:54 +0100203 std::vector<int> axis = {1};
204
Tianle Cheng988354d2023-06-28 13:20:47 +0100205 std::vector<T> outputExpected = armnnUtils::QuantizedVector<T>({
206 2, 1,
207 4, 3
208 }, qScale, qOffset);
209
210 return ReverseV2TestImpl<ArmnnType, T, 2>(workloadFactory,
211 memoryManager,
212 tensorHandleFactory,
Tianle Cheng988354d2023-06-28 13:20:47 +0100213 input,
Tracy Narinebb8d7592023-07-13 16:50:54 +0100214 axis,
Tianle Cheng988354d2023-06-28 13:20:47 +0100215 outputExpected,
216 inputInfo,
Tracy Narinebb8d7592023-07-13 16:50:54 +0100217 axisInfo,
Tianle Cheng988354d2023-06-28 13:20:47 +0100218 outputInfo);
219}
220
221template<armnn::DataType ArmnnType, typename T>
222LayerTestResult<T, 2> ReverseV2SimpleTest2Dim2Axis(
223 armnn::IWorkloadFactory& workloadFactory,
224 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
225 const armnn::ITensorHandleFactory& tensorHandleFactory)
226{
Tianle Cheng988354d2023-06-28 13:20:47 +0100227 float qScale = 1.0f;
228 int32_t qOffset = 0;
229
230 armnn::TensorInfo inputInfo({2,2}, ArmnnType, qScale, qOffset);
Tracy Narinebb8d7592023-07-13 16:50:54 +0100231 armnn::TensorInfo axisInfo({2}, armnn::DataType::Signed32, qScale, qOffset);
Tianle Cheng988354d2023-06-28 13:20:47 +0100232 armnn::TensorInfo outputInfo({2,2}, ArmnnType, qScale, qOffset);
233
234 std::vector<T> input = armnnUtils::QuantizedVector<T>({
235 1, 2,
236 3, 4
237 }, qScale, qOffset);
238
Tracy Narinebb8d7592023-07-13 16:50:54 +0100239 std::vector<int> axis = {1,0};
240
Tianle Cheng988354d2023-06-28 13:20:47 +0100241 std::vector<T> outputExpected = armnnUtils::QuantizedVector<T>({
242 4, 3,
243 2, 1
244 }, qScale, qOffset);
245
246 return ReverseV2TestImpl<ArmnnType, T, 2>(workloadFactory,
247 memoryManager,
248 tensorHandleFactory,
Tianle Cheng988354d2023-06-28 13:20:47 +0100249 input,
Tracy Narinebb8d7592023-07-13 16:50:54 +0100250 axis,
Tianle Cheng988354d2023-06-28 13:20:47 +0100251 outputExpected,
252 inputInfo,
Tracy Narinebb8d7592023-07-13 16:50:54 +0100253 axisInfo,
Tianle Cheng988354d2023-06-28 13:20:47 +0100254 outputInfo);
255}
256
257template<armnn::DataType ArmnnType, typename T>
258LayerTestResult<T, 2> ReverseV2SimpleTest3Dim1Axis(
259 armnn::IWorkloadFactory& workloadFactory,
260 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
261 const armnn::ITensorHandleFactory& tensorHandleFactory)
262{
Tianle Cheng988354d2023-06-28 13:20:47 +0100263 float qScale = 1.0f;
264 int32_t qOffset = 0;
265
266 armnn::TensorInfo inputInfo({2, 3, 4}, ArmnnType, qScale, qOffset);
Tracy Narinebb8d7592023-07-13 16:50:54 +0100267 armnn::TensorInfo axisInfo({1}, armnn::DataType::Signed32, qScale, qOffset);
Tianle Cheng988354d2023-06-28 13:20:47 +0100268 armnn::TensorInfo outputInfo({2, 3, 4}, ArmnnType, qScale, qOffset);
269
270 std::vector<T> input = armnnUtils::QuantizedVector<T>({
271 1, 2, 3, 4,
272 5, 6, 7, 8,
273 9, 10, 11, 12,
274 13, 14, 15, 16,
275 17, 18, 19, 20,
276 21, 22, 23, 24
277 }, qScale, qOffset);
278
Tracy Narinebb8d7592023-07-13 16:50:54 +0100279 std::vector<int> axis = {1};
280
Tianle Cheng988354d2023-06-28 13:20:47 +0100281 std::vector<T> outputExpected = armnnUtils::QuantizedVector<T>({
282 9, 10, 11, 12,
283 5, 6, 7, 8,
284 1, 2, 3, 4,
285 21, 22, 23, 24,
286 17, 18, 19, 20,
287 13, 14, 15, 16
288 }, qScale, qOffset);
289
290 return ReverseV2TestImpl<ArmnnType, T, 2>(workloadFactory,
291 memoryManager,
292 tensorHandleFactory,
Tianle Cheng988354d2023-06-28 13:20:47 +0100293 input,
Tracy Narinebb8d7592023-07-13 16:50:54 +0100294 axis,
Tianle Cheng988354d2023-06-28 13:20:47 +0100295 outputExpected,
296 inputInfo,
Tracy Narinebb8d7592023-07-13 16:50:54 +0100297 axisInfo,
Tianle Cheng988354d2023-06-28 13:20:47 +0100298 outputInfo);
299}
300
301template<armnn::DataType ArmnnType, typename T>
302LayerTestResult<T, 2> ReverseV2SimpleTest3Dim2Axis(
303 armnn::IWorkloadFactory& workloadFactory,
304 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
305 const armnn::ITensorHandleFactory& tensorHandleFactory)
306{
Tianle Cheng988354d2023-06-28 13:20:47 +0100307 float qScale = 1.0f;
308 int32_t qOffset = 0;
309
310 armnn::TensorInfo inputInfo({2, 3, 4}, ArmnnType, qScale, qOffset);
Tracy Narinebb8d7592023-07-13 16:50:54 +0100311 armnn::TensorInfo axisInfo({2}, armnn::DataType::Signed32, qScale, qOffset);
Tianle Cheng988354d2023-06-28 13:20:47 +0100312 armnn::TensorInfo outputInfo({2, 3, 4}, ArmnnType, qScale, qOffset);
313
314 std::vector<T> input = armnnUtils::QuantizedVector<T>({
315 1, 2, 3, 4,
316 5, 6, 7, 8,
317 9, 10, 11, 12,
318 13, 14, 15, 16,
319 17, 18, 19, 20,
320 21, 22, 23, 24
321 }, qScale, qOffset);
322
Tracy Narinebb8d7592023-07-13 16:50:54 +0100323 std::vector<int> axis = {0, 1};
324
Tianle Cheng988354d2023-06-28 13:20:47 +0100325 std::vector<T> outputExpected = armnnUtils::QuantizedVector<T>({
326 21, 22, 23, 24,
327 17, 18, 19, 20,
328 13, 14, 15, 16,
329 9, 10, 11, 12,
330 5, 6, 7, 8,
331 1, 2, 3, 4
332 }, qScale, qOffset);
333
334 return ReverseV2TestImpl<ArmnnType, T, 2>(workloadFactory,
335 memoryManager,
336 tensorHandleFactory,
Tianle Cheng988354d2023-06-28 13:20:47 +0100337 input,
Tracy Narinebb8d7592023-07-13 16:50:54 +0100338 axis,
Tianle Cheng988354d2023-06-28 13:20:47 +0100339 outputExpected,
340 inputInfo,
Tracy Narinebb8d7592023-07-13 16:50:54 +0100341 axisInfo,
Tianle Cheng988354d2023-06-28 13:20:47 +0100342 outputInfo);
343}
344
345template<armnn::DataType ArmnnType, typename T>
346LayerTestResult<T, 2> ReverseV2SimpleTest3Dim3Axis(
347 armnn::IWorkloadFactory& workloadFactory,
348 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
349 const armnn::ITensorHandleFactory& tensorHandleFactory)
350{
Tianle Cheng988354d2023-06-28 13:20:47 +0100351 float qScale = 1.0f;
352 int32_t qOffset = 0;
353
354 armnn::TensorInfo inputInfo({2, 3, 4}, ArmnnType, qScale, qOffset);
Tracy Narinebb8d7592023-07-13 16:50:54 +0100355 armnn::TensorInfo axisInfo({3}, armnn::DataType::Signed32, qScale, qOffset);
Tianle Cheng988354d2023-06-28 13:20:47 +0100356 armnn::TensorInfo outputInfo({2, 3, 4}, ArmnnType, qScale, qOffset);
357
358 std::vector<T> input = armnnUtils::QuantizedVector<T>({
359 1, 2, 3, 4,
360 5, 6, 7, 8,
361 9, 10, 11, 12,
362 13, 14, 15, 16,
363 17, 18, 19, 20,
364 21, 22, 23, 24
365 }, qScale, qOffset);
366
Tracy Narinebb8d7592023-07-13 16:50:54 +0100367 std::vector<int> axis = {1, 0, 2};
368
Tianle Cheng988354d2023-06-28 13:20:47 +0100369 std::vector<T> outputExpected = armnnUtils::QuantizedVector<T>({
370 24, 23, 22, 21,
371 20, 19, 18, 17,
372 16, 15, 14, 13,
373 12, 11, 10, 9,
374 8, 7, 6, 5,
375 4, 3, 2, 1
376 }, qScale, qOffset);
377
378 return ReverseV2TestImpl<ArmnnType, T, 2>(workloadFactory,
379 memoryManager,
380 tensorHandleFactory,
Tianle Cheng988354d2023-06-28 13:20:47 +0100381 input,
Tracy Narinebb8d7592023-07-13 16:50:54 +0100382 axis,
Tianle Cheng988354d2023-06-28 13:20:47 +0100383 outputExpected,
384 inputInfo,
Tracy Narinebb8d7592023-07-13 16:50:54 +0100385 axisInfo,
Tianle Cheng988354d2023-06-28 13:20:47 +0100386 outputInfo);
387}
388
389template<armnn::DataType ArmnnType, typename T>
390LayerTestResult<T, 2> ReverseV2SimpleTest4Dim1Axis(
391 armnn::IWorkloadFactory& workloadFactory,
392 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
393 const armnn::ITensorHandleFactory& tensorHandleFactory)
394{
Tianle Cheng988354d2023-06-28 13:20:47 +0100395 float qScale = 1.0f;
396 int32_t qOffset = 0;
397
398 armnn::TensorInfo inputInfo({2, 2, 2, 3}, ArmnnType, qScale, qOffset);
Tracy Narinebb8d7592023-07-13 16:50:54 +0100399 armnn::TensorInfo axisInfo({1}, armnn::DataType::Signed32, qScale, qOffset);
Tianle Cheng988354d2023-06-28 13:20:47 +0100400 armnn::TensorInfo outputInfo({2, 2, 2, 3}, ArmnnType, qScale, qOffset);
401
402 std::vector<T> input = armnnUtils::QuantizedVector<T>({
403 1, 2, 3,
404 4, 5, 6,
405 7, 8, 9,
406 10, 11, 12,
407 13, 14, 15,
408 16, 17, 18,
409 19, 20, 21,
410 22, 23, 24
411 }, qScale, qOffset);
412
Tracy Narinebb8d7592023-07-13 16:50:54 +0100413 std::vector<int> axis = {0};
414
Tianle Cheng988354d2023-06-28 13:20:47 +0100415 std::vector<T> outputExpected = armnnUtils::QuantizedVector<T>({
416 13, 14, 15,
417 16, 17, 18,
418 19, 20, 21,
419 22, 23, 24,
420 1, 2, 3,
421 4, 5, 6,
422 7, 8, 9,
423 10, 11, 12
424 }, qScale, qOffset);
425
426 return ReverseV2TestImpl<ArmnnType, T, 2>(workloadFactory,
427 memoryManager,
428 tensorHandleFactory,
Tianle Cheng988354d2023-06-28 13:20:47 +0100429 input,
Tracy Narinebb8d7592023-07-13 16:50:54 +0100430 axis,
Tianle Cheng988354d2023-06-28 13:20:47 +0100431 outputExpected,
432 inputInfo,
Tracy Narinebb8d7592023-07-13 16:50:54 +0100433 axisInfo,
Tianle Cheng988354d2023-06-28 13:20:47 +0100434 outputInfo);
435}
436
437template<armnn::DataType ArmnnType, typename T>
438LayerTestResult<T, 2> ReverseV2SimpleTest4Dim2Axis(
439 armnn::IWorkloadFactory& workloadFactory,
440 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
441 const armnn::ITensorHandleFactory& tensorHandleFactory)
442{
Tianle Cheng988354d2023-06-28 13:20:47 +0100443 float qScale = 1.0f;
444 int32_t qOffset = 0;
445
446 armnn::TensorInfo inputInfo({2, 2, 2, 3}, ArmnnType, qScale, qOffset);
Tracy Narinebb8d7592023-07-13 16:50:54 +0100447 armnn::TensorInfo axisInfo({2}, armnn::DataType::Signed32, qScale, qOffset);
Tianle Cheng988354d2023-06-28 13:20:47 +0100448 armnn::TensorInfo outputInfo({2, 2, 2, 3}, ArmnnType, qScale, qOffset);
449
450 std::vector<T> input = armnnUtils::QuantizedVector<T>({
451 1, 2, 3,
452 4, 5, 6,
453 7, 8, 9,
454 10, 11, 12,
455 13, 14, 15,
456 16, 17, 18,
457 19, 20, 21,
458 22, 23, 24
459 }, qScale, qOffset);
460
Tracy Narinebb8d7592023-07-13 16:50:54 +0100461 std::vector<int> axis = {0, 1};
462
Tianle Cheng988354d2023-06-28 13:20:47 +0100463 std::vector<T> outputExpected = armnnUtils::QuantizedVector<T>({
464 19, 20, 21,
465 22, 23, 24,
466 13, 14, 15,
467 16, 17, 18,
468 7, 8, 9,
469 10, 11, 12,
470 1, 2, 3,
471 4, 5, 6
472 }, qScale, qOffset);
473
474 return ReverseV2TestImpl<ArmnnType, T, 2>(workloadFactory,
475 memoryManager,
476 tensorHandleFactory,
Tianle Cheng988354d2023-06-28 13:20:47 +0100477 input,
Tracy Narinebb8d7592023-07-13 16:50:54 +0100478 axis,
Tianle Cheng988354d2023-06-28 13:20:47 +0100479 outputExpected,
480 inputInfo,
Tracy Narinebb8d7592023-07-13 16:50:54 +0100481 axisInfo,
Tianle Cheng988354d2023-06-28 13:20:47 +0100482 outputInfo);
483}
484
485template<armnn::DataType ArmnnType, typename T>
486LayerTestResult<T, 2> ReverseV2SimpleTest4Dim3Axis(
487 armnn::IWorkloadFactory& workloadFactory,
488 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
489 const armnn::ITensorHandleFactory& tensorHandleFactory)
490{
Tianle Cheng988354d2023-06-28 13:20:47 +0100491 float qScale = 1.0f;
492 int32_t qOffset = 0;
493
494 armnn::TensorInfo inputInfo({2, 2, 2, 3}, ArmnnType, qScale, qOffset);
Tracy Narinebb8d7592023-07-13 16:50:54 +0100495 armnn::TensorInfo axisInfo({3}, armnn::DataType::Signed32, qScale, qOffset);
Tianle Cheng988354d2023-06-28 13:20:47 +0100496 armnn::TensorInfo outputInfo({2, 2, 2, 3}, ArmnnType, qScale, qOffset);
497
498 std::vector<T> input = armnnUtils::QuantizedVector<T>({
499 1, 2, 3,
500 4, 5, 6,
501 7, 8, 9,
502 10, 11, 12,
503 13, 14, 15,
504 16, 17, 18,
505 19, 20, 21,
506 22, 23, 24
507 }, qScale, qOffset);
508
Tracy Narinebb8d7592023-07-13 16:50:54 +0100509 std::vector<int> axis = {0, 1, 2};
510
Tianle Cheng988354d2023-06-28 13:20:47 +0100511 std::vector<T> outputExpected = armnnUtils::QuantizedVector<T>({
512 22, 23, 24,
513 19, 20, 21,
514 16, 17, 18,
515 13, 14, 15,
516 10, 11, 12,
517 7, 8, 9,
518 4, 5, 6,
519 1, 2, 3
520 }, qScale, qOffset);
521
522 return ReverseV2TestImpl<ArmnnType, T, 2>(workloadFactory,
523 memoryManager,
524 tensorHandleFactory,
Tianle Cheng988354d2023-06-28 13:20:47 +0100525 input,
Tracy Narinebb8d7592023-07-13 16:50:54 +0100526 axis,
Tianle Cheng988354d2023-06-28 13:20:47 +0100527 outputExpected,
528 inputInfo,
Tracy Narinebb8d7592023-07-13 16:50:54 +0100529 axisInfo,
Tianle Cheng988354d2023-06-28 13:20:47 +0100530 outputInfo);
531}
532
533template<armnn::DataType ArmnnType, typename T>
534LayerTestResult<T, 2> ReverseV2SimpleTest4Dim4Axis(
535 armnn::IWorkloadFactory& workloadFactory,
536 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
537 const armnn::ITensorHandleFactory& tensorHandleFactory)
538{
Tianle Cheng988354d2023-06-28 13:20:47 +0100539 float qScale = 1.0f;
540 int32_t qOffset = 0;
541
542 armnn::TensorInfo inputInfo({2, 2, 2, 3}, ArmnnType, qScale, qOffset);
Tracy Narinebb8d7592023-07-13 16:50:54 +0100543 armnn::TensorInfo axisInfo({4}, armnn::DataType::Signed32, qScale, qOffset);
Tianle Cheng988354d2023-06-28 13:20:47 +0100544 armnn::TensorInfo outputInfo({2, 2, 2, 3}, ArmnnType, qScale, qOffset);
545
546 std::vector<T> input = armnnUtils::QuantizedVector<T>({
547 1, 2, 3,
548 4, 5, 6,
549 7, 8, 9,
550 10, 11, 12,
551 13, 14, 15,
552 16, 17, 18,
553 19, 20, 21,
554 22, 23, 24
555 }, qScale, qOffset);
556
Tracy Narinebb8d7592023-07-13 16:50:54 +0100557 std::vector<int> axis = {0, 1, 2, 3};
558
Tianle Cheng988354d2023-06-28 13:20:47 +0100559 std::vector<T> outputExpected = armnnUtils::QuantizedVector<T>({
Tracy Narinebb8d7592023-07-13 16:50:54 +0100560 24, 23, 22,
561 21, 20, 19,
562 18, 17, 16,
563 15, 14, 13,
564 12, 11, 10,
565 9, 8, 7,
566 6, 5, 4,
567 3, 2, 1
568 }, qScale, qOffset);
Tianle Cheng988354d2023-06-28 13:20:47 +0100569
570 return ReverseV2TestImpl<ArmnnType, T, 2>(workloadFactory,
571 memoryManager,
572 tensorHandleFactory,
Tianle Cheng988354d2023-06-28 13:20:47 +0100573 input,
Tracy Narinebb8d7592023-07-13 16:50:54 +0100574 axis,
Tianle Cheng988354d2023-06-28 13:20:47 +0100575 outputExpected,
576 inputInfo,
Tracy Narinebb8d7592023-07-13 16:50:54 +0100577 axisInfo,
Tianle Cheng988354d2023-06-28 13:20:47 +0100578 outputInfo);
579}
580
581template<armnn::DataType ArmnnType, typename T>
582LayerTestResult<T, 2> ReverseV2EvenRowOddColTest2Dim(
583 armnn::IWorkloadFactory& workloadFactory,
584 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
585 const armnn::ITensorHandleFactory& tensorHandleFactory)
586{
Tianle Cheng988354d2023-06-28 13:20:47 +0100587 float qScale = 1.0f;
588 int32_t qOffset = 0;
589
590 armnn::TensorInfo inputInfo({2, 3}, ArmnnType, qScale, qOffset);
Tracy Narinebb8d7592023-07-13 16:50:54 +0100591 armnn::TensorInfo axisInfo({1}, armnn::DataType::Signed32, qScale, qOffset);
Tianle Cheng988354d2023-06-28 13:20:47 +0100592 armnn::TensorInfo outputInfo({2, 3}, ArmnnType, qScale, qOffset);
593
594 std::vector<T> input = armnnUtils::QuantizedVector<T>({
595 1, 2, 3,
596 4, 5, 6
597 }, qScale, qOffset);
598
Tracy Narinebb8d7592023-07-13 16:50:54 +0100599 std::vector<int> axis = {1};
600
Tianle Cheng988354d2023-06-28 13:20:47 +0100601 std::vector<T> outputExpected = armnnUtils::QuantizedVector<T>({
602 3, 2, 1,
603 6, 5, 4
604 }, qScale, qOffset);
605
606 return ReverseV2TestImpl<ArmnnType, T, 2>(workloadFactory,
607 memoryManager,
608 tensorHandleFactory,
Tianle Cheng988354d2023-06-28 13:20:47 +0100609 input,
Tracy Narinebb8d7592023-07-13 16:50:54 +0100610 axis,
Tianle Cheng988354d2023-06-28 13:20:47 +0100611 outputExpected,
612 inputInfo,
Tracy Narinebb8d7592023-07-13 16:50:54 +0100613 axisInfo,
Tianle Cheng988354d2023-06-28 13:20:47 +0100614 outputInfo);
615}
616
617template<armnn::DataType ArmnnType, typename T>
618LayerTestResult<T, 2> ReverseV2EvenRowOddColTest3Dim(
619 armnn::IWorkloadFactory& workloadFactory,
620 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
621 const armnn::ITensorHandleFactory& tensorHandleFactory)
622{
Tianle Cheng988354d2023-06-28 13:20:47 +0100623 float qScale = 1.0f;
624 int32_t qOffset = 0;
625
626 armnn::TensorInfo inputInfo({2, 3, 1}, ArmnnType, qScale, qOffset);
Tracy Narinebb8d7592023-07-13 16:50:54 +0100627 armnn::TensorInfo axisInfo({1}, armnn::DataType::Signed32, qScale, qOffset);
Tianle Cheng988354d2023-06-28 13:20:47 +0100628 armnn::TensorInfo outputInfo({2, 3, 1}, ArmnnType, qScale, qOffset);
629
630 std::vector<T> input = armnnUtils::QuantizedVector<T>({
631 1, 2, 3,
632 4, 5, 6
633 }, qScale, qOffset);
634
Tracy Narinebb8d7592023-07-13 16:50:54 +0100635 std::vector<int> axis = {1};
636
Tianle Cheng988354d2023-06-28 13:20:47 +0100637 std::vector<T> outputExpected = armnnUtils::QuantizedVector<T>({
638 3, 2, 1,
639 6, 5, 4
640 }, qScale, qOffset);
641
642 return ReverseV2TestImpl<ArmnnType, T, 2>(workloadFactory,
643 memoryManager,
644 tensorHandleFactory,
Tianle Cheng988354d2023-06-28 13:20:47 +0100645 input,
Tracy Narinebb8d7592023-07-13 16:50:54 +0100646 axis,
Tianle Cheng988354d2023-06-28 13:20:47 +0100647 outputExpected,
648 inputInfo,
Tracy Narinebb8d7592023-07-13 16:50:54 +0100649 axisInfo,
Tianle Cheng988354d2023-06-28 13:20:47 +0100650 outputInfo);
651}
652
653template<armnn::DataType ArmnnType, typename T>
654LayerTestResult<T, 2> ReverseV2EvenRowEvenColTest2Dim(
655 armnn::IWorkloadFactory& workloadFactory,
656 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
657 const armnn::ITensorHandleFactory& tensorHandleFactory)
658{
Tianle Cheng988354d2023-06-28 13:20:47 +0100659 float qScale = 1.0f;
660 int32_t qOffset = 0;
661
662 armnn::TensorInfo inputInfo({2, 4}, ArmnnType, qScale, qOffset);
Tracy Narinebb8d7592023-07-13 16:50:54 +0100663 armnn::TensorInfo axisInfo({1}, armnn::DataType::Signed32, qScale, qOffset);
Tianle Cheng988354d2023-06-28 13:20:47 +0100664 armnn::TensorInfo outputInfo({2, 4}, ArmnnType, qScale, qOffset);
665
666 std::vector<T> input = armnnUtils::QuantizedVector<T>({
667 1, 2, 3, 4,
668 5, 6, 7, 8
669 }, qScale, qOffset);
670
Tracy Narinebb8d7592023-07-13 16:50:54 +0100671 std::vector<int> axis = {1};
672
Tianle Cheng988354d2023-06-28 13:20:47 +0100673 std::vector<T> outputExpected = armnnUtils::QuantizedVector<T>({
674 4, 3, 2, 1,
675 8, 7, 6, 5
676 }, qScale, qOffset);
677
678 return ReverseV2TestImpl<ArmnnType, T, 2>(workloadFactory,
679 memoryManager,
680 tensorHandleFactory,
Tianle Cheng988354d2023-06-28 13:20:47 +0100681 input,
Tracy Narinebb8d7592023-07-13 16:50:54 +0100682 axis,
Tianle Cheng988354d2023-06-28 13:20:47 +0100683 outputExpected,
684 inputInfo,
Tracy Narinebb8d7592023-07-13 16:50:54 +0100685 axisInfo,
Tianle Cheng988354d2023-06-28 13:20:47 +0100686 outputInfo);
687}
688
689template<armnn::DataType ArmnnType, typename T>
690LayerTestResult<T, 2> ReverseV2EvenRowEvenColTest3Dim(
691 armnn::IWorkloadFactory& workloadFactory,
692 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
693 const armnn::ITensorHandleFactory& tensorHandleFactory)
694{
Tianle Cheng988354d2023-06-28 13:20:47 +0100695 float qScale = 1.0f;
696 int32_t qOffset = 0;
697
698 armnn::TensorInfo inputInfo({2, 4, 1}, ArmnnType, qScale, qOffset);
Tracy Narinebb8d7592023-07-13 16:50:54 +0100699 armnn::TensorInfo axisInfo({1}, armnn::DataType::Signed32, qScale, qOffset);
Tianle Cheng988354d2023-06-28 13:20:47 +0100700 armnn::TensorInfo outputInfo({2, 4, 1}, ArmnnType, qScale, qOffset);
701
702 std::vector<T> input = armnnUtils::QuantizedVector<T>({
703 1, 2, 3, 4,
704 5, 6, 7, 8
705 }, qScale, qOffset);
706
Tracy Narinebb8d7592023-07-13 16:50:54 +0100707 std::vector<int> axis = {1};
708
Tianle Cheng988354d2023-06-28 13:20:47 +0100709 std::vector<T> outputExpected = armnnUtils::QuantizedVector<T>({
710 4, 3, 2, 1,
711 8, 7, 6, 5
712 }, qScale, qOffset);
713
714 return ReverseV2TestImpl<ArmnnType, T, 2>(workloadFactory,
715 memoryManager,
716 tensorHandleFactory,
Tianle Cheng988354d2023-06-28 13:20:47 +0100717 input,
Tracy Narinebb8d7592023-07-13 16:50:54 +0100718 axis,
Tianle Cheng988354d2023-06-28 13:20:47 +0100719 outputExpected,
720 inputInfo,
Tracy Narinebb8d7592023-07-13 16:50:54 +0100721 axisInfo,
Tianle Cheng988354d2023-06-28 13:20:47 +0100722 outputInfo);
723}
724
725template<armnn::DataType ArmnnType, typename T>
726LayerTestResult<T, 2> ReverseV2OddRowOddColTest2Dim(
727 armnn::IWorkloadFactory& workloadFactory,
728 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
729 const armnn::ITensorHandleFactory& tensorHandleFactory)
730{
Tianle Cheng988354d2023-06-28 13:20:47 +0100731 float qScale = 1.0f;
732 int32_t qOffset = 0;
733
734 armnn::TensorInfo inputInfo({3, 3}, ArmnnType, qScale, qOffset);
Tracy Narinebb8d7592023-07-13 16:50:54 +0100735 armnn::TensorInfo axisInfo({1}, armnn::DataType::Signed32, qScale, qOffset);
Tianle Cheng988354d2023-06-28 13:20:47 +0100736 armnn::TensorInfo outputInfo({3, 3}, ArmnnType, qScale, qOffset);
737
738 std::vector<T> input = armnnUtils::QuantizedVector<T>({
739 1, 2, 3,
740 4, 5, 6,
741 7, 8, 9
742 }, qScale, qOffset);
743
Tracy Narinebb8d7592023-07-13 16:50:54 +0100744 std::vector<int> axis = {1};
745
Tianle Cheng988354d2023-06-28 13:20:47 +0100746 std::vector<T> outputExpected = armnnUtils::QuantizedVector<T>({
747 3, 2, 1,
748 6, 5, 4,
749 9, 8, 7
750 }, qScale, qOffset);
751
752 return ReverseV2TestImpl<ArmnnType, T, 2>(workloadFactory,
753 memoryManager,
754 tensorHandleFactory,
Tianle Cheng988354d2023-06-28 13:20:47 +0100755 input,
Tracy Narinebb8d7592023-07-13 16:50:54 +0100756 axis,
Tianle Cheng988354d2023-06-28 13:20:47 +0100757 outputExpected,
758 inputInfo,
Tracy Narinebb8d7592023-07-13 16:50:54 +0100759 axisInfo,
Tianle Cheng988354d2023-06-28 13:20:47 +0100760 outputInfo);
761}
762
763template<armnn::DataType ArmnnType, typename T>
764LayerTestResult<T, 2> ReverseV2OddRowOddColTest3Dim(
765 armnn::IWorkloadFactory& workloadFactory,
766 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
767 const armnn::ITensorHandleFactory& tensorHandleFactory)
768{
Tianle Cheng988354d2023-06-28 13:20:47 +0100769 float qScale = 1.0f;
770 int32_t qOffset = 0;
771
772 armnn::TensorInfo inputInfo({3, 3, 1}, ArmnnType, qScale, qOffset);
Tracy Narinebb8d7592023-07-13 16:50:54 +0100773 armnn::TensorInfo axisInfo({1}, armnn::DataType::Signed32, qScale, qOffset);
Tianle Cheng988354d2023-06-28 13:20:47 +0100774 armnn::TensorInfo outputInfo({3, 3, 1}, ArmnnType, qScale, qOffset);
775
776 std::vector<T> input = armnnUtils::QuantizedVector<T>({
777 1, 2, 3,
778 4, 5, 6,
779 7, 8, 9
780 }, qScale, qOffset);
781
Tracy Narinebb8d7592023-07-13 16:50:54 +0100782 std::vector<int> axis = {1};
783
Tianle Cheng988354d2023-06-28 13:20:47 +0100784 std::vector<T> outputExpected = armnnUtils::QuantizedVector<T>({
785 3, 2, 1,
786 6, 5, 4,
787 9, 8, 7
788 }, qScale, qOffset);
789
790 return ReverseV2TestImpl<ArmnnType, T, 2>(workloadFactory,
791 memoryManager,
792 tensorHandleFactory,
Tianle Cheng988354d2023-06-28 13:20:47 +0100793 input,
Tracy Narinebb8d7592023-07-13 16:50:54 +0100794 axis,
Tianle Cheng988354d2023-06-28 13:20:47 +0100795 outputExpected,
796 inputInfo,
Tracy Narinebb8d7592023-07-13 16:50:54 +0100797 axisInfo,
Tianle Cheng988354d2023-06-28 13:20:47 +0100798 outputInfo);
799}
800
801template<armnn::DataType ArmnnType, typename T>
802LayerTestResult<T, 2> ReverseV2OddRowEvenColTest2Dim(
803 armnn::IWorkloadFactory& workloadFactory,
804 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
805 const armnn::ITensorHandleFactory& tensorHandleFactory)
806{
Tianle Cheng988354d2023-06-28 13:20:47 +0100807 float qScale = 1.0f;
808 int32_t qOffset = 0;
809
810 armnn::TensorInfo inputInfo({3, 4}, ArmnnType, qScale, qOffset);
Tracy Narinebb8d7592023-07-13 16:50:54 +0100811 armnn::TensorInfo axisInfo({1}, armnn::DataType::Signed32, qScale, qOffset);
Tianle Cheng988354d2023-06-28 13:20:47 +0100812 armnn::TensorInfo outputInfo({3, 4}, ArmnnType, qScale, qOffset);
813
814 std::vector<T> input = armnnUtils::QuantizedVector<T>({
815 1, 2, 3, 4,
816 5, 6, 7, 8,
817 9, 10, 11, 12
818 }, qScale, qOffset);
819
Tracy Narinebb8d7592023-07-13 16:50:54 +0100820 std::vector<int> axis = {1};
821
Tianle Cheng988354d2023-06-28 13:20:47 +0100822 std::vector<T> outputExpected = armnnUtils::QuantizedVector<T>({
823 4, 3, 2, 1,
824 8, 7, 6, 5,
825 12, 11, 10, 9
826 }, qScale, qOffset);
827
828 return ReverseV2TestImpl<ArmnnType, T, 2>(workloadFactory,
829 memoryManager,
830 tensorHandleFactory,
Tianle Cheng988354d2023-06-28 13:20:47 +0100831 input,
Tracy Narinebb8d7592023-07-13 16:50:54 +0100832 axis,
Tianle Cheng988354d2023-06-28 13:20:47 +0100833 outputExpected,
834 inputInfo,
Tracy Narinebb8d7592023-07-13 16:50:54 +0100835 axisInfo,
Tianle Cheng988354d2023-06-28 13:20:47 +0100836 outputInfo);
837}
838
839template<armnn::DataType ArmnnType, typename T>
840LayerTestResult<T, 2> ReverseV2OddRowEvenColTest3Dim(
841 armnn::IWorkloadFactory& workloadFactory,
842 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
843 const armnn::ITensorHandleFactory& tensorHandleFactory)
844{
Tianle Cheng988354d2023-06-28 13:20:47 +0100845 float qScale = 1.0f;
846 int32_t qOffset = 0;
847
848 armnn::TensorInfo inputInfo({3, 4, 1}, ArmnnType, qScale, qOffset);
Tracy Narinebb8d7592023-07-13 16:50:54 +0100849 armnn::TensorInfo axisInfo({1}, armnn::DataType::Signed32, qScale, qOffset);
Tianle Cheng988354d2023-06-28 13:20:47 +0100850 armnn::TensorInfo outputInfo({3, 4, 1}, ArmnnType, qScale, qOffset);
851
852 std::vector<T> input = armnnUtils::QuantizedVector<T>({
853 1, 2, 3, 4,
854 5, 6, 7, 8,
855 9, 10, 11, 12
856 }, qScale, qOffset);
857
Tracy Narinebb8d7592023-07-13 16:50:54 +0100858 std::vector<int> axis = {1};
859
Tianle Cheng988354d2023-06-28 13:20:47 +0100860 std::vector<T> outputExpected = armnnUtils::QuantizedVector<T>({
861 4, 3, 2, 1,
862 8, 7, 6, 5,
863 12, 11, 10, 9
864 }, qScale, qOffset);
865
866 return ReverseV2TestImpl<ArmnnType, T, 2>(workloadFactory,
867 memoryManager,
868 tensorHandleFactory,
Tianle Cheng988354d2023-06-28 13:20:47 +0100869 input,
Tracy Narinebb8d7592023-07-13 16:50:54 +0100870 axis,
Tianle Cheng988354d2023-06-28 13:20:47 +0100871 outputExpected,
872 inputInfo,
Tracy Narinebb8d7592023-07-13 16:50:54 +0100873 axisInfo,
Tianle Cheng988354d2023-06-28 13:20:47 +0100874 outputInfo);
875}
876
877template<armnn::DataType ArmnnType, typename T>
878LayerTestResult<T, 2> ReverseV2NegAxisTest2Dim1Axis(
879 armnn::IWorkloadFactory& workloadFactory,
880 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
881 const armnn::ITensorHandleFactory& tensorHandleFactory)
882{
Tianle Cheng988354d2023-06-28 13:20:47 +0100883 float qScale = 1.0f;
884 int32_t qOffset = 0;
885
886 armnn::TensorInfo inputInfo({2, 4}, ArmnnType, qScale, qOffset);
Tracy Narinebb8d7592023-07-13 16:50:54 +0100887 armnn::TensorInfo axisInfo({1}, armnn::DataType::Signed32, qScale, qOffset);
Tianle Cheng988354d2023-06-28 13:20:47 +0100888 armnn::TensorInfo outputInfo({2, 4}, ArmnnType, qScale, qOffset);
889
890 std::vector<T> input = armnnUtils::QuantizedVector<T>({
891 1, 2, 3, 4,
892 5, 6, 7, 8,
893 }, qScale, qOffset);
894
Tracy Narinebb8d7592023-07-13 16:50:54 +0100895 std::vector<int> axis = {-1};
896
Tianle Cheng988354d2023-06-28 13:20:47 +0100897 std::vector<T> outputExpected = armnnUtils::QuantizedVector<T>({
898 4, 3, 2, 1,
899 8, 7, 6, 5
900 }, qScale, qOffset);
901
902 return ReverseV2TestImpl<ArmnnType, T, 2>(workloadFactory,
903 memoryManager,
904 tensorHandleFactory,
Tianle Cheng988354d2023-06-28 13:20:47 +0100905 input,
Tracy Narinebb8d7592023-07-13 16:50:54 +0100906 axis,
Tianle Cheng988354d2023-06-28 13:20:47 +0100907 outputExpected,
908 inputInfo,
Tracy Narinebb8d7592023-07-13 16:50:54 +0100909 axisInfo,
Tianle Cheng988354d2023-06-28 13:20:47 +0100910 outputInfo);
911}
912
913template<armnn::DataType ArmnnType, typename T>
914LayerTestResult<T, 2> ReverseV2NegAxisTest3Dim2Axis(
915 armnn::IWorkloadFactory& workloadFactory,
916 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
917 const armnn::ITensorHandleFactory& tensorHandleFactory)
918{
Tianle Cheng988354d2023-06-28 13:20:47 +0100919 float qScale = 1.0f;
920 int32_t qOffset = 0;
921
922 armnn::TensorInfo inputInfo({2, 4, 1}, ArmnnType, qScale, qOffset);
Tracy Narinebb8d7592023-07-13 16:50:54 +0100923 armnn::TensorInfo axisInfo({2}, armnn::DataType::Signed32, qScale, qOffset);
Tianle Cheng988354d2023-06-28 13:20:47 +0100924 armnn::TensorInfo outputInfo({2, 4, 1}, ArmnnType, qScale, qOffset);
925
926 std::vector<T> input = armnnUtils::QuantizedVector<T>({
927 1, 2, 3, 4,
928 5, 6, 7, 8,
929 }, qScale, qOffset);
930
Tracy Narinebb8d7592023-07-13 16:50:54 +0100931 std::vector<int> axis = {1, -1};
932
Tianle Cheng988354d2023-06-28 13:20:47 +0100933 std::vector<T> outputExpected = armnnUtils::QuantizedVector<T>({
934 4, 3, 2, 1,
935 8, 7, 6, 5
936 }, qScale, qOffset);
937
938 return ReverseV2TestImpl<ArmnnType, T, 2>(workloadFactory,
939 memoryManager,
940 tensorHandleFactory,
Tianle Cheng988354d2023-06-28 13:20:47 +0100941 input,
Tracy Narinebb8d7592023-07-13 16:50:54 +0100942 axis,
Tianle Cheng988354d2023-06-28 13:20:47 +0100943 outputExpected,
944 inputInfo,
Tracy Narinebb8d7592023-07-13 16:50:54 +0100945 axisInfo,
Tianle Cheng988354d2023-06-28 13:20:47 +0100946 outputInfo);
947}
948
949template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 2>
950ReverseV2SimpleTestEmptyAxis<armnn::DataType::Float32>(
951 armnn::IWorkloadFactory& workloadFactory,
952 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
953 const armnn::ITensorHandleFactory& tensorHandleFactory);
954
955template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 2>
956ReverseV2SimpleTestEmptyTensor<armnn::DataType::Float32>(
957 armnn::IWorkloadFactory& workloadFactory,
958 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
959 const armnn::ITensorHandleFactory& tensorHandleFactory);
960
961template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 2>
962ReverseV2SimpleTest1Dim<armnn::DataType::Float32>(
963 armnn::IWorkloadFactory& workloadFactory,
964 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
965 const armnn::ITensorHandleFactory& tensorHandleFactory);
966
967template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 2>
968ReverseV2SimpleTest2Dim1Axis<armnn::DataType::Float32>(
969 armnn::IWorkloadFactory& workloadFactory,
970 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
971 const armnn::ITensorHandleFactory& tensorHandleFactory);
972
973template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 2>
974ReverseV2SimpleTest2Dim2Axis<armnn::DataType::Float32>(
975 armnn::IWorkloadFactory& workloadFactory,
976 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
977 const armnn::ITensorHandleFactory& tensorHandleFactory);
978
979template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 2>
980ReverseV2SimpleTest3Dim1Axis<armnn::DataType::Float32>(
981 armnn::IWorkloadFactory& workloadFactory,
982 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
983 const armnn::ITensorHandleFactory& tensorHandleFactory);
984
985template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 2>
986ReverseV2SimpleTest3Dim2Axis<armnn::DataType::Float32>(
987 armnn::IWorkloadFactory& workloadFactory,
988 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
989 const armnn::ITensorHandleFactory& tensorHandleFactory);
990
991template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 2>
992ReverseV2SimpleTest3Dim3Axis<armnn::DataType::Float32>(
993 armnn::IWorkloadFactory& workloadFactory,
994 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
995 const armnn::ITensorHandleFactory& tensorHandleFactory);
996
997template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 2>
998ReverseV2SimpleTest4Dim1Axis<armnn::DataType::Float32>(
999 armnn::IWorkloadFactory& workloadFactory,
1000 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1001 const armnn::ITensorHandleFactory& tensorHandleFactory);
1002
1003template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 2>
1004ReverseV2SimpleTest4Dim2Axis<armnn::DataType::Float32>(
1005 armnn::IWorkloadFactory& workloadFactory,
1006 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1007 const armnn::ITensorHandleFactory& tensorHandleFactory);
1008
1009template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 2>
1010ReverseV2SimpleTest4Dim3Axis<armnn::DataType::Float32>(
1011 armnn::IWorkloadFactory& workloadFactory,
1012 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1013 const armnn::ITensorHandleFactory& tensorHandleFactory);
1014
1015template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 2>
1016ReverseV2SimpleTest4Dim4Axis<armnn::DataType::Float32>(
1017 armnn::IWorkloadFactory& workloadFactory,
1018 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1019 const armnn::ITensorHandleFactory& tensorHandleFactory);
1020
1021template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 2>
1022ReverseV2EvenRowOddColTest2Dim<armnn::DataType::Float32>(
1023 armnn::IWorkloadFactory& workloadFactory,
1024 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1025 const armnn::ITensorHandleFactory& tensorHandleFactory);
1026
1027template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 2>
1028ReverseV2EvenRowOddColTest3Dim<armnn::DataType::Float32>(
1029 armnn::IWorkloadFactory& workloadFactory,
1030 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1031 const armnn::ITensorHandleFactory& tensorHandleFactory);
1032
1033template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 2>
1034ReverseV2EvenRowEvenColTest2Dim<armnn::DataType::Float32>(
1035 armnn::IWorkloadFactory& workloadFactory,
1036 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1037 const armnn::ITensorHandleFactory& tensorHandleFactory);
1038
1039template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 2>
1040ReverseV2EvenRowEvenColTest3Dim<armnn::DataType::Float32>(
1041 armnn::IWorkloadFactory& workloadFactory,
1042 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1043 const armnn::ITensorHandleFactory& tensorHandleFactory);
1044
1045template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 2>
1046ReverseV2OddRowOddColTest2Dim<armnn::DataType::Float32>(
1047 armnn::IWorkloadFactory& workloadFactory,
1048 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1049 const armnn::ITensorHandleFactory& tensorHandleFactory);
1050
1051template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 2>
1052ReverseV2OddRowOddColTest3Dim<armnn::DataType::Float32>(
1053 armnn::IWorkloadFactory& workloadFactory,
1054 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1055 const armnn::ITensorHandleFactory& tensorHandleFactory);
1056
1057template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 2>
1058ReverseV2OddRowEvenColTest2Dim<armnn::DataType::Float32>(
1059 armnn::IWorkloadFactory& workloadFactory,
1060 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1061 const armnn::ITensorHandleFactory& tensorHandleFactory);
1062
1063template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 2>
1064ReverseV2OddRowEvenColTest3Dim<armnn::DataType::Float32>(
1065 armnn::IWorkloadFactory& workloadFactory,
1066 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1067 const armnn::ITensorHandleFactory& tensorHandleFactory);
1068
1069template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 2>
1070ReverseV2NegAxisTest2Dim1Axis<armnn::DataType::Float32>(
1071 armnn::IWorkloadFactory& workloadFactory,
1072 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1073 const armnn::ITensorHandleFactory& tensorHandleFactory);
1074
1075template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 2>
1076ReverseV2NegAxisTest3Dim2Axis<armnn::DataType::Float32>(
1077 armnn::IWorkloadFactory& workloadFactory,
1078 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1079 const armnn::ITensorHandleFactory& tensorHandleFactory);
1080
1081template LayerTestResult<armnn::ResolveType<armnn::DataType::Float16>, 2>
1082ReverseV2SimpleTest2Dim2Axis<armnn::DataType::Float16>(
1083 armnn::IWorkloadFactory& workloadFactory,
1084 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1085 const armnn::ITensorHandleFactory& tensorHandleFactory);
1086
1087template LayerTestResult<armnn::ResolveType<armnn::DataType::QAsymmS8>, 2>
1088ReverseV2SimpleTest2Dim2Axis<armnn::DataType::QAsymmS8>(
1089 armnn::IWorkloadFactory& workloadFactory,
1090 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1091 const armnn::ITensorHandleFactory& tensorHandleFactory);
1092
1093template LayerTestResult<armnn::ResolveType<armnn::DataType::QAsymmU8>, 2>
1094ReverseV2SimpleTest2Dim2Axis<armnn::DataType::QAsymmU8>(
1095 armnn::IWorkloadFactory& workloadFactory,
1096 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1097 const armnn::ITensorHandleFactory& tensorHandleFactory);
1098
1099template LayerTestResult<armnn::ResolveType<armnn::DataType::QSymmS16>, 2>
1100ReverseV2SimpleTest2Dim2Axis<armnn::DataType::QSymmS16>(
1101 armnn::IWorkloadFactory& workloadFactory,
1102 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Tracy Narinebb8d7592023-07-13 16:50:54 +01001103 const armnn::ITensorHandleFactory& tensorHandleFactory);