blob: 5511f86e17320165c9ff47f814a97118c7e41bec [file] [log] [blame]
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +01001//
Teresa Charlinfbf0e5b2020-08-17 01:01:06 +01002// Copyright © 2017 Arm Ltd and Contributors. All rights reserved.
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +01003// SPDX-License-Identifier: MIT
4//
5
6#include "PadTestImpl.hpp"
7
Aron Virginas-Tar48623a02019-10-22 10:00:28 +01008#include <QuantizeHelper.hpp>
9
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +010010#include <backendsCommon/test/TensorCopyUtils.hpp>
11#include <backendsCommon/test/WorkloadTestUtils.hpp>
12
13#include <test/TensorHelpers.hpp>
14
15//
16// Implementation templates
17//
18
19template<armnn::DataType ArmnnType, typename T>
20LayerTestResult<T, 2> Pad2dTestCommon(
21 armnn::IWorkloadFactory& workloadFactory,
22 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Finn Williams826a5432020-08-27 16:15:20 +010023 const armnn::ITensorHandleFactory& tensorHandleFactory,
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +010024 float qScale,
25 int32_t qOffset,
26 const float customPaddingValue)
27{
Jan Eilers8eb25602020-03-09 12:13:48 +000028 IgnoreUnused(memoryManager);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +010029 const armnn::TensorShape inputShape{ 3, 3 };
30 const armnn::TensorShape outputShape{ 7, 7 };
31
32 const armnn::TensorInfo inputTensorInfo(inputShape, ArmnnType, qScale, qOffset);
33 const armnn::TensorInfo outputTensorInfo(outputShape, ArmnnType, qScale, qOffset);
34
Aron Virginas-Tar48623a02019-10-22 10:00:28 +010035 std::vector<T> inputValues = armnnUtils::QuantizedVector<T>(
36 {
37 // Height (3) x Width (3)
38 4, 8, 6,
39 7, 4, 4,
40 3, 2, 4
41 },
42 qScale, qOffset);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +010043
44 auto p = customPaddingValue;
Aron Virginas-Tar48623a02019-10-22 10:00:28 +010045 std::vector<T> expectedOutputValues = armnnUtils::QuantizedVector<T>(
46 {
47 p, p, p, p, p, p, p,
48 p, p, p, p, p, p, p,
49 p, p, 4, 8, 6, p, p,
50 p, p, 7, 4, 4, p, p,
51 p, p, 3, 2, 4, p, p,
52 p, p, p, p, p, p, p,
53 p, p, p, p, p, p, p
54 },
55 qScale, qOffset);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +010056
57 auto inputTensor = MakeTensor<T, 2>(inputTensorInfo, std::vector<T>(inputValues));
58
59 LayerTestResult<T, 2> result(outputTensorInfo);
60 result.outputExpected = MakeTensor<T, 2>(outputTensorInfo, std::vector<T>(expectedOutputValues));
61
Finn Williams826a5432020-08-27 16:15:20 +010062 std::unique_ptr<armnn::ITensorHandle> inputHandle = tensorHandleFactory.CreateTensorHandle(inputTensorInfo);
63 std::unique_ptr<armnn::ITensorHandle> outputHandle = tensorHandleFactory.CreateTensorHandle(outputTensorInfo);
64
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +010065
66 armnn::PadQueueDescriptor descriptor;
67
68 std::vector<std::pair<unsigned int, unsigned int>> padList;
69 padList.push_back(std::pair<unsigned int, unsigned int>(2,2));
70 padList.push_back(std::pair<unsigned int, unsigned int>(2,2));
71
72 descriptor.m_Parameters.m_PadList = padList;
73 descriptor.m_Parameters.m_PadValue = customPaddingValue;
74 armnn::WorkloadInfo info;
75
76 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
77 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
78
79 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreatePad(descriptor, info);
80
81 inputHandle->Allocate();
82 outputHandle->Allocate();
83
84 CopyDataToITensorHandle(inputHandle.get(), &inputTensor[0][0]);
85
86 workload->PostAllocationConfigure();
87 workload->Execute();
88
89 CopyDataFromITensorHandle(&result.output[0][0], outputHandle.get());
90
91 return result;
92}
93
94template<armnn::DataType ArmnnType, typename T>
95LayerTestResult<T, 3> Pad3dTestCommon(
96 armnn::IWorkloadFactory& workloadFactory,
97 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Finn Williams826a5432020-08-27 16:15:20 +010098 const armnn::ITensorHandleFactory& tensorHandleFactory,
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +010099 float qScale,
100 int32_t qOffset)
101{
Jan Eilers8eb25602020-03-09 12:13:48 +0000102 IgnoreUnused(memoryManager);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100103 const armnn::TensorShape inputShape{ 2, 2, 2 };
104 const armnn::TensorShape outputShape{ 3, 5, 6 };
105
106 const armnn::TensorInfo inputTensorInfo(inputShape, ArmnnType, qScale, qOffset);
107 const armnn::TensorInfo outputTensorInfo(outputShape, ArmnnType, qScale, qOffset);
108
Aron Virginas-Tar48623a02019-10-22 10:00:28 +0100109 std::vector<T> inputValues = armnnUtils::QuantizedVector<T>(
110 {
111 // Channel 0, Height (2) x Width (2)
112 0, 4,
113 2, 5,
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100114
Aron Virginas-Tar48623a02019-10-22 10:00:28 +0100115 // Channel 1, Height (2) x Width (2)
116 6, 1,
117 5, 2
118 },
119 qScale, qOffset);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100120
Aron Virginas-Tar48623a02019-10-22 10:00:28 +0100121 std::vector<T> expectedOutputValues = armnnUtils::QuantizedVector<T>(
122 {
123 0, 0, 0, 0, 0, 0,
124 0, 0, 0, 0, 0, 0,
125 0, 0, 0, 4, 0, 0,
126 0, 0, 2, 5, 0, 0,
127 0, 0, 0, 0, 0, 0,
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100128
Aron Virginas-Tar48623a02019-10-22 10:00:28 +0100129 0, 0, 0, 0, 0, 0,
130 0, 0, 0, 0, 0, 0,
131 0, 0, 6, 1, 0, 0,
132 0, 0, 5, 2, 0, 0,
133 0, 0, 0, 0, 0, 0,
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100134
Aron Virginas-Tar48623a02019-10-22 10:00:28 +0100135 0, 0, 0, 0, 0, 0,
136 0, 0, 0, 0, 0, 0,
137 0, 0, 0, 0, 0, 0,
138 0, 0, 0, 0, 0, 0,
139 0, 0, 0, 0, 0, 0
140 },
141 qScale, qOffset);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100142
143 auto inputTensor = MakeTensor<T, 3>(inputTensorInfo, std::vector<T>(inputValues));
144
145 LayerTestResult<T, 3> result(outputTensorInfo);
146 result.outputExpected = MakeTensor<T, 3>(outputTensorInfo, std::vector<T>(expectedOutputValues));
147
Finn Williams826a5432020-08-27 16:15:20 +0100148 std::unique_ptr<armnn::ITensorHandle> inputHandle = tensorHandleFactory.CreateTensorHandle(inputTensorInfo);
149 std::unique_ptr<armnn::ITensorHandle> outputHandle = tensorHandleFactory.CreateTensorHandle(outputTensorInfo);
150
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100151
152 armnn::PadQueueDescriptor descriptor;
153
154 std::vector<std::pair<unsigned int, unsigned int>> PadList;
155 PadList.push_back(std::pair<unsigned int, unsigned int>(0,1));
156 PadList.push_back(std::pair<unsigned int, unsigned int>(2,1));
157 PadList.push_back(std::pair<unsigned int, unsigned int>(2,2));
158
159 descriptor.m_Parameters.m_PadList = PadList;
160 armnn::WorkloadInfo info;
161
162 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
163 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
164
165 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreatePad(descriptor, info);
166
167 inputHandle->Allocate();
168 outputHandle->Allocate();
169
170 CopyDataToITensorHandle(inputHandle.get(), &inputTensor[0][0][0]);
171
172 workload->PostAllocationConfigure();
173 workload->Execute();
174
175 CopyDataFromITensorHandle(&result.output[0][0][0], outputHandle.get());
176
177 return result;
178}
179
180template<armnn::DataType ArmnnType, typename T>
181LayerTestResult<T, 4> Pad4dTestCommon(
182 armnn::IWorkloadFactory& workloadFactory,
183 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Finn Williams826a5432020-08-27 16:15:20 +0100184 const armnn::ITensorHandleFactory& tensorHandleFactory,
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100185 float qScale,
186 int32_t qOffset)
187{
Jan Eilers8eb25602020-03-09 12:13:48 +0000188 IgnoreUnused(memoryManager);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100189 const armnn::TensorShape inputShape{ 2, 2, 3, 2 };
190 const armnn::TensorShape outputShape{ 4, 5, 7, 4 };
191
192 const armnn::TensorInfo inputTensorInfo(inputShape, ArmnnType, qScale, qOffset);
193 const armnn::TensorInfo outputTensorInfo(outputShape, ArmnnType, qScale, qOffset);
194
Aron Virginas-Tar48623a02019-10-22 10:00:28 +0100195 std::vector<T> inputValues = armnnUtils::QuantizedVector<T>(
196 {
197 // Batch 0, Channel 0, Height (3) x Width (2)
198 0, 1,
199 2, 3,
200 4, 5,
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100201
Aron Virginas-Tar48623a02019-10-22 10:00:28 +0100202 // Batch 0, Channel 1, Height (3) x Width (2)
203 6, 7,
204 8, 9,
205 10, 11,
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100206
Aron Virginas-Tar48623a02019-10-22 10:00:28 +0100207 // Batch 1, Channel 0, Height (3) x Width (2)
208 12, 13,
209 14, 15,
210 16, 17,
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100211
Aron Virginas-Tar48623a02019-10-22 10:00:28 +0100212 // Batch 1, Channel 1, Height (3) x Width (2)
213 18, 19,
214 20, 21,
215 22, 23
216 },
217 qScale, qOffset);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100218
Aron Virginas-Tar48623a02019-10-22 10:00:28 +0100219 std::vector<T> expectedOutputValues = armnnUtils::QuantizedVector<T>(
220 {
221 0, 0, 0, 0,
222 0, 0, 0, 0,
223 0, 0, 0, 0,
224 0, 0, 0, 0,
225 0, 0, 0, 0,
226 0, 0, 0, 0,
227 0, 0, 0, 0,
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100228
Aron Virginas-Tar48623a02019-10-22 10:00:28 +0100229 0, 0, 0, 0,
230 0, 0, 0, 0,
231 0, 0, 0, 0,
232 0, 0, 0, 0,
233 0, 0, 0, 0,
234 0, 0, 0, 0,
235 0, 0, 0, 0,
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100236
Aron Virginas-Tar48623a02019-10-22 10:00:28 +0100237 0, 0, 0, 0,
238 0, 0, 0, 0,
239 0, 0, 0, 0,
240 0, 0, 0, 0,
241 0, 0, 0, 0,
242 0, 0, 0, 0,
243 0, 0, 0, 0,
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100244
Aron Virginas-Tar48623a02019-10-22 10:00:28 +0100245 0, 0, 0, 0,
246 0, 0, 0, 0,
247 0, 0, 0, 0,
248 0, 0, 0, 0,
249 0, 0, 0, 0,
250 0, 0, 0, 0,
251 0, 0, 0, 0,
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100252
Aron Virginas-Tar48623a02019-10-22 10:00:28 +0100253 0, 0, 0, 0,
254 0, 0, 0, 0,
255 0, 0, 0, 0,
256 0, 0, 0, 0,
257 0, 0, 0, 0,
258 0, 0, 0, 0,
259 0, 0, 0, 0,
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100260
Aron Virginas-Tar48623a02019-10-22 10:00:28 +0100261 0, 0, 0, 0,
262 0, 0, 0, 0,
263 0, 0, 0, 0,
264 0, 0, 0, 0,
265 0, 0, 0, 0,
266 0, 0, 0, 0,
267 0, 0, 0, 0,
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100268
Aron Virginas-Tar48623a02019-10-22 10:00:28 +0100269 0, 0, 0, 0,
270 0, 0, 0, 0,
271 0, 0, 0, 0,
272 0, 0, 0, 0,
273 0, 0, 0, 0,
274 0, 0, 0, 0,
275 0, 0, 0, 0,
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100276
Aron Virginas-Tar48623a02019-10-22 10:00:28 +0100277 0, 0, 0, 0,
278 0, 0, 0, 0,
279 0, 0, 0, 0,
280 0, 0, 1, 0,
281 0, 2, 3, 0,
282 0, 4, 5, 0,
283 0, 0, 0, 0,
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100284
Aron Virginas-Tar48623a02019-10-22 10:00:28 +0100285 0, 0, 0, 0,
286 0, 0, 0, 0,
287 0, 0, 0, 0,
288 0, 6, 7, 0,
289 0, 8, 9, 0,
290 0, 10, 11, 0,
291 0, 0, 0, 0,
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100292
Aron Virginas-Tar48623a02019-10-22 10:00:28 +0100293 0, 0, 0, 0,
294 0, 0, 0, 0,
295 0, 0, 0, 0,
296 0, 0, 0, 0,
297 0, 0, 0, 0,
298 0, 0, 0, 0,
299 0, 0, 0, 0,
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100300
Aron Virginas-Tar48623a02019-10-22 10:00:28 +0100301 0, 0, 0, 0,
302 0, 0, 0, 0,
303 0, 0, 0, 0,
304 0, 0, 0, 0,
305 0, 0, 0, 0,
306 0, 0, 0, 0,
307 0, 0, 0, 0,
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100308
Aron Virginas-Tar48623a02019-10-22 10:00:28 +0100309 0, 0, 0, 0,
310 0, 0, 0, 0,
311 0, 0, 0, 0,
312 0, 0, 0, 0,
313 0, 0, 0, 0,
314 0, 0, 0, 0,
315 0, 0, 0, 0,
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100316
Aron Virginas-Tar48623a02019-10-22 10:00:28 +0100317 0, 0, 0, 0,
318 0, 0, 0, 0,
319 0, 0, 0, 0,
320 0, 12, 13, 0,
321 0, 14, 15, 0,
322 0, 16, 17, 0,
323 0, 0, 0, 0,
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100324
Aron Virginas-Tar48623a02019-10-22 10:00:28 +0100325 0, 0, 0, 0,
326 0, 0, 0, 0,
327 0, 0, 0, 0,
328 0, 18, 19, 0,
329 0, 20, 21, 0,
330 0, 22, 23, 0,
331 0, 0, 0, 0,
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100332
Aron Virginas-Tar48623a02019-10-22 10:00:28 +0100333 0, 0, 0, 0,
334 0, 0, 0, 0,
335 0, 0, 0, 0,
336 0, 0, 0, 0,
337 0, 0, 0, 0,
338 0, 0, 0, 0,
339 0, 0, 0, 0,
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100340
Aron Virginas-Tar48623a02019-10-22 10:00:28 +0100341 0, 0, 0, 0,
342 0, 0, 0, 0,
343 0, 0, 0, 0,
344 0, 0, 0, 0,
345 0, 0, 0, 0,
346 0, 0, 0, 0,
347 0, 0, 0, 0,
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100348
Aron Virginas-Tar48623a02019-10-22 10:00:28 +0100349 0, 0, 0, 0,
350 0, 0, 0, 0,
351 0, 0, 0, 0,
352 0, 0, 0, 0,
353 0, 0, 0, 0,
354 0, 0, 0, 0,
355 0, 0, 0, 0,
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100356
Aron Virginas-Tar48623a02019-10-22 10:00:28 +0100357 0, 0, 0, 0,
358 0, 0, 0, 0,
359 0, 0, 0, 0,
360 0, 0, 0, 0,
361 0, 0, 0, 0,
362 0, 0, 0, 0,
363 0, 0, 0, 0,
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100364
Aron Virginas-Tar48623a02019-10-22 10:00:28 +0100365 0, 0, 0, 0,
366 0, 0, 0, 0,
367 0, 0, 0, 0,
368 0, 0, 0, 0,
369 0, 0, 0, 0,
370 0, 0, 0, 0,
371 0, 0, 0, 0,
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100372
Aron Virginas-Tar48623a02019-10-22 10:00:28 +0100373 0, 0, 0, 0,
374 0, 0, 0, 0,
375 0, 0, 0, 0,
376 0, 0, 0, 0,
377 0, 0, 0, 0,
378 0, 0, 0, 0,
379 0, 0, 0, 0
380 },
381 qScale, qOffset);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100382
383 auto inputTensor = MakeTensor<T, 4>(inputTensorInfo, std::vector<T>(inputValues));
384
385 LayerTestResult<T, 4> result(outputTensorInfo);
386 result.outputExpected = MakeTensor<T, 4>(outputTensorInfo, std::vector<T>(expectedOutputValues));
387
Finn Williams826a5432020-08-27 16:15:20 +0100388 std::unique_ptr<armnn::ITensorHandle> inputHandle = tensorHandleFactory.CreateTensorHandle(inputTensorInfo);
389 std::unique_ptr<armnn::ITensorHandle> outputHandle = tensorHandleFactory.CreateTensorHandle(outputTensorInfo);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100390
391 armnn::PadQueueDescriptor descriptor;
392
393 std::vector<std::pair<unsigned int, unsigned int>> PadList;
394 PadList.push_back(std::pair<unsigned int, unsigned int>(1,1));
395 PadList.push_back(std::pair<unsigned int, unsigned int>(2,1));
396 PadList.push_back(std::pair<unsigned int, unsigned int>(3,1));
397 PadList.push_back(std::pair<unsigned int, unsigned int>(1,1));
398
399 descriptor.m_Parameters.m_PadList = PadList;
400 armnn::WorkloadInfo info;
401
402 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
403 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
404
405 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreatePad(descriptor, info);
406
407 inputHandle->Allocate();
408 outputHandle->Allocate();
409
410 CopyDataToITensorHandle(inputHandle.get(), &inputTensor[0][0][0][0]);
411
412 workload->PostAllocationConfigure();
413 workload->Execute();
414
415 CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
416
417 return result;
418}
419
420//
421// Explicit template specializations
422//
423
Derek Lambertif90c56d2020-01-10 17:14:08 +0000424template LayerTestResult<armnn::ResolveType<armnn::DataType::QSymmS16>, 2>
425Pad2dTestCommon<armnn::DataType::QSymmS16>(
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100426 armnn::IWorkloadFactory& workloadFactory,
427 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Finn Williams826a5432020-08-27 16:15:20 +0100428 const armnn::ITensorHandleFactory& tensorHandleFactory,
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100429 float qScale,
430 int32_t qOffset,
431 const float customPaddingValue);
432
Derek Lambertif90c56d2020-01-10 17:14:08 +0000433template LayerTestResult<armnn::ResolveType<armnn::DataType::QSymmS16>, 3>
434Pad3dTestCommon<armnn::DataType::QSymmS16>(
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100435 armnn::IWorkloadFactory& workloadFactory,
436 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Finn Williams826a5432020-08-27 16:15:20 +0100437 const armnn::ITensorHandleFactory& tensorHandleFactory,
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100438 float qScale,
439 int32_t qOffset);
440
Derek Lambertif90c56d2020-01-10 17:14:08 +0000441template LayerTestResult<armnn::ResolveType<armnn::DataType::QSymmS16>, 4>
442Pad4dTestCommon<armnn::DataType::QSymmS16>(
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100443 armnn::IWorkloadFactory& workloadFactory,
444 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
Finn Williams826a5432020-08-27 16:15:20 +0100445 const armnn::ITensorHandleFactory& tensorHandleFactory,
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100446 float qScale,
447 int32_t qOffset);
448
449//
450// Implementation functions
451//
452
453LayerTestResult<uint8_t, 2> PadUint82dTest(
454 armnn::IWorkloadFactory& workloadFactory,
Finn Williams826a5432020-08-27 16:15:20 +0100455 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
456 const armnn::ITensorHandleFactory& tensorHandleFactory)
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100457{
Finn Williams826a5432020-08-27 16:15:20 +0100458 return Pad2dTestCommon<armnn::DataType::QAsymmU8>(workloadFactory, memoryManager, tensorHandleFactory, 1.0f, 0);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100459}
460
461LayerTestResult<uint8_t, 2> PadUint82dCustomPaddingTest(
462 armnn::IWorkloadFactory& workloadFactory,
Finn Williams826a5432020-08-27 16:15:20 +0100463 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
464 const armnn::ITensorHandleFactory& tensorHandleFactory)
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100465{
Finn Williams826a5432020-08-27 16:15:20 +0100466 return Pad2dTestCommon<armnn::DataType::QAsymmU8>(
467 workloadFactory, memoryManager, tensorHandleFactory, 1.0f, 0, 1.0f);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100468}
469
470LayerTestResult<uint8_t, 3> PadUint83dTest(
471 armnn::IWorkloadFactory& workloadFactory,
Finn Williams826a5432020-08-27 16:15:20 +0100472 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
473 const armnn::ITensorHandleFactory& tensorHandleFactory)
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100474{
Finn Williams826a5432020-08-27 16:15:20 +0100475 return Pad3dTestCommon<armnn::DataType::QAsymmU8>(workloadFactory, memoryManager, tensorHandleFactory, 1.0f, 0);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100476}
477
478LayerTestResult<uint8_t, 4> PadUint84dTest(
479 armnn::IWorkloadFactory& workloadFactory,
Finn Williams826a5432020-08-27 16:15:20 +0100480 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
481 const armnn::ITensorHandleFactory& tensorHandleFactory)
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100482{
Finn Williams826a5432020-08-27 16:15:20 +0100483 return Pad4dTestCommon<armnn::DataType::QAsymmU8>(workloadFactory, memoryManager, tensorHandleFactory, 1.0f, 0);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100484}
485
486LayerTestResult<float, 2> PadFloat322dTest(
487 armnn::IWorkloadFactory& workloadFactory,
Finn Williams826a5432020-08-27 16:15:20 +0100488 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
489 const armnn::ITensorHandleFactory& tensorHandleFactory)
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100490{
Finn Williams826a5432020-08-27 16:15:20 +0100491 return Pad2dTestCommon<armnn::DataType::Float32>(workloadFactory, memoryManager, tensorHandleFactory, 0.0f, 0);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100492}
493
494LayerTestResult<float, 2> PadFloat322dCustomPaddingTest(
495 armnn::IWorkloadFactory& workloadFactory,
Finn Williams826a5432020-08-27 16:15:20 +0100496 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
497 const armnn::ITensorHandleFactory& tensorHandleFactory)
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100498{
Finn Williams826a5432020-08-27 16:15:20 +0100499 return Pad2dTestCommon<armnn::DataType::Float32>(
500 workloadFactory, memoryManager, tensorHandleFactory, 0.0f, 0, 1.0f);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100501}
502
503LayerTestResult<float, 3> PadFloat323dTest(
504 armnn::IWorkloadFactory& workloadFactory,
Finn Williams826a5432020-08-27 16:15:20 +0100505 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
506 const armnn::ITensorHandleFactory& tensorHandleFactory)
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100507{
Finn Williams826a5432020-08-27 16:15:20 +0100508 return Pad3dTestCommon<armnn::DataType::Float32>(workloadFactory, memoryManager, tensorHandleFactory, 0.0f, 0);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100509}
510
511LayerTestResult<float, 4> PadFloat324dTest(
512 armnn::IWorkloadFactory& workloadFactory,
Finn Williams826a5432020-08-27 16:15:20 +0100513 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
514 const armnn::ITensorHandleFactory& tensorHandleFactory)
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100515{
Finn Williams826a5432020-08-27 16:15:20 +0100516 return Pad4dTestCommon<armnn::DataType::Float32>(workloadFactory, memoryManager, tensorHandleFactory, 0.0f, 0);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100517}
Narumol Prangnawarat44179c32020-03-11 14:51:27 +0000518
519LayerTestResult<armnn::BFloat16, 2> PadBFloat162dTest(
520 armnn::IWorkloadFactory& workloadFactory,
Finn Williams826a5432020-08-27 16:15:20 +0100521 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
522 const armnn::ITensorHandleFactory& tensorHandleFactory)
Narumol Prangnawarat44179c32020-03-11 14:51:27 +0000523{
Finn Williams826a5432020-08-27 16:15:20 +0100524 return Pad2dTestCommon<armnn::DataType::BFloat16>(workloadFactory, memoryManager, tensorHandleFactory, 0.0f, 0);
Narumol Prangnawarat44179c32020-03-11 14:51:27 +0000525}
526
527LayerTestResult<armnn::BFloat16, 2> PadBFloat162dCustomPaddingTest(
528 armnn::IWorkloadFactory& workloadFactory,
Finn Williams826a5432020-08-27 16:15:20 +0100529 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
530 const armnn::ITensorHandleFactory& tensorHandleFactory)
Narumol Prangnawarat44179c32020-03-11 14:51:27 +0000531{
Finn Williams826a5432020-08-27 16:15:20 +0100532 return Pad2dTestCommon<armnn::DataType::BFloat16>(
533 workloadFactory, memoryManager, tensorHandleFactory, 0.0f, 0, 1.0f);
Narumol Prangnawarat44179c32020-03-11 14:51:27 +0000534}
535
536LayerTestResult<armnn::BFloat16, 3> PadBFloat163dTest(
537 armnn::IWorkloadFactory& workloadFactory,
Finn Williams826a5432020-08-27 16:15:20 +0100538 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
539 const armnn::ITensorHandleFactory& tensorHandleFactory)
Narumol Prangnawarat44179c32020-03-11 14:51:27 +0000540{
Finn Williams826a5432020-08-27 16:15:20 +0100541 return Pad3dTestCommon<armnn::DataType::BFloat16>(workloadFactory, memoryManager, tensorHandleFactory, 0.0f, 0);
Narumol Prangnawarat44179c32020-03-11 14:51:27 +0000542}
543
544LayerTestResult<armnn::BFloat16, 4> PadBFloat164dTest(
545 armnn::IWorkloadFactory& workloadFactory,
Finn Williams826a5432020-08-27 16:15:20 +0100546 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
547 const armnn::ITensorHandleFactory& tensorHandleFactory)
Narumol Prangnawarat44179c32020-03-11 14:51:27 +0000548{
Finn Williams826a5432020-08-27 16:15:20 +0100549 return Pad4dTestCommon<armnn::DataType::BFloat16>(workloadFactory, memoryManager, tensorHandleFactory, 0.0f, 0);
Narumol Prangnawarat44179c32020-03-11 14:51:27 +0000550}
Sadik Armagan041b3c02020-06-04 10:32:18 +0100551
552LayerTestResult<int8_t, 2> PadInt82dTest(
553 armnn::IWorkloadFactory& workloadFactory,
Finn Williams826a5432020-08-27 16:15:20 +0100554 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
555 const armnn::ITensorHandleFactory& tensorHandleFactory)
Sadik Armagan041b3c02020-06-04 10:32:18 +0100556{
Finn Williams826a5432020-08-27 16:15:20 +0100557 return Pad2dTestCommon<armnn::DataType::QSymmS8>(
558 workloadFactory, memoryManager, tensorHandleFactory, 1.0f, 0);
Sadik Armagan041b3c02020-06-04 10:32:18 +0100559}
560
561LayerTestResult<int8_t, 2> PadInt82dCustomPaddingTest(
562 armnn::IWorkloadFactory& workloadFactory,
Finn Williams826a5432020-08-27 16:15:20 +0100563 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
564 const armnn::ITensorHandleFactory& tensorHandleFactory)
Sadik Armagan041b3c02020-06-04 10:32:18 +0100565{
Finn Williams826a5432020-08-27 16:15:20 +0100566 return Pad2dTestCommon<armnn::DataType::QSymmS8>(
567 workloadFactory, memoryManager, tensorHandleFactory, 1.0f, 0, 1.0f);
Sadik Armagan041b3c02020-06-04 10:32:18 +0100568}
569
570LayerTestResult<int8_t, 3> PadInt83dTest(
571 armnn::IWorkloadFactory& workloadFactory,
Finn Williams826a5432020-08-27 16:15:20 +0100572 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
573 const armnn::ITensorHandleFactory& tensorHandleFactory)
Sadik Armagan041b3c02020-06-04 10:32:18 +0100574{
Finn Williams826a5432020-08-27 16:15:20 +0100575 return Pad3dTestCommon<armnn::DataType::QSymmS8>(workloadFactory, memoryManager, tensorHandleFactory, 1.0f, 0);
Sadik Armagan041b3c02020-06-04 10:32:18 +0100576}
577
578LayerTestResult<int8_t, 4> PadInt84dTest(
579 armnn::IWorkloadFactory& workloadFactory,
Finn Williams826a5432020-08-27 16:15:20 +0100580 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
581 const armnn::ITensorHandleFactory& tensorHandleFactory)
Sadik Armagan041b3c02020-06-04 10:32:18 +0100582{
Finn Williams826a5432020-08-27 16:15:20 +0100583 return Pad4dTestCommon<armnn::DataType::QSymmS8>(workloadFactory, memoryManager, tensorHandleFactory, 1.0f, 0);
Sadik Armagan041b3c02020-06-04 10:32:18 +0100584}