blob: 9239c665ebe60b6364c811ec4b597afa750d0c09 [file] [log] [blame]
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +01001//
2// Copyright © 2017 Arm Ltd. All rights reserved.
3// 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{
Derek Lambertic374ff02019-12-10 21:57:35 +000027 boost::ignore_unused(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
61 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
62 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
63
64 armnn::PadQueueDescriptor descriptor;
65
66 std::vector<std::pair<unsigned int, unsigned int>> padList;
67 padList.push_back(std::pair<unsigned int, unsigned int>(2,2));
68 padList.push_back(std::pair<unsigned int, unsigned int>(2,2));
69
70 descriptor.m_Parameters.m_PadList = padList;
71 descriptor.m_Parameters.m_PadValue = customPaddingValue;
72 armnn::WorkloadInfo info;
73
74 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
75 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
76
77 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreatePad(descriptor, info);
78
79 inputHandle->Allocate();
80 outputHandle->Allocate();
81
82 CopyDataToITensorHandle(inputHandle.get(), &inputTensor[0][0]);
83
84 workload->PostAllocationConfigure();
85 workload->Execute();
86
87 CopyDataFromITensorHandle(&result.output[0][0], outputHandle.get());
88
89 return result;
90}
91
92template<armnn::DataType ArmnnType, typename T>
93LayerTestResult<T, 3> Pad3dTestCommon(
94 armnn::IWorkloadFactory& workloadFactory,
95 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
96 float qScale,
97 int32_t qOffset)
98{
Derek Lambertic374ff02019-12-10 21:57:35 +000099 boost::ignore_unused(memoryManager);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100100 const armnn::TensorShape inputShape{ 2, 2, 2 };
101 const armnn::TensorShape outputShape{ 3, 5, 6 };
102
103 const armnn::TensorInfo inputTensorInfo(inputShape, ArmnnType, qScale, qOffset);
104 const armnn::TensorInfo outputTensorInfo(outputShape, ArmnnType, qScale, qOffset);
105
Aron Virginas-Tar48623a02019-10-22 10:00:28 +0100106 std::vector<T> inputValues = armnnUtils::QuantizedVector<T>(
107 {
108 // Channel 0, Height (2) x Width (2)
109 0, 4,
110 2, 5,
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100111
Aron Virginas-Tar48623a02019-10-22 10:00:28 +0100112 // Channel 1, Height (2) x Width (2)
113 6, 1,
114 5, 2
115 },
116 qScale, qOffset);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100117
Aron Virginas-Tar48623a02019-10-22 10:00:28 +0100118 std::vector<T> expectedOutputValues = armnnUtils::QuantizedVector<T>(
119 {
120 0, 0, 0, 0, 0, 0,
121 0, 0, 0, 0, 0, 0,
122 0, 0, 0, 4, 0, 0,
123 0, 0, 2, 5, 0, 0,
124 0, 0, 0, 0, 0, 0,
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100125
Aron Virginas-Tar48623a02019-10-22 10:00:28 +0100126 0, 0, 0, 0, 0, 0,
127 0, 0, 0, 0, 0, 0,
128 0, 0, 6, 1, 0, 0,
129 0, 0, 5, 2, 0, 0,
130 0, 0, 0, 0, 0, 0,
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100131
Aron Virginas-Tar48623a02019-10-22 10:00:28 +0100132 0, 0, 0, 0, 0, 0,
133 0, 0, 0, 0, 0, 0,
134 0, 0, 0, 0, 0, 0,
135 0, 0, 0, 0, 0, 0,
136 0, 0, 0, 0, 0, 0
137 },
138 qScale, qOffset);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100139
140 auto inputTensor = MakeTensor<T, 3>(inputTensorInfo, std::vector<T>(inputValues));
141
142 LayerTestResult<T, 3> result(outputTensorInfo);
143 result.outputExpected = MakeTensor<T, 3>(outputTensorInfo, std::vector<T>(expectedOutputValues));
144
145 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
146 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
147
148 armnn::PadQueueDescriptor descriptor;
149
150 std::vector<std::pair<unsigned int, unsigned int>> PadList;
151 PadList.push_back(std::pair<unsigned int, unsigned int>(0,1));
152 PadList.push_back(std::pair<unsigned int, unsigned int>(2,1));
153 PadList.push_back(std::pair<unsigned int, unsigned int>(2,2));
154
155 descriptor.m_Parameters.m_PadList = PadList;
156 armnn::WorkloadInfo info;
157
158 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
159 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
160
161 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreatePad(descriptor, info);
162
163 inputHandle->Allocate();
164 outputHandle->Allocate();
165
166 CopyDataToITensorHandle(inputHandle.get(), &inputTensor[0][0][0]);
167
168 workload->PostAllocationConfigure();
169 workload->Execute();
170
171 CopyDataFromITensorHandle(&result.output[0][0][0], outputHandle.get());
172
173 return result;
174}
175
176template<armnn::DataType ArmnnType, typename T>
177LayerTestResult<T, 4> Pad4dTestCommon(
178 armnn::IWorkloadFactory& workloadFactory,
179 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
180 float qScale,
181 int32_t qOffset)
182{
Derek Lambertic374ff02019-12-10 21:57:35 +0000183 boost::ignore_unused(memoryManager);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100184 const armnn::TensorShape inputShape{ 2, 2, 3, 2 };
185 const armnn::TensorShape outputShape{ 4, 5, 7, 4 };
186
187 const armnn::TensorInfo inputTensorInfo(inputShape, ArmnnType, qScale, qOffset);
188 const armnn::TensorInfo outputTensorInfo(outputShape, ArmnnType, qScale, qOffset);
189
Aron Virginas-Tar48623a02019-10-22 10:00:28 +0100190 std::vector<T> inputValues = armnnUtils::QuantizedVector<T>(
191 {
192 // Batch 0, Channel 0, Height (3) x Width (2)
193 0, 1,
194 2, 3,
195 4, 5,
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100196
Aron Virginas-Tar48623a02019-10-22 10:00:28 +0100197 // Batch 0, Channel 1, Height (3) x Width (2)
198 6, 7,
199 8, 9,
200 10, 11,
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100201
Aron Virginas-Tar48623a02019-10-22 10:00:28 +0100202 // Batch 1, Channel 0, Height (3) x Width (2)
203 12, 13,
204 14, 15,
205 16, 17,
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100206
Aron Virginas-Tar48623a02019-10-22 10:00:28 +0100207 // Batch 1, Channel 1, Height (3) x Width (2)
208 18, 19,
209 20, 21,
210 22, 23
211 },
212 qScale, qOffset);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100213
Aron Virginas-Tar48623a02019-10-22 10:00:28 +0100214 std::vector<T> expectedOutputValues = armnnUtils::QuantizedVector<T>(
215 {
216 0, 0, 0, 0,
217 0, 0, 0, 0,
218 0, 0, 0, 0,
219 0, 0, 0, 0,
220 0, 0, 0, 0,
221 0, 0, 0, 0,
222 0, 0, 0, 0,
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100223
Aron Virginas-Tar48623a02019-10-22 10:00:28 +0100224 0, 0, 0, 0,
225 0, 0, 0, 0,
226 0, 0, 0, 0,
227 0, 0, 0, 0,
228 0, 0, 0, 0,
229 0, 0, 0, 0,
230 0, 0, 0, 0,
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100231
Aron Virginas-Tar48623a02019-10-22 10:00:28 +0100232 0, 0, 0, 0,
233 0, 0, 0, 0,
234 0, 0, 0, 0,
235 0, 0, 0, 0,
236 0, 0, 0, 0,
237 0, 0, 0, 0,
238 0, 0, 0, 0,
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100239
Aron Virginas-Tar48623a02019-10-22 10:00:28 +0100240 0, 0, 0, 0,
241 0, 0, 0, 0,
242 0, 0, 0, 0,
243 0, 0, 0, 0,
244 0, 0, 0, 0,
245 0, 0, 0, 0,
246 0, 0, 0, 0,
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100247
Aron Virginas-Tar48623a02019-10-22 10:00:28 +0100248 0, 0, 0, 0,
249 0, 0, 0, 0,
250 0, 0, 0, 0,
251 0, 0, 0, 0,
252 0, 0, 0, 0,
253 0, 0, 0, 0,
254 0, 0, 0, 0,
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100255
Aron Virginas-Tar48623a02019-10-22 10:00:28 +0100256 0, 0, 0, 0,
257 0, 0, 0, 0,
258 0, 0, 0, 0,
259 0, 0, 0, 0,
260 0, 0, 0, 0,
261 0, 0, 0, 0,
262 0, 0, 0, 0,
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100263
Aron Virginas-Tar48623a02019-10-22 10:00:28 +0100264 0, 0, 0, 0,
265 0, 0, 0, 0,
266 0, 0, 0, 0,
267 0, 0, 0, 0,
268 0, 0, 0, 0,
269 0, 0, 0, 0,
270 0, 0, 0, 0,
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100271
Aron Virginas-Tar48623a02019-10-22 10:00:28 +0100272 0, 0, 0, 0,
273 0, 0, 0, 0,
274 0, 0, 0, 0,
275 0, 0, 1, 0,
276 0, 2, 3, 0,
277 0, 4, 5, 0,
278 0, 0, 0, 0,
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100279
Aron Virginas-Tar48623a02019-10-22 10:00:28 +0100280 0, 0, 0, 0,
281 0, 0, 0, 0,
282 0, 0, 0, 0,
283 0, 6, 7, 0,
284 0, 8, 9, 0,
285 0, 10, 11, 0,
286 0, 0, 0, 0,
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100287
Aron Virginas-Tar48623a02019-10-22 10:00:28 +0100288 0, 0, 0, 0,
289 0, 0, 0, 0,
290 0, 0, 0, 0,
291 0, 0, 0, 0,
292 0, 0, 0, 0,
293 0, 0, 0, 0,
294 0, 0, 0, 0,
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100295
Aron Virginas-Tar48623a02019-10-22 10:00:28 +0100296 0, 0, 0, 0,
297 0, 0, 0, 0,
298 0, 0, 0, 0,
299 0, 0, 0, 0,
300 0, 0, 0, 0,
301 0, 0, 0, 0,
302 0, 0, 0, 0,
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100303
Aron Virginas-Tar48623a02019-10-22 10:00:28 +0100304 0, 0, 0, 0,
305 0, 0, 0, 0,
306 0, 0, 0, 0,
307 0, 0, 0, 0,
308 0, 0, 0, 0,
309 0, 0, 0, 0,
310 0, 0, 0, 0,
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100311
Aron Virginas-Tar48623a02019-10-22 10:00:28 +0100312 0, 0, 0, 0,
313 0, 0, 0, 0,
314 0, 0, 0, 0,
315 0, 12, 13, 0,
316 0, 14, 15, 0,
317 0, 16, 17, 0,
318 0, 0, 0, 0,
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100319
Aron Virginas-Tar48623a02019-10-22 10:00:28 +0100320 0, 0, 0, 0,
321 0, 0, 0, 0,
322 0, 0, 0, 0,
323 0, 18, 19, 0,
324 0, 20, 21, 0,
325 0, 22, 23, 0,
326 0, 0, 0, 0,
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100327
Aron Virginas-Tar48623a02019-10-22 10:00:28 +0100328 0, 0, 0, 0,
329 0, 0, 0, 0,
330 0, 0, 0, 0,
331 0, 0, 0, 0,
332 0, 0, 0, 0,
333 0, 0, 0, 0,
334 0, 0, 0, 0,
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100335
Aron Virginas-Tar48623a02019-10-22 10:00:28 +0100336 0, 0, 0, 0,
337 0, 0, 0, 0,
338 0, 0, 0, 0,
339 0, 0, 0, 0,
340 0, 0, 0, 0,
341 0, 0, 0, 0,
342 0, 0, 0, 0,
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100343
Aron Virginas-Tar48623a02019-10-22 10:00:28 +0100344 0, 0, 0, 0,
345 0, 0, 0, 0,
346 0, 0, 0, 0,
347 0, 0, 0, 0,
348 0, 0, 0, 0,
349 0, 0, 0, 0,
350 0, 0, 0, 0,
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100351
Aron Virginas-Tar48623a02019-10-22 10:00:28 +0100352 0, 0, 0, 0,
353 0, 0, 0, 0,
354 0, 0, 0, 0,
355 0, 0, 0, 0,
356 0, 0, 0, 0,
357 0, 0, 0, 0,
358 0, 0, 0, 0,
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100359
Aron Virginas-Tar48623a02019-10-22 10:00:28 +0100360 0, 0, 0, 0,
361 0, 0, 0, 0,
362 0, 0, 0, 0,
363 0, 0, 0, 0,
364 0, 0, 0, 0,
365 0, 0, 0, 0,
366 0, 0, 0, 0,
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100367
Aron Virginas-Tar48623a02019-10-22 10:00:28 +0100368 0, 0, 0, 0,
369 0, 0, 0, 0,
370 0, 0, 0, 0,
371 0, 0, 0, 0,
372 0, 0, 0, 0,
373 0, 0, 0, 0,
374 0, 0, 0, 0
375 },
376 qScale, qOffset);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100377
378 auto inputTensor = MakeTensor<T, 4>(inputTensorInfo, std::vector<T>(inputValues));
379
380 LayerTestResult<T, 4> result(outputTensorInfo);
381 result.outputExpected = MakeTensor<T, 4>(outputTensorInfo, std::vector<T>(expectedOutputValues));
382
383 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
384 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
385
386 armnn::PadQueueDescriptor descriptor;
387
388 std::vector<std::pair<unsigned int, unsigned int>> PadList;
389 PadList.push_back(std::pair<unsigned int, unsigned int>(1,1));
390 PadList.push_back(std::pair<unsigned int, unsigned int>(2,1));
391 PadList.push_back(std::pair<unsigned int, unsigned int>(3,1));
392 PadList.push_back(std::pair<unsigned int, unsigned int>(1,1));
393
394 descriptor.m_Parameters.m_PadList = PadList;
395 armnn::WorkloadInfo info;
396
397 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
398 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
399
400 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreatePad(descriptor, info);
401
402 inputHandle->Allocate();
403 outputHandle->Allocate();
404
405 CopyDataToITensorHandle(inputHandle.get(), &inputTensor[0][0][0][0]);
406
407 workload->PostAllocationConfigure();
408 workload->Execute();
409
410 CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
411
412 return result;
413}
414
415//
416// Explicit template specializations
417//
418
Derek Lambertif90c56d2020-01-10 17:14:08 +0000419template LayerTestResult<armnn::ResolveType<armnn::DataType::QSymmS16>, 2>
420Pad2dTestCommon<armnn::DataType::QSymmS16>(
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100421 armnn::IWorkloadFactory& workloadFactory,
422 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
423 float qScale,
424 int32_t qOffset,
425 const float customPaddingValue);
426
Derek Lambertif90c56d2020-01-10 17:14:08 +0000427template LayerTestResult<armnn::ResolveType<armnn::DataType::QSymmS16>, 3>
428Pad3dTestCommon<armnn::DataType::QSymmS16>(
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100429 armnn::IWorkloadFactory& workloadFactory,
430 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
431 float qScale,
432 int32_t qOffset);
433
Derek Lambertif90c56d2020-01-10 17:14:08 +0000434template LayerTestResult<armnn::ResolveType<armnn::DataType::QSymmS16>, 4>
435Pad4dTestCommon<armnn::DataType::QSymmS16>(
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100436 armnn::IWorkloadFactory& workloadFactory,
437 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
438 float qScale,
439 int32_t qOffset);
440
441//
442// Implementation functions
443//
444
445LayerTestResult<uint8_t, 2> PadUint82dTest(
446 armnn::IWorkloadFactory& workloadFactory,
447 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
448{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000449 return Pad2dTestCommon<armnn::DataType::QAsymmU8>(workloadFactory, memoryManager, 1.0f, 0);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100450}
451
452LayerTestResult<uint8_t, 2> PadUint82dCustomPaddingTest(
453 armnn::IWorkloadFactory& workloadFactory,
454 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
455{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000456 return Pad2dTestCommon<armnn::DataType::QAsymmU8>(workloadFactory, memoryManager, 1.0f, 0, 1.0f);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100457}
458
459LayerTestResult<uint8_t, 3> PadUint83dTest(
460 armnn::IWorkloadFactory& workloadFactory,
461 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
462{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000463 return Pad3dTestCommon<armnn::DataType::QAsymmU8>(workloadFactory, memoryManager, 1.0f, 0);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100464}
465
466LayerTestResult<uint8_t, 4> PadUint84dTest(
467 armnn::IWorkloadFactory& workloadFactory,
468 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
469{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000470 return Pad4dTestCommon<armnn::DataType::QAsymmU8>(workloadFactory, memoryManager, 1.0f, 0);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100471}
472
473LayerTestResult<float, 2> PadFloat322dTest(
474 armnn::IWorkloadFactory& workloadFactory,
475 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
476{
477 return Pad2dTestCommon<armnn::DataType::Float32>(workloadFactory, memoryManager, 0.0f, 0);
478}
479
480LayerTestResult<float, 2> PadFloat322dCustomPaddingTest(
481 armnn::IWorkloadFactory& workloadFactory,
482 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
483{
484 return Pad2dTestCommon<armnn::DataType::Float32>(workloadFactory, memoryManager, 0.0f, 0, 1.0f);
485}
486
487LayerTestResult<float, 3> PadFloat323dTest(
488 armnn::IWorkloadFactory& workloadFactory,
489 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
490{
491 return Pad3dTestCommon<armnn::DataType::Float32>(workloadFactory, memoryManager, 0.0f, 0);
492}
493
494LayerTestResult<float, 4> PadFloat324dTest(
495 armnn::IWorkloadFactory& workloadFactory,
496 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
497{
498 return Pad4dTestCommon<armnn::DataType::Float32>(workloadFactory, memoryManager, 0.0f, 0);
499}