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