blob: d1bc2a950f4a75a42163525a9235f6363317c8ea [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 "SpaceToBatchNdTestImpl.hpp"
7
Aron Virginas-Tar48623a02019-10-22 10:00:28 +01008#include <QuantizeHelper.hpp>
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +01009#include <ResolveType.hpp>
10
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +010011
Matteo Martincighe011d202019-11-28 11:35:47 +000012#include <armnnUtils/Permute.hpp>
13
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +010014#include <backendsCommon/test/TensorCopyUtils.hpp>
15#include <backendsCommon/test/WorkloadTestUtils.hpp>
16
17#include <test/TensorHelpers.hpp>
18
19namespace
20{
21
22template<typename T>
23LayerTestResult<T, 4> SpaceToBatchNdTestImpl(
24 armnn::IWorkloadFactory& workloadFactory,
25 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
26 armnn::TensorInfo& inputTensorInfo,
27 armnn::TensorInfo& outputTensorInfo,
28 std::vector<float>& inputData,
29 std::vector<float>& outputExpectedData,
30 armnn::SpaceToBatchNdQueueDescriptor descriptor,
31 const float qScale = 1.0f,
32 const int32_t qOffset = 0)
33{
Jan Eilers8eb25602020-03-09 12:13:48 +000034 IgnoreUnused(memoryManager);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +010035 const armnn::PermutationVector NCHWToNHWC = {0, 3, 1, 2};
36 if (descriptor.m_Parameters.m_DataLayout == armnn::DataLayout::NHWC)
37 {
38 inputTensorInfo = armnnUtils::Permuted(inputTensorInfo, NCHWToNHWC);
39 outputTensorInfo = armnnUtils::Permuted(outputTensorInfo, NCHWToNHWC);
40
41 std::vector<float> inputTmp(inputData.size());
42 armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC,
43 inputData.data(), inputTmp.data(), sizeof(float));
44 inputData = inputTmp;
45
46 std::vector<float> outputTmp(outputExpectedData.size());
47 armnnUtils::Permute(outputTensorInfo.GetShape(), NCHWToNHWC,
48 outputExpectedData.data(), outputTmp.data(), sizeof(float));
49 outputExpectedData = outputTmp;
50 }
51
52 if(armnn::IsQuantizedType<T>())
53 {
54 inputTensorInfo.SetQuantizationScale(qScale);
55 inputTensorInfo.SetQuantizationOffset(qOffset);
56 outputTensorInfo.SetQuantizationScale(qScale);
57 outputTensorInfo.SetQuantizationOffset(qOffset);
58 }
59
Aron Virginas-Tar48623a02019-10-22 10:00:28 +010060 boost::multi_array<T, 4> input = MakeTensor<T, 4>(inputTensorInfo,
61 armnnUtils::QuantizedVector<T>(inputData, qScale, qOffset));
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +010062
63 LayerTestResult<T, 4> ret(outputTensorInfo);
Aron Virginas-Tar48623a02019-10-22 10:00:28 +010064 ret.outputExpected = MakeTensor<T, 4>(outputTensorInfo,
65 armnnUtils::QuantizedVector<T>(outputExpectedData, qScale, qOffset));
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +010066
67 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
68 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
69
70 armnn::WorkloadInfo info;
71 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
72 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
73
74 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateSpaceToBatchNd(descriptor, info);
75
76 inputHandle->Allocate();
77 outputHandle->Allocate();
78
79 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
80
81 workload->Execute();
82
83 CopyDataFromITensorHandle(&ret.output[0][0][0][0], outputHandle.get());
84
85 return ret;
86}
87
88template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
89LayerTestResult<T, 4> SpaceToBatchNdSimpleTest(
90 armnn::IWorkloadFactory& workloadFactory,
91 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
92 armnn::DataLayout dataLayout = armnn::DataLayout::NCHW)
93{
94 armnn::TensorInfo inputTensorInfo;
95 armnn::TensorInfo outputTensorInfo;
96
97 unsigned int inputShape[] = {1, 1, 2, 2};
98 unsigned int outputShape[] = {4, 1, 1, 1};
99
100 armnn::SpaceToBatchNdQueueDescriptor desc;
101 desc.m_Parameters.m_DataLayout = dataLayout;
102 desc.m_Parameters.m_BlockShape = {2, 2};
103 desc.m_Parameters.m_PadList = {{0, 0}, {0, 0}};
104
105 inputTensorInfo = armnn::TensorInfo(4, inputShape, ArmnnType);
106 outputTensorInfo = armnn::TensorInfo(4, outputShape, ArmnnType);
107
108 std::vector<float> input = std::vector<float>(
109 {
110 1.0f, 2.0f, 3.0f, 4.0f
111 });
112
113 std::vector<float> outputExpected = std::vector<float>(
114 {
115 1.0f, 2.0f, 3.0f, 4.0f
116 });
117
118 return SpaceToBatchNdTestImpl<T>(
119 workloadFactory, memoryManager, inputTensorInfo, outputTensorInfo, input, outputExpected, desc);
120}
121
122template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
123LayerTestResult<T, 4> SpaceToBatchNdMultiChannelsTest(
124 armnn::IWorkloadFactory& workloadFactory,
125 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
126 armnn::DataLayout dataLayout = armnn::DataLayout::NCHW)
127{
128 armnn::TensorInfo inputTensorInfo;
129 armnn::TensorInfo outputTensorInfo;
130
131 unsigned int inputShape[] = {1, 3, 2, 2};
132 unsigned int outputShape[] = {4, 3, 1, 1};
133
134 armnn::SpaceToBatchNdQueueDescriptor desc;
135 desc.m_Parameters.m_DataLayout = dataLayout;
136 desc.m_Parameters.m_BlockShape = {2, 2};
137 desc.m_Parameters.m_PadList = {{0, 0}, {0, 0}};
138
139 inputTensorInfo = armnn::TensorInfo(4, inputShape, ArmnnType);
140 outputTensorInfo = armnn::TensorInfo(4, outputShape, ArmnnType);
141
142 std::vector<float> input = std::vector<float>(
143 {
144 1.0f, 4.0f, 7.0f, 10.0f,
145 2.0f, 5.0, 8.0, 11.0f,
146 3.0f, 6.0f, 9.0f, 12.0f
147 });
148
149 std::vector<float> outputExpected = std::vector<float>(
150 {
151 1.0f, 2.0f, 3.0f,
152 4.0f, 5.0f, 6.0f,
153 7.0f, 8.0f, 9.0f,
154 10.0f, 11.0f, 12.0f
155 });
156
157 return SpaceToBatchNdTestImpl<T>(
158 workloadFactory, memoryManager, inputTensorInfo, outputTensorInfo, input, outputExpected, desc);
159}
160
161template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
162LayerTestResult<T, 4> SpaceToBatchNdMultiBlockTest(
163 armnn::IWorkloadFactory& workloadFactory,
164 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
165 armnn::DataLayout dataLayout = armnn::DataLayout::NCHW)
166{
167 armnn::TensorInfo inputTensorInfo;
168 armnn::TensorInfo outputTensorInfo;
169
170 unsigned int inputShape[] = {1, 1, 4, 4};
171 unsigned int outputShape[] = {4, 1, 2, 2};
172
173 armnn::SpaceToBatchNdQueueDescriptor desc;
174 desc.m_Parameters.m_DataLayout = dataLayout;
175 desc.m_Parameters.m_BlockShape = {2, 2};
176 desc.m_Parameters.m_PadList = {{0, 0}, {0, 0}};
177
178 inputTensorInfo = armnn::TensorInfo(4, inputShape, ArmnnType);
179 outputTensorInfo = armnn::TensorInfo(4, outputShape, ArmnnType);
180
181 std::vector<float> input = std::vector<float>(
182 {
183 1.0f, 2.0f, 3.0f, 4.0f,
184 5.0f, 6.0f, 7.0f, 8.0f,
185 9.0f, 10.0f, 11.0f, 12.0f,
186 13.0f, 14.0f, 15.0f, 16.0f
187 });
188
189 std::vector<float> outputExpected = std::vector<float>(
190 {
191 1.0f, 3.0f, 9.0f, 11.0f,
192 2.0f, 4.0f, 10.0f, 12.0f,
193 5.0f, 7.0f, 13.0f, 15.0f,
194 6.0f, 8.0f, 14.0f, 16.0f
195 });
196
197 return SpaceToBatchNdTestImpl<T>(
198 workloadFactory, memoryManager, inputTensorInfo, outputTensorInfo, input, outputExpected, desc);
199}
200
201template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
202LayerTestResult<T, 4> SpaceToBatchNdPaddingTest(
203 armnn::IWorkloadFactory& workloadFactory,
204 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
205 armnn::DataLayout dataLayout = armnn::DataLayout::NCHW)
206{
207 armnn::TensorInfo inputTensorInfo;
208 armnn::TensorInfo outputTensorInfo;
209
210 unsigned int inputShape[] = {2, 1, 2, 4};
211 unsigned int outputShape[] = {8, 1, 1, 3};
212
213 armnn::SpaceToBatchNdQueueDescriptor desc;
214 desc.m_Parameters.m_DataLayout = dataLayout;
215 desc.m_Parameters.m_BlockShape = {2, 2};
216 desc.m_Parameters.m_PadList = {{0, 0}, {2, 0}};
217
218 inputTensorInfo = armnn::TensorInfo(4, inputShape, ArmnnType);
219 outputTensorInfo = armnn::TensorInfo(4, outputShape, ArmnnType);
220
221 std::vector<float> input = std::vector<float>(
222 {
223 1.0f, 2.0f, 3.0f, 4.0f,
224 5.0f, 6.0f, 7.0f, 8.0f,
225 9.0f, 10.0f, 11.0f, 12.0f,
226 13.0f, 14.0f, 15.0f, 16.0f
227 });
228
229 std::vector<float> outputExpected = std::vector<float>(
230 {
231 0.0f, 1.0f, 3.0f,
232 0.0f, 9.0f, 11.0f,
233 0.0f, 2.0f, 4.0f,
234 0.0f, 10.0f, 12.0f,
235 0.0f, 5.0f, 7.0f,
236 0.0f, 13.0f, 15.0f,
237 0.0f, 6.0f, 8.0f,
238 0.0f, 14.0f, 16.0f
239 });
240
241 return SpaceToBatchNdTestImpl<T>(
242 workloadFactory, memoryManager, inputTensorInfo, outputTensorInfo, input, outputExpected, desc);
243}
244
245template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
246LayerTestResult<T, 4> SpaceToBatchNdSimpleNhwcTest(
247 armnn::IWorkloadFactory& workloadFactory,
248 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
249{
250 return SpaceToBatchNdSimpleTest<ArmnnType>(workloadFactory, memoryManager, armnn::DataLayout::NHWC);
251}
252
253template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
254LayerTestResult<T, 4> SpaceToBatchNdMultiChannelsNhwcTest(
255 armnn::IWorkloadFactory& workloadFactory,
256 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
257{
258 return SpaceToBatchNdMultiChannelsTest<ArmnnType>(workloadFactory, memoryManager, armnn::DataLayout::NHWC);
259}
260
261template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
262LayerTestResult<T, 4> SpaceToBatchNdMultiBlockNhwcTest(
263 armnn::IWorkloadFactory& workloadFactory,
264 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
265{
266 return SpaceToBatchNdMultiBlockTest<ArmnnType>(workloadFactory, memoryManager, armnn::DataLayout::NHWC);
267}
268
269template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
270LayerTestResult<T, 4> SpaceToBatchNdPaddingNhwcTest(
271 armnn::IWorkloadFactory& workloadFactory,
272 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
273{
274 return SpaceToBatchNdPaddingTest<ArmnnType>(workloadFactory, memoryManager, armnn::DataLayout::NHWC);
275}
276
277} // anonymous namespace
278
279LayerTestResult<float, 4> SpaceToBatchNdSimpleFloat32Test(
280 armnn::IWorkloadFactory& workloadFactory,
281 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
282{
283 return SpaceToBatchNdSimpleTest<armnn::DataType::Float32>(workloadFactory, memoryManager);
284}
285
286LayerTestResult<float, 4> SpaceToBatchNdMultiChannelsFloat32Test(
287 armnn::IWorkloadFactory& workloadFactory,
288 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
289{
290 return SpaceToBatchNdMultiChannelsTest<armnn::DataType::Float32>(workloadFactory, memoryManager);
291}
292
293LayerTestResult<float, 4> SpaceToBatchNdMultiBlockFloat32Test(
294 armnn::IWorkloadFactory& workloadFactory,
295 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
296{
297 return SpaceToBatchNdMultiBlockTest<armnn::DataType::Float32>(workloadFactory, memoryManager);
298}
299
300LayerTestResult<float, 4> SpaceToBatchNdPaddingFloat32Test(
301 armnn::IWorkloadFactory& workloadFactory,
302 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
303{
304 return SpaceToBatchNdPaddingTest<armnn::DataType::Float32>(workloadFactory, memoryManager);
305}
306
Matthew Jackson9bff1442019-09-12 09:08:23 +0100307LayerTestResult<armnn::Half, 4> SpaceToBatchNdSimpleFloat16Test(
308 armnn::IWorkloadFactory& workloadFactory,
309 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
310{
311 return SpaceToBatchNdSimpleTest<armnn::DataType::Float16>(workloadFactory, memoryManager);
312}
313
314LayerTestResult<armnn::Half, 4> SpaceToBatchNdMultiChannelsFloat16Test(
315 armnn::IWorkloadFactory& workloadFactory,
316 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
317{
318 return SpaceToBatchNdMultiChannelsTest<armnn::DataType::Float16>(workloadFactory, memoryManager);
319}
320
321LayerTestResult<armnn::Half, 4> SpaceToBatchNdMultiBlockFloat16Test(
322 armnn::IWorkloadFactory& workloadFactory,
323 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
324{
325 return SpaceToBatchNdMultiBlockTest<armnn::DataType::Float16>(workloadFactory, memoryManager);
326}
327
328LayerTestResult<armnn::Half, 4> SpaceToBatchNdPaddingFloat16Test(
329 armnn::IWorkloadFactory& workloadFactory,
330 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
331{
332 return SpaceToBatchNdPaddingTest<armnn::DataType::Float16>(workloadFactory, memoryManager);
333}
334
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100335LayerTestResult<uint8_t, 4> SpaceToBatchNdSimpleUint8Test(
336 armnn::IWorkloadFactory& workloadFactory,
337 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
338{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000339 return SpaceToBatchNdSimpleTest<armnn::DataType::QAsymmU8>(workloadFactory, memoryManager);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100340}
341
342LayerTestResult<uint8_t, 4> SpaceToBatchNdMultiChannelsUint8Test(
343 armnn::IWorkloadFactory& workloadFactory,
344 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
345{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000346 return SpaceToBatchNdMultiChannelsTest<armnn::DataType::QAsymmU8>(workloadFactory, memoryManager);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100347}
348
349LayerTestResult<uint8_t, 4> SpaceToBatchNdMultiBlockUint8Test(
350 armnn::IWorkloadFactory& workloadFactory,
351 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
352{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000353 return SpaceToBatchNdMultiBlockTest<armnn::DataType::QAsymmU8>(workloadFactory, memoryManager);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100354}
355
356LayerTestResult<uint8_t, 4> SpaceToBatchNdPaddingUint8Test(
357 armnn::IWorkloadFactory& workloadFactory,
358 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
359{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000360 return SpaceToBatchNdPaddingTest<armnn::DataType::QAsymmU8>(workloadFactory, memoryManager);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100361}
362
363LayerTestResult<float, 4> SpaceToBatchNdSimpleNhwcFloat32Test(
364 armnn::IWorkloadFactory& workloadFactory,
365 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
366{
367 return SpaceToBatchNdSimpleNhwcTest<armnn::DataType::Float32>(workloadFactory, memoryManager);
368}
369
370LayerTestResult<float, 4> SpaceToBatchNdMultiChannelsNhwcFloat32Test(
371 armnn::IWorkloadFactory& workloadFactory,
372 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
373{
374 return SpaceToBatchNdMultiChannelsNhwcTest<armnn::DataType::Float32>(workloadFactory, memoryManager);
375}
376
377LayerTestResult<float, 4> SpaceToBatchNdMultiBlockNhwcFloat32Test(
378 armnn::IWorkloadFactory& workloadFactory,
379 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
380{
381 return SpaceToBatchNdMultiBlockNhwcTest<armnn::DataType::Float32>(workloadFactory, memoryManager);
382}
383
384LayerTestResult<float, 4> SpaceToBatchNdPaddingNhwcFloat32Test(
385 armnn::IWorkloadFactory& workloadFactory,
386 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
387{
388 return SpaceToBatchNdPaddingNhwcTest<armnn::DataType::Float32>(workloadFactory, memoryManager);
389}
390
Matthew Jackson9bff1442019-09-12 09:08:23 +0100391LayerTestResult<armnn::Half, 4> SpaceToBatchNdSimpleNhwcFloat16Test(
392 armnn::IWorkloadFactory& workloadFactory,
393 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
394{
395 return SpaceToBatchNdSimpleNhwcTest<armnn::DataType::Float16>(workloadFactory, memoryManager);
396}
397
398LayerTestResult<armnn::Half, 4> SpaceToBatchNdMultiChannelsNhwcFloat16Test(
399 armnn::IWorkloadFactory& workloadFactory,
400 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
401{
402 return SpaceToBatchNdMultiChannelsNhwcTest<armnn::DataType::Float16>(workloadFactory, memoryManager);
403}
404
405LayerTestResult<armnn::Half, 4> SpaceToBatchNdMultiBlockNhwcFloat16Test(
406 armnn::IWorkloadFactory& workloadFactory,
407 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
408{
409 return SpaceToBatchNdMultiBlockNhwcTest<armnn::DataType::Float16>(workloadFactory, memoryManager);
410}
411
412LayerTestResult<armnn::Half, 4> SpaceToBatchNdPaddingNhwcFloat16Test(
413 armnn::IWorkloadFactory& workloadFactory,
414 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
415{
416 return SpaceToBatchNdPaddingNhwcTest<armnn::DataType::Float16>(workloadFactory, memoryManager);
417}
418
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100419LayerTestResult<uint8_t, 4> SpaceToBatchNdSimpleNhwcUint8Test(
420 armnn::IWorkloadFactory& workloadFactory,
421 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
422{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000423 return SpaceToBatchNdSimpleNhwcTest<armnn::DataType::QAsymmU8>(workloadFactory, memoryManager);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100424}
425
426LayerTestResult<uint8_t, 4> SpaceToBatchNdMultiChannelsNhwcUint8Test(
427 armnn::IWorkloadFactory& workloadFactory,
428 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
429{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000430 return SpaceToBatchNdMultiChannelsNhwcTest<armnn::DataType::QAsymmU8>(workloadFactory, memoryManager);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100431}
432
433LayerTestResult<uint8_t, 4> SpaceToBatchNdMultiBlockNhwcUint8Test(
434 armnn::IWorkloadFactory& workloadFactory,
435 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
436{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000437 return SpaceToBatchNdMultiBlockNhwcTest<armnn::DataType::QAsymmU8>(workloadFactory, memoryManager);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100438}
439
440LayerTestResult<uint8_t, 4> SpaceToBatchNdPaddingNhwcUint8Test(
441 armnn::IWorkloadFactory& workloadFactory,
442 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
443{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000444 return SpaceToBatchNdPaddingNhwcTest<armnn::DataType::QAsymmU8>(workloadFactory, memoryManager);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100445}
446
447LayerTestResult<int16_t, 4> SpaceToBatchNdSimpleUint16Test(
448 armnn::IWorkloadFactory& workloadFactory,
449 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
450{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000451 return SpaceToBatchNdSimpleTest<armnn::DataType::QSymmS16>(workloadFactory, memoryManager);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100452}
453
454LayerTestResult<int16_t, 4> SpaceToBatchNdMultiChannelsUint16Test(
455 armnn::IWorkloadFactory& workloadFactory,
456 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
457{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000458 return SpaceToBatchNdMultiChannelsTest<armnn::DataType::QSymmS16>(workloadFactory, memoryManager);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100459}
460
461LayerTestResult<int16_t, 4> SpaceToBatchNdMultiBlockUint16Test(
462 armnn::IWorkloadFactory& workloadFactory,
463 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
464{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000465 return SpaceToBatchNdMultiBlockTest<armnn::DataType::QSymmS16>(workloadFactory, memoryManager);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100466}
467
468LayerTestResult<int16_t, 4> SpaceToBatchNdPaddingUint16Test(
469 armnn::IWorkloadFactory& workloadFactory,
470 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
471{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000472 return SpaceToBatchNdPaddingTest<armnn::DataType::QSymmS16>(workloadFactory, memoryManager);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100473}
474
475LayerTestResult<int16_t, 4> SpaceToBatchNdSimpleNhwcUint16Test(
476 armnn::IWorkloadFactory& workloadFactory,
477 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
478{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000479 return SpaceToBatchNdSimpleNhwcTest<armnn::DataType::QSymmS16>(workloadFactory, memoryManager);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100480}
481
482LayerTestResult<int16_t, 4> SpaceToBatchNdMultiChannelsNhwcUint16Test(
483 armnn::IWorkloadFactory& workloadFactory,
484 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
485{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000486 return SpaceToBatchNdMultiChannelsNhwcTest<armnn::DataType::QSymmS16>(workloadFactory, memoryManager);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100487}
488
489LayerTestResult<int16_t, 4> SpaceToBatchNdMultiBlockNhwcUint16Test(
490 armnn::IWorkloadFactory& workloadFactory,
491 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
492{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000493 return SpaceToBatchNdMultiBlockNhwcTest<armnn::DataType::QSymmS16>(workloadFactory, memoryManager);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100494}
495
496LayerTestResult<int16_t, 4> SpaceToBatchNdPaddingNhwcUint16Test(
497 armnn::IWorkloadFactory& workloadFactory,
498 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
499{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000500 return SpaceToBatchNdPaddingNhwcTest<armnn::DataType::QSymmS16>(workloadFactory, memoryManager);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100501}