blob: 35e6103f7fbe24a38fd5c2e2305e68e804f69195 [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,
23 float qScale,
24 int32_t qOffset,
25 const float customPaddingValue)
26{
Jan Eilers8eb25602020-03-09 12:13:48 +000027 IgnoreUnused(memoryManager);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +010028 const armnn::TensorShape inputShape{ 3, 3 };
29 const armnn::TensorShape outputShape{ 7, 7 };
30
31 const armnn::TensorInfo inputTensorInfo(inputShape, ArmnnType, qScale, qOffset);
32 const armnn::TensorInfo outputTensorInfo(outputShape, ArmnnType, qScale, qOffset);
33
Aron Virginas-Tar48623a02019-10-22 10:00:28 +010034 std::vector<T> inputValues = armnnUtils::QuantizedVector<T>(
35 {
36 // Height (3) x Width (3)
37 4, 8, 6,
38 7, 4, 4,
39 3, 2, 4
40 },
41 qScale, qOffset);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +010042
43 auto p = customPaddingValue;
Aron Virginas-Tar48623a02019-10-22 10:00:28 +010044 std::vector<T> expectedOutputValues = armnnUtils::QuantizedVector<T>(
45 {
46 p, p, p, p, p, p, p,
47 p, p, p, p, p, p, p,
48 p, p, 4, 8, 6, p, p,
49 p, p, 7, 4, 4, p, p,
50 p, p, 3, 2, 4, p, p,
51 p, p, p, p, p, p, p,
52 p, p, p, p, p, p, p
53 },
54 qScale, qOffset);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +010055
56 auto inputTensor = MakeTensor<T, 2>(inputTensorInfo, std::vector<T>(inputValues));
57
58 LayerTestResult<T, 2> result(outputTensorInfo);
59 result.outputExpected = MakeTensor<T, 2>(outputTensorInfo, std::vector<T>(expectedOutputValues));
60
Teresa Charlinfbf0e5b2020-08-17 01:01:06 +010061 ARMNN_NO_DEPRECATE_WARN_BEGIN
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +010062 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
63 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
Teresa Charlinfbf0e5b2020-08-17 01:01:06 +010064 ARMNN_NO_DEPRECATE_WARN_END
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,
98 float qScale,
99 int32_t qOffset)
100{
Jan Eilers8eb25602020-03-09 12:13:48 +0000101 IgnoreUnused(memoryManager);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100102 const armnn::TensorShape inputShape{ 2, 2, 2 };
103 const armnn::TensorShape outputShape{ 3, 5, 6 };
104
105 const armnn::TensorInfo inputTensorInfo(inputShape, ArmnnType, qScale, qOffset);
106 const armnn::TensorInfo outputTensorInfo(outputShape, ArmnnType, qScale, qOffset);
107
Aron Virginas-Tar48623a02019-10-22 10:00:28 +0100108 std::vector<T> inputValues = armnnUtils::QuantizedVector<T>(
109 {
110 // Channel 0, Height (2) x Width (2)
111 0, 4,
112 2, 5,
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100113
Aron Virginas-Tar48623a02019-10-22 10:00:28 +0100114 // Channel 1, Height (2) x Width (2)
115 6, 1,
116 5, 2
117 },
118 qScale, qOffset);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100119
Aron Virginas-Tar48623a02019-10-22 10:00:28 +0100120 std::vector<T> expectedOutputValues = armnnUtils::QuantizedVector<T>(
121 {
122 0, 0, 0, 0, 0, 0,
123 0, 0, 0, 0, 0, 0,
124 0, 0, 0, 4, 0, 0,
125 0, 0, 2, 5, 0, 0,
126 0, 0, 0, 0, 0, 0,
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100127
Aron Virginas-Tar48623a02019-10-22 10:00:28 +0100128 0, 0, 0, 0, 0, 0,
129 0, 0, 0, 0, 0, 0,
130 0, 0, 6, 1, 0, 0,
131 0, 0, 5, 2, 0, 0,
132 0, 0, 0, 0, 0, 0,
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100133
Aron Virginas-Tar48623a02019-10-22 10:00:28 +0100134 0, 0, 0, 0, 0, 0,
135 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 },
140 qScale, qOffset);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100141
142 auto inputTensor = MakeTensor<T, 3>(inputTensorInfo, std::vector<T>(inputValues));
143
144 LayerTestResult<T, 3> result(outputTensorInfo);
145 result.outputExpected = MakeTensor<T, 3>(outputTensorInfo, std::vector<T>(expectedOutputValues));
146
Teresa Charlinfbf0e5b2020-08-17 01:01:06 +0100147 ARMNN_NO_DEPRECATE_WARN_BEGIN
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100148 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
149 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
Teresa Charlinfbf0e5b2020-08-17 01:01:06 +0100150 ARMNN_NO_DEPRECATE_WARN_END
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,
184 float qScale,
185 int32_t qOffset)
186{
Jan Eilers8eb25602020-03-09 12:13:48 +0000187 IgnoreUnused(memoryManager);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100188 const armnn::TensorShape inputShape{ 2, 2, 3, 2 };
189 const armnn::TensorShape outputShape{ 4, 5, 7, 4 };
190
191 const armnn::TensorInfo inputTensorInfo(inputShape, ArmnnType, qScale, qOffset);
192 const armnn::TensorInfo outputTensorInfo(outputShape, ArmnnType, qScale, qOffset);
193
Aron Virginas-Tar48623a02019-10-22 10:00:28 +0100194 std::vector<T> inputValues = armnnUtils::QuantizedVector<T>(
195 {
196 // Batch 0, Channel 0, Height (3) x Width (2)
197 0, 1,
198 2, 3,
199 4, 5,
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100200
Aron Virginas-Tar48623a02019-10-22 10:00:28 +0100201 // Batch 0, Channel 1, Height (3) x Width (2)
202 6, 7,
203 8, 9,
204 10, 11,
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100205
Aron Virginas-Tar48623a02019-10-22 10:00:28 +0100206 // Batch 1, Channel 0, Height (3) x Width (2)
207 12, 13,
208 14, 15,
209 16, 17,
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100210
Aron Virginas-Tar48623a02019-10-22 10:00:28 +0100211 // Batch 1, Channel 1, Height (3) x Width (2)
212 18, 19,
213 20, 21,
214 22, 23
215 },
216 qScale, qOffset);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100217
Aron Virginas-Tar48623a02019-10-22 10:00:28 +0100218 std::vector<T> expectedOutputValues = armnnUtils::QuantizedVector<T>(
219 {
220 0, 0, 0, 0,
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,
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100227
Aron Virginas-Tar48623a02019-10-22 10:00:28 +0100228 0, 0, 0, 0,
229 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,
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100235
Aron Virginas-Tar48623a02019-10-22 10:00:28 +0100236 0, 0, 0, 0,
237 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,
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100243
Aron Virginas-Tar48623a02019-10-22 10:00:28 +0100244 0, 0, 0, 0,
245 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,
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100251
Aron Virginas-Tar48623a02019-10-22 10:00:28 +0100252 0, 0, 0, 0,
253 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,
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100259
Aron Virginas-Tar48623a02019-10-22 10:00:28 +0100260 0, 0, 0, 0,
261 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,
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100267
Aron Virginas-Tar48623a02019-10-22 10:00:28 +0100268 0, 0, 0, 0,
269 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,
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100275
Aron Virginas-Tar48623a02019-10-22 10:00:28 +0100276 0, 0, 0, 0,
277 0, 0, 0, 0,
278 0, 0, 0, 0,
279 0, 0, 1, 0,
280 0, 2, 3, 0,
281 0, 4, 5, 0,
282 0, 0, 0, 0,
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100283
Aron Virginas-Tar48623a02019-10-22 10:00:28 +0100284 0, 0, 0, 0,
285 0, 0, 0, 0,
286 0, 0, 0, 0,
287 0, 6, 7, 0,
288 0, 8, 9, 0,
289 0, 10, 11, 0,
290 0, 0, 0, 0,
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100291
Aron Virginas-Tar48623a02019-10-22 10:00:28 +0100292 0, 0, 0, 0,
293 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,
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100299
Aron Virginas-Tar48623a02019-10-22 10:00:28 +0100300 0, 0, 0, 0,
301 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,
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100307
Aron Virginas-Tar48623a02019-10-22 10:00:28 +0100308 0, 0, 0, 0,
309 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,
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100315
Aron Virginas-Tar48623a02019-10-22 10:00:28 +0100316 0, 0, 0, 0,
317 0, 0, 0, 0,
318 0, 0, 0, 0,
319 0, 12, 13, 0,
320 0, 14, 15, 0,
321 0, 16, 17, 0,
322 0, 0, 0, 0,
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100323
Aron Virginas-Tar48623a02019-10-22 10:00:28 +0100324 0, 0, 0, 0,
325 0, 0, 0, 0,
326 0, 0, 0, 0,
327 0, 18, 19, 0,
328 0, 20, 21, 0,
329 0, 22, 23, 0,
330 0, 0, 0, 0,
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100331
Aron Virginas-Tar48623a02019-10-22 10:00:28 +0100332 0, 0, 0, 0,
333 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,
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100339
Aron Virginas-Tar48623a02019-10-22 10:00:28 +0100340 0, 0, 0, 0,
341 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,
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100347
Aron Virginas-Tar48623a02019-10-22 10:00:28 +0100348 0, 0, 0, 0,
349 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,
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100355
Aron Virginas-Tar48623a02019-10-22 10:00:28 +0100356 0, 0, 0, 0,
357 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,
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100363
Aron Virginas-Tar48623a02019-10-22 10:00:28 +0100364 0, 0, 0, 0,
365 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,
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100371
Aron Virginas-Tar48623a02019-10-22 10:00:28 +0100372 0, 0, 0, 0,
373 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 },
380 qScale, qOffset);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100381
382 auto inputTensor = MakeTensor<T, 4>(inputTensorInfo, std::vector<T>(inputValues));
383
384 LayerTestResult<T, 4> result(outputTensorInfo);
385 result.outputExpected = MakeTensor<T, 4>(outputTensorInfo, std::vector<T>(expectedOutputValues));
386
Teresa Charlinfbf0e5b2020-08-17 01:01:06 +0100387 ARMNN_NO_DEPRECATE_WARN_BEGIN
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100388 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
389 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
Teresa Charlinfbf0e5b2020-08-17 01:01:06 +0100390 ARMNN_NO_DEPRECATE_WARN_END
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100391
392 armnn::PadQueueDescriptor descriptor;
393
394 std::vector<std::pair<unsigned int, unsigned int>> PadList;
395 PadList.push_back(std::pair<unsigned int, unsigned int>(1,1));
396 PadList.push_back(std::pair<unsigned int, unsigned int>(2,1));
397 PadList.push_back(std::pair<unsigned int, unsigned int>(3,1));
398 PadList.push_back(std::pair<unsigned int, unsigned int>(1,1));
399
400 descriptor.m_Parameters.m_PadList = PadList;
401 armnn::WorkloadInfo info;
402
403 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
404 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
405
406 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreatePad(descriptor, info);
407
408 inputHandle->Allocate();
409 outputHandle->Allocate();
410
411 CopyDataToITensorHandle(inputHandle.get(), &inputTensor[0][0][0][0]);
412
413 workload->PostAllocationConfigure();
414 workload->Execute();
415
416 CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
417
418 return result;
419}
420
421//
422// Explicit template specializations
423//
424
Derek Lambertif90c56d2020-01-10 17:14:08 +0000425template LayerTestResult<armnn::ResolveType<armnn::DataType::QSymmS16>, 2>
426Pad2dTestCommon<armnn::DataType::QSymmS16>(
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100427 armnn::IWorkloadFactory& workloadFactory,
428 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
429 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,
437 float qScale,
438 int32_t qOffset);
439
Derek Lambertif90c56d2020-01-10 17:14:08 +0000440template LayerTestResult<armnn::ResolveType<armnn::DataType::QSymmS16>, 4>
441Pad4dTestCommon<armnn::DataType::QSymmS16>(
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100442 armnn::IWorkloadFactory& workloadFactory,
443 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
444 float qScale,
445 int32_t qOffset);
446
447//
448// Implementation functions
449//
450
451LayerTestResult<uint8_t, 2> PadUint82dTest(
452 armnn::IWorkloadFactory& workloadFactory,
453 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
454{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000455 return Pad2dTestCommon<armnn::DataType::QAsymmU8>(workloadFactory, memoryManager, 1.0f, 0);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100456}
457
458LayerTestResult<uint8_t, 2> PadUint82dCustomPaddingTest(
459 armnn::IWorkloadFactory& workloadFactory,
460 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
461{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000462 return Pad2dTestCommon<armnn::DataType::QAsymmU8>(workloadFactory, memoryManager, 1.0f, 0, 1.0f);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100463}
464
465LayerTestResult<uint8_t, 3> PadUint83dTest(
466 armnn::IWorkloadFactory& workloadFactory,
467 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
468{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000469 return Pad3dTestCommon<armnn::DataType::QAsymmU8>(workloadFactory, memoryManager, 1.0f, 0);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100470}
471
472LayerTestResult<uint8_t, 4> PadUint84dTest(
473 armnn::IWorkloadFactory& workloadFactory,
474 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
475{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000476 return Pad4dTestCommon<armnn::DataType::QAsymmU8>(workloadFactory, memoryManager, 1.0f, 0);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100477}
478
479LayerTestResult<float, 2> PadFloat322dTest(
480 armnn::IWorkloadFactory& workloadFactory,
481 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
482{
483 return Pad2dTestCommon<armnn::DataType::Float32>(workloadFactory, memoryManager, 0.0f, 0);
484}
485
486LayerTestResult<float, 2> PadFloat322dCustomPaddingTest(
487 armnn::IWorkloadFactory& workloadFactory,
488 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
489{
490 return Pad2dTestCommon<armnn::DataType::Float32>(workloadFactory, memoryManager, 0.0f, 0, 1.0f);
491}
492
493LayerTestResult<float, 3> PadFloat323dTest(
494 armnn::IWorkloadFactory& workloadFactory,
495 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
496{
497 return Pad3dTestCommon<armnn::DataType::Float32>(workloadFactory, memoryManager, 0.0f, 0);
498}
499
500LayerTestResult<float, 4> PadFloat324dTest(
501 armnn::IWorkloadFactory& workloadFactory,
502 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
503{
504 return Pad4dTestCommon<armnn::DataType::Float32>(workloadFactory, memoryManager, 0.0f, 0);
505}
Narumol Prangnawarat44179c32020-03-11 14:51:27 +0000506
507LayerTestResult<armnn::BFloat16, 2> PadBFloat162dTest(
508 armnn::IWorkloadFactory& workloadFactory,
509 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
510{
511 return Pad2dTestCommon<armnn::DataType::BFloat16>(workloadFactory, memoryManager, 0.0f, 0);
512}
513
514LayerTestResult<armnn::BFloat16, 2> PadBFloat162dCustomPaddingTest(
515 armnn::IWorkloadFactory& workloadFactory,
516 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
517{
518 return Pad2dTestCommon<armnn::DataType::BFloat16>(workloadFactory, memoryManager, 0.0f, 0, 1.0f);
519}
520
521LayerTestResult<armnn::BFloat16, 3> PadBFloat163dTest(
522 armnn::IWorkloadFactory& workloadFactory,
523 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
524{
525 return Pad3dTestCommon<armnn::DataType::BFloat16>(workloadFactory, memoryManager, 0.0f, 0);
526}
527
528LayerTestResult<armnn::BFloat16, 4> PadBFloat164dTest(
529 armnn::IWorkloadFactory& workloadFactory,
530 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
531{
532 return Pad4dTestCommon<armnn::DataType::BFloat16>(workloadFactory, memoryManager, 0.0f, 0);
533}
Sadik Armagan041b3c02020-06-04 10:32:18 +0100534
535LayerTestResult<int8_t, 2> PadInt82dTest(
536 armnn::IWorkloadFactory& workloadFactory,
537 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
538{
539 return Pad2dTestCommon<armnn::DataType::QSymmS8>(workloadFactory, memoryManager, 1.0f, 0);
540}
541
542LayerTestResult<int8_t, 2> PadInt82dCustomPaddingTest(
543 armnn::IWorkloadFactory& workloadFactory,
544 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
545{
546 return Pad2dTestCommon<armnn::DataType::QSymmS8>(workloadFactory, memoryManager, 1.0f, 0, 1.0f);
547}
548
549LayerTestResult<int8_t, 3> PadInt83dTest(
550 armnn::IWorkloadFactory& workloadFactory,
551 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
552{
553 return Pad3dTestCommon<armnn::DataType::QSymmS8>(workloadFactory, memoryManager, 1.0f, 0);
554}
555
556LayerTestResult<int8_t, 4> PadInt84dTest(
557 armnn::IWorkloadFactory& workloadFactory,
558 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
559{
560 return Pad4dTestCommon<armnn::DataType::QSymmS8>(workloadFactory, memoryManager, 1.0f, 0);
561}