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