blob: 692103e8ad46c98e9d56732e76c16a56c714ed72 [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 "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
Teresa Charlinfbf0e5b2020-08-17 01:01:06 +010067 ARMNN_NO_DEPRECATE_WARN_BEGIN
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +010068 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
69 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
Teresa Charlinfbf0e5b2020-08-17 01:01:06 +010070 ARMNN_NO_DEPRECATE_WARN_END
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +010071
72 armnn::WorkloadInfo info;
73 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
74 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
75
76 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateSpaceToBatchNd(descriptor, info);
77
78 inputHandle->Allocate();
79 outputHandle->Allocate();
80
81 CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
82
83 workload->Execute();
84
85 CopyDataFromITensorHandle(&ret.output[0][0][0][0], outputHandle.get());
86
87 return ret;
88}
89
90template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
91LayerTestResult<T, 4> SpaceToBatchNdSimpleTest(
92 armnn::IWorkloadFactory& workloadFactory,
93 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
94 armnn::DataLayout dataLayout = armnn::DataLayout::NCHW)
95{
96 armnn::TensorInfo inputTensorInfo;
97 armnn::TensorInfo outputTensorInfo;
98
99 unsigned int inputShape[] = {1, 1, 2, 2};
100 unsigned int outputShape[] = {4, 1, 1, 1};
101
102 armnn::SpaceToBatchNdQueueDescriptor desc;
103 desc.m_Parameters.m_DataLayout = dataLayout;
104 desc.m_Parameters.m_BlockShape = {2, 2};
105 desc.m_Parameters.m_PadList = {{0, 0}, {0, 0}};
106
107 inputTensorInfo = armnn::TensorInfo(4, inputShape, ArmnnType);
108 outputTensorInfo = armnn::TensorInfo(4, outputShape, ArmnnType);
109
110 std::vector<float> input = std::vector<float>(
111 {
112 1.0f, 2.0f, 3.0f, 4.0f
113 });
114
115 std::vector<float> outputExpected = std::vector<float>(
116 {
117 1.0f, 2.0f, 3.0f, 4.0f
118 });
119
120 return SpaceToBatchNdTestImpl<T>(
121 workloadFactory, memoryManager, inputTensorInfo, outputTensorInfo, input, outputExpected, desc);
122}
123
124template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
125LayerTestResult<T, 4> SpaceToBatchNdMultiChannelsTest(
126 armnn::IWorkloadFactory& workloadFactory,
127 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
128 armnn::DataLayout dataLayout = armnn::DataLayout::NCHW)
129{
130 armnn::TensorInfo inputTensorInfo;
131 armnn::TensorInfo outputTensorInfo;
132
133 unsigned int inputShape[] = {1, 3, 2, 2};
134 unsigned int outputShape[] = {4, 3, 1, 1};
135
136 armnn::SpaceToBatchNdQueueDescriptor desc;
137 desc.m_Parameters.m_DataLayout = dataLayout;
138 desc.m_Parameters.m_BlockShape = {2, 2};
139 desc.m_Parameters.m_PadList = {{0, 0}, {0, 0}};
140
141 inputTensorInfo = armnn::TensorInfo(4, inputShape, ArmnnType);
142 outputTensorInfo = armnn::TensorInfo(4, outputShape, ArmnnType);
143
144 std::vector<float> input = std::vector<float>(
145 {
146 1.0f, 4.0f, 7.0f, 10.0f,
147 2.0f, 5.0, 8.0, 11.0f,
148 3.0f, 6.0f, 9.0f, 12.0f
149 });
150
151 std::vector<float> outputExpected = std::vector<float>(
152 {
153 1.0f, 2.0f, 3.0f,
154 4.0f, 5.0f, 6.0f,
155 7.0f, 8.0f, 9.0f,
156 10.0f, 11.0f, 12.0f
157 });
158
159 return SpaceToBatchNdTestImpl<T>(
160 workloadFactory, memoryManager, inputTensorInfo, outputTensorInfo, input, outputExpected, desc);
161}
162
163template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
164LayerTestResult<T, 4> SpaceToBatchNdMultiBlockTest(
165 armnn::IWorkloadFactory& workloadFactory,
166 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
167 armnn::DataLayout dataLayout = armnn::DataLayout::NCHW)
168{
169 armnn::TensorInfo inputTensorInfo;
170 armnn::TensorInfo outputTensorInfo;
171
172 unsigned int inputShape[] = {1, 1, 4, 4};
173 unsigned int outputShape[] = {4, 1, 2, 2};
174
175 armnn::SpaceToBatchNdQueueDescriptor desc;
176 desc.m_Parameters.m_DataLayout = dataLayout;
177 desc.m_Parameters.m_BlockShape = {2, 2};
178 desc.m_Parameters.m_PadList = {{0, 0}, {0, 0}};
179
180 inputTensorInfo = armnn::TensorInfo(4, inputShape, ArmnnType);
181 outputTensorInfo = armnn::TensorInfo(4, outputShape, ArmnnType);
182
183 std::vector<float> input = std::vector<float>(
184 {
185 1.0f, 2.0f, 3.0f, 4.0f,
186 5.0f, 6.0f, 7.0f, 8.0f,
187 9.0f, 10.0f, 11.0f, 12.0f,
188 13.0f, 14.0f, 15.0f, 16.0f
189 });
190
191 std::vector<float> outputExpected = std::vector<float>(
192 {
193 1.0f, 3.0f, 9.0f, 11.0f,
194 2.0f, 4.0f, 10.0f, 12.0f,
195 5.0f, 7.0f, 13.0f, 15.0f,
196 6.0f, 8.0f, 14.0f, 16.0f
197 });
198
199 return SpaceToBatchNdTestImpl<T>(
200 workloadFactory, memoryManager, inputTensorInfo, outputTensorInfo, input, outputExpected, desc);
201}
202
203template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
204LayerTestResult<T, 4> SpaceToBatchNdPaddingTest(
205 armnn::IWorkloadFactory& workloadFactory,
206 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
207 armnn::DataLayout dataLayout = armnn::DataLayout::NCHW)
208{
209 armnn::TensorInfo inputTensorInfo;
210 armnn::TensorInfo outputTensorInfo;
211
212 unsigned int inputShape[] = {2, 1, 2, 4};
213 unsigned int outputShape[] = {8, 1, 1, 3};
214
215 armnn::SpaceToBatchNdQueueDescriptor desc;
216 desc.m_Parameters.m_DataLayout = dataLayout;
217 desc.m_Parameters.m_BlockShape = {2, 2};
218 desc.m_Parameters.m_PadList = {{0, 0}, {2, 0}};
219
220 inputTensorInfo = armnn::TensorInfo(4, inputShape, ArmnnType);
221 outputTensorInfo = armnn::TensorInfo(4, outputShape, ArmnnType);
222
223 std::vector<float> input = std::vector<float>(
224 {
225 1.0f, 2.0f, 3.0f, 4.0f,
226 5.0f, 6.0f, 7.0f, 8.0f,
227 9.0f, 10.0f, 11.0f, 12.0f,
228 13.0f, 14.0f, 15.0f, 16.0f
229 });
230
231 std::vector<float> outputExpected = std::vector<float>(
232 {
233 0.0f, 1.0f, 3.0f,
234 0.0f, 9.0f, 11.0f,
235 0.0f, 2.0f, 4.0f,
236 0.0f, 10.0f, 12.0f,
237 0.0f, 5.0f, 7.0f,
238 0.0f, 13.0f, 15.0f,
239 0.0f, 6.0f, 8.0f,
240 0.0f, 14.0f, 16.0f
241 });
242
243 return SpaceToBatchNdTestImpl<T>(
244 workloadFactory, memoryManager, inputTensorInfo, outputTensorInfo, input, outputExpected, desc);
245}
246
247template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
248LayerTestResult<T, 4> SpaceToBatchNdSimpleNhwcTest(
249 armnn::IWorkloadFactory& workloadFactory,
250 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
251{
252 return SpaceToBatchNdSimpleTest<ArmnnType>(workloadFactory, memoryManager, armnn::DataLayout::NHWC);
253}
254
255template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
256LayerTestResult<T, 4> SpaceToBatchNdMultiChannelsNhwcTest(
257 armnn::IWorkloadFactory& workloadFactory,
258 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
259{
260 return SpaceToBatchNdMultiChannelsTest<ArmnnType>(workloadFactory, memoryManager, armnn::DataLayout::NHWC);
261}
262
263template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
264LayerTestResult<T, 4> SpaceToBatchNdMultiBlockNhwcTest(
265 armnn::IWorkloadFactory& workloadFactory,
266 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
267{
268 return SpaceToBatchNdMultiBlockTest<ArmnnType>(workloadFactory, memoryManager, armnn::DataLayout::NHWC);
269}
270
271template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
272LayerTestResult<T, 4> SpaceToBatchNdPaddingNhwcTest(
273 armnn::IWorkloadFactory& workloadFactory,
274 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
275{
276 return SpaceToBatchNdPaddingTest<ArmnnType>(workloadFactory, memoryManager, armnn::DataLayout::NHWC);
277}
278
279} // anonymous namespace
280
281LayerTestResult<float, 4> SpaceToBatchNdSimpleFloat32Test(
282 armnn::IWorkloadFactory& workloadFactory,
283 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
284{
285 return SpaceToBatchNdSimpleTest<armnn::DataType::Float32>(workloadFactory, memoryManager);
286}
287
288LayerTestResult<float, 4> SpaceToBatchNdMultiChannelsFloat32Test(
289 armnn::IWorkloadFactory& workloadFactory,
290 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
291{
292 return SpaceToBatchNdMultiChannelsTest<armnn::DataType::Float32>(workloadFactory, memoryManager);
293}
294
295LayerTestResult<float, 4> SpaceToBatchNdMultiBlockFloat32Test(
296 armnn::IWorkloadFactory& workloadFactory,
297 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
298{
299 return SpaceToBatchNdMultiBlockTest<armnn::DataType::Float32>(workloadFactory, memoryManager);
300}
301
302LayerTestResult<float, 4> SpaceToBatchNdPaddingFloat32Test(
303 armnn::IWorkloadFactory& workloadFactory,
304 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
305{
306 return SpaceToBatchNdPaddingTest<armnn::DataType::Float32>(workloadFactory, memoryManager);
307}
308
Matthew Jackson9bff1442019-09-12 09:08:23 +0100309LayerTestResult<armnn::Half, 4> SpaceToBatchNdSimpleFloat16Test(
310 armnn::IWorkloadFactory& workloadFactory,
311 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
312{
313 return SpaceToBatchNdSimpleTest<armnn::DataType::Float16>(workloadFactory, memoryManager);
314}
315
316LayerTestResult<armnn::Half, 4> SpaceToBatchNdMultiChannelsFloat16Test(
317 armnn::IWorkloadFactory& workloadFactory,
318 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
319{
320 return SpaceToBatchNdMultiChannelsTest<armnn::DataType::Float16>(workloadFactory, memoryManager);
321}
322
323LayerTestResult<armnn::Half, 4> SpaceToBatchNdMultiBlockFloat16Test(
324 armnn::IWorkloadFactory& workloadFactory,
325 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
326{
327 return SpaceToBatchNdMultiBlockTest<armnn::DataType::Float16>(workloadFactory, memoryManager);
328}
329
330LayerTestResult<armnn::Half, 4> SpaceToBatchNdPaddingFloat16Test(
331 armnn::IWorkloadFactory& workloadFactory,
332 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
333{
334 return SpaceToBatchNdPaddingTest<armnn::DataType::Float16>(workloadFactory, memoryManager);
335}
336
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100337LayerTestResult<uint8_t, 4> SpaceToBatchNdSimpleUint8Test(
338 armnn::IWorkloadFactory& workloadFactory,
339 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
340{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000341 return SpaceToBatchNdSimpleTest<armnn::DataType::QAsymmU8>(workloadFactory, memoryManager);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100342}
343
344LayerTestResult<uint8_t, 4> SpaceToBatchNdMultiChannelsUint8Test(
345 armnn::IWorkloadFactory& workloadFactory,
346 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
347{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000348 return SpaceToBatchNdMultiChannelsTest<armnn::DataType::QAsymmU8>(workloadFactory, memoryManager);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100349}
350
351LayerTestResult<uint8_t, 4> SpaceToBatchNdMultiBlockUint8Test(
352 armnn::IWorkloadFactory& workloadFactory,
353 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
354{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000355 return SpaceToBatchNdMultiBlockTest<armnn::DataType::QAsymmU8>(workloadFactory, memoryManager);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100356}
357
358LayerTestResult<uint8_t, 4> SpaceToBatchNdPaddingUint8Test(
359 armnn::IWorkloadFactory& workloadFactory,
360 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
361{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000362 return SpaceToBatchNdPaddingTest<armnn::DataType::QAsymmU8>(workloadFactory, memoryManager);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100363}
364
365LayerTestResult<float, 4> SpaceToBatchNdSimpleNhwcFloat32Test(
366 armnn::IWorkloadFactory& workloadFactory,
367 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
368{
369 return SpaceToBatchNdSimpleNhwcTest<armnn::DataType::Float32>(workloadFactory, memoryManager);
370}
371
372LayerTestResult<float, 4> SpaceToBatchNdMultiChannelsNhwcFloat32Test(
373 armnn::IWorkloadFactory& workloadFactory,
374 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
375{
376 return SpaceToBatchNdMultiChannelsNhwcTest<armnn::DataType::Float32>(workloadFactory, memoryManager);
377}
378
379LayerTestResult<float, 4> SpaceToBatchNdMultiBlockNhwcFloat32Test(
380 armnn::IWorkloadFactory& workloadFactory,
381 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
382{
383 return SpaceToBatchNdMultiBlockNhwcTest<armnn::DataType::Float32>(workloadFactory, memoryManager);
384}
385
386LayerTestResult<float, 4> SpaceToBatchNdPaddingNhwcFloat32Test(
387 armnn::IWorkloadFactory& workloadFactory,
388 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
389{
390 return SpaceToBatchNdPaddingNhwcTest<armnn::DataType::Float32>(workloadFactory, memoryManager);
391}
392
Matthew Jackson9bff1442019-09-12 09:08:23 +0100393LayerTestResult<armnn::Half, 4> SpaceToBatchNdSimpleNhwcFloat16Test(
394 armnn::IWorkloadFactory& workloadFactory,
395 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
396{
397 return SpaceToBatchNdSimpleNhwcTest<armnn::DataType::Float16>(workloadFactory, memoryManager);
398}
399
400LayerTestResult<armnn::Half, 4> SpaceToBatchNdMultiChannelsNhwcFloat16Test(
401 armnn::IWorkloadFactory& workloadFactory,
402 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
403{
404 return SpaceToBatchNdMultiChannelsNhwcTest<armnn::DataType::Float16>(workloadFactory, memoryManager);
405}
406
407LayerTestResult<armnn::Half, 4> SpaceToBatchNdMultiBlockNhwcFloat16Test(
408 armnn::IWorkloadFactory& workloadFactory,
409 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
410{
411 return SpaceToBatchNdMultiBlockNhwcTest<armnn::DataType::Float16>(workloadFactory, memoryManager);
412}
413
414LayerTestResult<armnn::Half, 4> SpaceToBatchNdPaddingNhwcFloat16Test(
415 armnn::IWorkloadFactory& workloadFactory,
416 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
417{
418 return SpaceToBatchNdPaddingNhwcTest<armnn::DataType::Float16>(workloadFactory, memoryManager);
419}
420
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100421LayerTestResult<uint8_t, 4> SpaceToBatchNdSimpleNhwcUint8Test(
422 armnn::IWorkloadFactory& workloadFactory,
423 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
424{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000425 return SpaceToBatchNdSimpleNhwcTest<armnn::DataType::QAsymmU8>(workloadFactory, memoryManager);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100426}
427
428LayerTestResult<uint8_t, 4> SpaceToBatchNdMultiChannelsNhwcUint8Test(
429 armnn::IWorkloadFactory& workloadFactory,
430 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
431{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000432 return SpaceToBatchNdMultiChannelsNhwcTest<armnn::DataType::QAsymmU8>(workloadFactory, memoryManager);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100433}
434
435LayerTestResult<uint8_t, 4> SpaceToBatchNdMultiBlockNhwcUint8Test(
436 armnn::IWorkloadFactory& workloadFactory,
437 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
438{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000439 return SpaceToBatchNdMultiBlockNhwcTest<armnn::DataType::QAsymmU8>(workloadFactory, memoryManager);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100440}
441
442LayerTestResult<uint8_t, 4> SpaceToBatchNdPaddingNhwcUint8Test(
443 armnn::IWorkloadFactory& workloadFactory,
444 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
445{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000446 return SpaceToBatchNdPaddingNhwcTest<armnn::DataType::QAsymmU8>(workloadFactory, memoryManager);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100447}
448
449LayerTestResult<int16_t, 4> SpaceToBatchNdSimpleUint16Test(
450 armnn::IWorkloadFactory& workloadFactory,
451 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
452{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000453 return SpaceToBatchNdSimpleTest<armnn::DataType::QSymmS16>(workloadFactory, memoryManager);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100454}
455
456LayerTestResult<int16_t, 4> SpaceToBatchNdMultiChannelsUint16Test(
457 armnn::IWorkloadFactory& workloadFactory,
458 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
459{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000460 return SpaceToBatchNdMultiChannelsTest<armnn::DataType::QSymmS16>(workloadFactory, memoryManager);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100461}
462
463LayerTestResult<int16_t, 4> SpaceToBatchNdMultiBlockUint16Test(
464 armnn::IWorkloadFactory& workloadFactory,
465 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
466{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000467 return SpaceToBatchNdMultiBlockTest<armnn::DataType::QSymmS16>(workloadFactory, memoryManager);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100468}
469
470LayerTestResult<int16_t, 4> SpaceToBatchNdPaddingUint16Test(
471 armnn::IWorkloadFactory& workloadFactory,
472 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
473{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000474 return SpaceToBatchNdPaddingTest<armnn::DataType::QSymmS16>(workloadFactory, memoryManager);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100475}
476
477LayerTestResult<int16_t, 4> SpaceToBatchNdSimpleNhwcUint16Test(
478 armnn::IWorkloadFactory& workloadFactory,
479 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
480{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000481 return SpaceToBatchNdSimpleNhwcTest<armnn::DataType::QSymmS16>(workloadFactory, memoryManager);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100482}
483
484LayerTestResult<int16_t, 4> SpaceToBatchNdMultiChannelsNhwcUint16Test(
485 armnn::IWorkloadFactory& workloadFactory,
486 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
487{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000488 return SpaceToBatchNdMultiChannelsNhwcTest<armnn::DataType::QSymmS16>(workloadFactory, memoryManager);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100489}
490
491LayerTestResult<int16_t, 4> SpaceToBatchNdMultiBlockNhwcUint16Test(
492 armnn::IWorkloadFactory& workloadFactory,
493 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
494{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000495 return SpaceToBatchNdMultiBlockNhwcTest<armnn::DataType::QSymmS16>(workloadFactory, memoryManager);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100496}
497
498LayerTestResult<int16_t, 4> SpaceToBatchNdPaddingNhwcUint16Test(
499 armnn::IWorkloadFactory& workloadFactory,
500 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
501{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000502 return SpaceToBatchNdPaddingNhwcTest<armnn::DataType::QSymmS16>(workloadFactory, memoryManager);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100503}