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