IVGCVSW-3173 Extend reference softmax workload to support qsymm16
[platform/upstream/armnn.git] / src / backends / backendsCommon / test / LayerTests.hpp
1 //
2 // Copyright © 2017 Arm Ltd. All rights reserved.
3 // SPDX-License-Identifier: MIT
4 //
5 #pragma once
6
7 #include <armnn/ArmNN.hpp>
8 #include <armnn/Tensor.hpp>
9
10 #include <Half.hpp>
11 #include "TensorCopyUtils.hpp"
12 #include "WorkloadTestUtils.hpp"
13
14 #include <backendsCommon/CpuTensorHandle.hpp>
15 #include <backendsCommon/IBackendInternal.hpp>
16 #include <backendsCommon/IMemoryManager.hpp>
17 #include <reference/workloads/Decoders.hpp>
18 #include <reference/workloads/Encoders.hpp>
19 #include <test/TensorHelpers.hpp>
20
21 #include <boost/multi_array.hpp>
22 #include <boost/assert.hpp>
23
24 #include <array>
25
26 // Layer callables.
27
28 namespace armnn
29 {
30 class IWorkloadFactory;
31 }
32
33 template <std::size_t n>
34 boost::array<unsigned int, n> GetTensorShapeAsArray(const armnn::TensorInfo& tensorInfo)
35 {
36     BOOST_ASSERT_MSG(n == tensorInfo.GetNumDimensions(),
37         "Attempting to construct a shape array of mismatching size");
38
39     boost::array<unsigned int, n> shape;
40     for (unsigned int i = 0; i < n; i++)
41     {
42         shape[i] = tensorInfo.GetShape()[i];
43     }
44     return shape;
45 }
46
47 template <typename T, std::size_t n>
48 struct LayerTestResult
49 {
50     LayerTestResult(const armnn::TensorInfo& outputInfo)
51     {
52         auto shape( GetTensorShapeAsArray<n>(outputInfo) );
53         output.resize(shape);
54         outputExpected.resize(shape);
55         supported = true;
56         compareBoolean = false;
57     }
58
59     boost::multi_array<T, n> output;
60     boost::multi_array<T, n> outputExpected;
61     bool supported;
62     bool compareBoolean;
63 };
64
65 LayerTestResult<float, 4> SimpleConvolution2d3x5Test(
66     armnn::IWorkloadFactory& workloadFactory,
67     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
68     bool biasEnabled,
69     const armnn::DataLayout layout);
70
71 LayerTestResult<float, 4> SimpleConvolution2d3x3Test(
72     armnn::IWorkloadFactory& workloadFactory,
73     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
74     bool biasEnabled,
75     const armnn::DataLayout layout);
76
77 LayerTestResult<float, 4> SimpleConvolution2d3x3Stride2x2Test(
78     armnn::IWorkloadFactory& workloadFactory,
79     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
80     bool biasEnabled,
81     const armnn::DataLayout layout);
82
83 LayerTestResult<float, 4> SimpleConvolution2d3x3NhwcTest(
84     armnn::IWorkloadFactory& workloadFactory,
85     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
86     bool biasEnabled);
87
88 LayerTestResult<float, 4>
89 Convolution2dAsymmetricPaddingLargerThanHalfKernelSizeTest(
90     armnn::IWorkloadFactory& workloadFactory,
91     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
92     const armnn::DataLayout layout);
93
94 LayerTestResult<float, 4> Convolution2dAsymmetricPaddingTest(
95     armnn::IWorkloadFactory& workloadFactory,
96     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
97     const armnn::DataLayout layout);
98
99 LayerTestResult<float,   4> Convolution1dTest(
100     armnn::IWorkloadFactory& workloadFactory,
101     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
102     bool biasEnabled);
103
104 LayerTestResult<uint8_t, 4> Convolution1dUint8Test(
105     armnn::IWorkloadFactory& workloadFactory,
106     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
107     bool biasEnabled);
108
109 LayerTestResult<float, 4> DepthwiseConvolution2dTest(
110     armnn::IWorkloadFactory& workloadFactory,
111     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
112     bool biasEnabled,
113     const armnn::DataLayout layout);
114
115 LayerTestResult<float, 4> DepthwiseConvolution2dDepthNhwcTest(
116     armnn::IWorkloadFactory& workloadFactory,
117     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
118     bool biasEnabled);
119
120 LayerTestResult<float, 4> DepthwiseConvolution2dDepthMul1Test(
121     armnn::IWorkloadFactory& workloadFactory,
122     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
123     bool biasEnabled,
124     const armnn::DataLayout layout);
125
126 LayerTestResult<float, 4> DepthwiseConvolution2dAsymmetricTest(
127     armnn::IWorkloadFactory& workloadFactory,
128     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
129     bool biasEnabled,
130     const armnn::DataLayout layout);
131
132 LayerTestResult<float, 4> SimpleDepthwiseConvolution2d3x3Dilation3x3NhwcTest(armnn::IWorkloadFactory& workloadFactory,
133         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
134
135 LayerTestResult<float, 4> CompareDepthwiseConvolution2dFloatTest(
136     armnn::IWorkloadFactory& workloadFactory,
137     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
138     armnn::IWorkloadFactory& refWorkloadFactory,
139     const armnn::DataLayout layout);
140
141 LayerTestResult<uint8_t, 4> CompareDepthwiseConvolution2dUint8Test(
142     armnn::IWorkloadFactory& workloadFactory,
143     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
144     armnn::IWorkloadFactory& refWorkloadFactory,
145     const armnn::DataLayout layout);
146
147 LayerTestResult<float,   4> SimpleMaxPooling2dSize2x2Stride2x2Test(
148     armnn::IWorkloadFactory& workloadFactory,
149     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
150     bool forceNoPadding);
151
152 LayerTestResult<uint8_t, 4> SimpleMaxPooling2dSize2x2Stride2x2Uint8Test(
153     armnn::IWorkloadFactory& workloadFactory,
154     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
155     bool forceNoPadding);
156
157 LayerTestResult<float,   4> SimpleMaxPooling2dSize3x3Stride2x4Test(
158     armnn::IWorkloadFactory& workloadFactory,
159     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
160     bool forceNoPadding);
161
162 LayerTestResult<uint8_t, 4> SimpleMaxPooling2dSize3x3Stride2x4Uint8Test(
163     armnn::IWorkloadFactory& workloadFactory,
164     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
165     bool forceNoPadding );
166
167 LayerTestResult<float,   4> IgnorePaddingSimpleMaxPooling2dTest(
168     armnn::IWorkloadFactory& workloadFactory,
169     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
170
171 LayerTestResult<uint8_t, 4> IgnorePaddingSimpleMaxPooling2dUint8Test(
172     armnn::IWorkloadFactory& workloadFactory,
173     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
174
175 LayerTestResult<float,   4> IgnorePaddingMaxPooling2dSize3Test(
176     armnn::IWorkloadFactory& workloadFactory,
177     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
178
179 LayerTestResult<uint8_t, 4> IgnorePaddingMaxPooling2dSize3Uint8Test(
180     armnn::IWorkloadFactory& workloadFactory,
181     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
182
183 LayerTestResult<float,   4> SimpleMaxPooling2dTest(
184     armnn::IWorkloadFactory& workloadFactory,
185     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
186     const armnn::DataLayout dataLayout);
187
188 LayerTestResult<uint8_t, 4> SimpleMaxPooling2dUint8Test(
189     armnn::IWorkloadFactory& workloadFactory,
190     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
191     const armnn::DataLayout dataLayout);
192
193 LayerTestResult<float,   4> SimpleAveragePooling2dTest(
194     armnn::IWorkloadFactory& workloadFactory,
195     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
196     const armnn::DataLayout dataLayout);
197
198 LayerTestResult<uint8_t, 4> SimpleAveragePooling2dUint8Test(
199     armnn::IWorkloadFactory& workloadFactory,
200     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
201     const armnn::DataLayout dataLayout);
202
203 LayerTestResult<float,   4> IgnorePaddingAveragePooling2dSize3x2Stride2x2Test(
204     armnn::IWorkloadFactory& workloadFactory,
205     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
206     bool forceNoPadding);
207
208 LayerTestResult<float,   4> IgnorePaddingSimpleAveragePooling2dTest(
209     armnn::IWorkloadFactory& workloadFactory,
210     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
211
212 LayerTestResult<uint8_t, 4> IgnorePaddingSimpleAveragePooling2dUint8Test(
213     armnn::IWorkloadFactory& workloadFactory,
214     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
215
216 LayerTestResult<float, 4>   IgnorePaddingSimpleAveragePooling2dNoPaddingTest(
217     armnn::IWorkloadFactory& workloadFactory,
218     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
219
220 LayerTestResult<uint8_t, 4> IgnorePaddingSimpleAveragePooling2dNoPaddingUint8Test(
221     armnn::IWorkloadFactory& workloadFactory,
222     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
223
224 LayerTestResult<float,   4> IgnorePaddingAveragePooling2dSize3Test(
225     armnn::IWorkloadFactory& workloadFactory,
226     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
227
228 LayerTestResult<uint8_t, 4> IgnorePaddingAveragePooling2dSize3Uint8Test(
229     armnn::IWorkloadFactory& workloadFactory,
230     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
231
232 LayerTestResult<float,   4> SimpleL2Pooling2dTest(
233     armnn::IWorkloadFactory& workloadFactory,
234     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
235     const armnn::DataLayout dataLayout);
236
237 LayerTestResult<uint8_t, 4> SimpleL2Pooling2dUint8Test(
238     armnn::IWorkloadFactory& workloadFactory,
239     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
240     const armnn::DataLayout dataLayout);
241
242 LayerTestResult<float,   4> L2Pooling2dSize3Stride1Test(
243     armnn::IWorkloadFactory& workloadFactory,
244     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
245
246 LayerTestResult<uint8_t, 4> L2Pooling2dSize3Stride1Uint8Test(
247     armnn::IWorkloadFactory& workloadFactory,
248     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
249
250 LayerTestResult<float,   4> L2Pooling2dSize3Stride3Test(
251     armnn::IWorkloadFactory& workloadFactory,
252     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
253
254 LayerTestResult<uint8_t, 4> L2Pooling2dSize3Stride3Uint8Test(
255     armnn::IWorkloadFactory& workloadFactory,
256     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
257
258 LayerTestResult<float,   4> L2Pooling2dSize3Stride4Test(
259     armnn::IWorkloadFactory& workloadFactory,
260     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
261
262 LayerTestResult<uint8_t, 4> L2Pooling2dSize3Stride4Uint8Test(
263     armnn::IWorkloadFactory& workloadFactory,
264     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
265
266 LayerTestResult<float,   4> L2Pooling2dSize7Test(
267     armnn::IWorkloadFactory& workloadFactory,
268     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
269
270 LayerTestResult<uint8_t, 4> L2Pooling2dSize7Uint8Test(
271     armnn::IWorkloadFactory& workloadFactory,
272     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
273
274 LayerTestResult<float,   4> L2Pooling2dSize9Test(
275     armnn::IWorkloadFactory& workloadFactory,
276     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
277
278 LayerTestResult<uint8_t, 4> L2Pooling2dSize9Uint8Test(
279     armnn::IWorkloadFactory& workloadFactory,
280     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
281
282 LayerTestResult<float,   4> LargeTensorsAveragePooling2dTest(
283     armnn::IWorkloadFactory& workloadFactory,
284     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
285
286 LayerTestResult<uint8_t, 4> LargeTensorsAveragePooling2dUint8Test(
287     armnn::IWorkloadFactory& workloadFactory,
288     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
289
290 LayerTestResult<float,   4> IgnorePaddingSimpleL2Pooling2dTest(
291     armnn::IWorkloadFactory& workloadFactory,
292     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
293
294 LayerTestResult<uint8_t, 4> IgnorePaddingSimpleL2Pooling2dUint8Test(
295     armnn::IWorkloadFactory& workloadFactory,
296     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
297
298 LayerTestResult<float,   4> IgnorePaddingL2Pooling2dSize3Test(
299     armnn::IWorkloadFactory& workloadFactory,
300     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
301
302 LayerTestResult<uint8_t, 4> IgnorePaddingL2Pooling2dSize3Uint8Test(
303     armnn::IWorkloadFactory& workloadFactory,
304     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
305
306 LayerTestResult<float,   4> AsymmetricNonSquarePooling2dTest(
307     armnn::IWorkloadFactory& workloadFactory,
308     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
309
310 LayerTestResult<uint8_t, 4> AsymmetricNonSquarePooling2dUint8Test(
311     armnn::IWorkloadFactory& workloadFactory,
312     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
313
314 LayerTestResult<float, 4> ComparePooling2dTest(
315     armnn::IWorkloadFactory& workloadFactory,
316     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
317     armnn::IWorkloadFactory& refWorkloadFactory,
318     armnn::PoolingAlgorithm  poolingType);
319
320 LayerTestResult<uint8_t, 4> ComparePooling2dUint8Test(
321     armnn::IWorkloadFactory& workloadFactory,
322     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
323     armnn::IWorkloadFactory& refWorkloadFactory,
324     armnn::PoolingAlgorithm  poolingType);
325
326 LayerTestResult<float, 4> ConstantLinearActivationTest(
327     armnn::IWorkloadFactory& workloadFactory,
328     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
329
330 LayerTestResult<float, 4> SimpleNormalizationAcrossTest(
331     armnn::IWorkloadFactory& workloadFactory,
332     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
333
334 LayerTestResult<float, 4> SimpleNormalizationWithinTest(
335     armnn::IWorkloadFactory& workloadFactory,
336     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
337
338 LayerTestResult<float,4> SimpleNormalizationAcrossNhwcTest(
339     armnn::IWorkloadFactory& workloadFactory,
340     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
341
342 LayerTestResult<float, 2> SimpleSoftmaxTest(
343     armnn::IWorkloadFactory& workloadFactory,
344     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
345     float beta);
346
347 LayerTestResult<float, 3> Simple3dSoftmaxTest(
348         armnn::IWorkloadFactory& workloadFactory,
349         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
350         float beta);
351
352 LayerTestResult<float, 4> Simple4dSoftmaxTest(
353         armnn::IWorkloadFactory& workloadFactory,
354         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
355         float beta);
356
357 LayerTestResult<uint8_t, 2> SimpleSoftmaxUint8Test(
358     armnn::IWorkloadFactory& workloadFactory,
359     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
360     float beta);
361
362 LayerTestResult<uint8_t,3> Simple3dSoftmaxUint8Test(
363         armnn::IWorkloadFactory& workloadFactory,
364         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
365         float beta);
366
367 LayerTestResult<uint8_t,4> Simple4dSoftmaxUint8Test(
368         armnn::IWorkloadFactory& workloadFactory,
369         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
370         float beta);
371
372 LayerTestResult<int16_t,2> SimpleSoftmaxUint16Test(
373         armnn::IWorkloadFactory& workloadFactory,
374         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
375         float beta);
376
377 LayerTestResult<int16_t,3> Simple3dSoftmaxUint16Test(
378         armnn::IWorkloadFactory& workloadFactory,
379         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
380         float beta);
381
382 LayerTestResult<int16_t,4> Simple4dSoftmaxUint16Test(
383         armnn::IWorkloadFactory& workloadFactory,
384         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
385         float beta);
386
387 LayerTestResult<float, 4> SimpleSigmoidTest(
388     armnn::IWorkloadFactory& workloadFactory,
389     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
390
391 template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
392 LayerTestResult<T, 4> SimpleReshapeTest(
393     armnn::IWorkloadFactory& workloadFactory,
394     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
395
396 LayerTestResult<float, 4> SimpleFloorTest(
397     armnn::IWorkloadFactory& workloadFactory,
398     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
399
400 LayerTestResult<float, 1> Concatenation1dTest(
401     armnn::IWorkloadFactory& workloadFactory,
402     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
403
404 LayerTestResult<float, 2> Concatenation2dDim0Test(
405     armnn::IWorkloadFactory& workloadFactory,
406     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
407
408 LayerTestResult<float, 2> Concatenation2dDim1Test(
409     armnn::IWorkloadFactory& workloadFactory,
410     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
411
412 LayerTestResult<float, 2> Concatenation2dDim0DiffInputDimsTest(
413     armnn::IWorkloadFactory& workloadFactory,
414     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
415
416 LayerTestResult<float, 2> Concatenation2dDim1DiffInputDimsTest(
417     armnn::IWorkloadFactory& workloadFactory,
418     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
419
420 LayerTestResult<float, 3> Concatenation3dDim0Test(
421     armnn::IWorkloadFactory& workloadFactory,
422     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
423
424 LayerTestResult<float, 3> Concatenation3dDim1Test(
425     armnn::IWorkloadFactory& workloadFactory,
426     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
427
428 LayerTestResult<float, 3> Concatenation3dDim2Test(
429     armnn::IWorkloadFactory& workloadFactory,
430     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
431     bool useSubtensor);
432
433 LayerTestResult<float, 3> Concatenation3dDim0DiffInputDimsTest(
434     armnn::IWorkloadFactory& workloadFactory,
435     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
436
437 LayerTestResult<float, 3> Concatenation3dDim1DiffInputDimsTest(
438     armnn::IWorkloadFactory& workloadFactory,
439     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
440
441 LayerTestResult<float, 3> Concatenation3dDim2DiffInputDimsTest(
442     armnn::IWorkloadFactory& workloadFactory,
443     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
444     bool useSubtensor);
445
446 LayerTestResult<float, 4> Concatenation4dDim0Test(
447     armnn::IWorkloadFactory& workloadFactory,
448     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
449
450 LayerTestResult<float, 4> Concatenation4dDim1Test(
451     armnn::IWorkloadFactory& workloadFactory,
452     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
453
454 LayerTestResult<float, 4> Concatenation4dDim2Test(
455     armnn::IWorkloadFactory& workloadFactory,
456     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
457
458 LayerTestResult<float, 4> Concatenation4dDim3Test(
459     armnn::IWorkloadFactory& workloadFactory,
460     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
461     bool useSubtensor);
462
463 LayerTestResult<float, 4> Concatenation4dDiffShapeDim0Test(
464     armnn::IWorkloadFactory& workloadFactory,
465     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
466
467 LayerTestResult<float, 4> Concatenation4dDiffShapeDim1Test(
468     armnn::IWorkloadFactory& workloadFactory,
469     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
470
471 LayerTestResult<float, 4> Concatenation4dDiffShapeDim2Test(
472     armnn::IWorkloadFactory& workloadFactory,
473     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
474
475 LayerTestResult<float, 4> Concatenation4dDiffShapeDim3Test(
476     armnn::IWorkloadFactory& workloadFactory,
477     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
478     bool useSubtensor);
479
480 LayerTestResult<uint8_t, 4> Concatenation4dDim0Uint8Test(
481     armnn::IWorkloadFactory& workloadFactory,
482     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
483
484 LayerTestResult<uint8_t, 4> Concatenation4dDim1Uint8Test(
485     armnn::IWorkloadFactory& workloadFactory,
486     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
487
488 LayerTestResult<uint8_t, 4> Concatenation4dDim2Uint8Test(
489     armnn::IWorkloadFactory& workloadFactory,
490     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
491
492 LayerTestResult<uint8_t, 4> Concatenation4dDim3Uint8Test(
493     armnn::IWorkloadFactory& workloadFactory,
494     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
495     bool useSubtensor);
496
497 LayerTestResult<uint8_t, 4> Concatenation4dDiffShapeDim0Uint8Test(
498     armnn::IWorkloadFactory& workloadFactory,
499     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
500
501 LayerTestResult<uint8_t, 4> Concatenation4dDiffShapeDim1Uint8Test(
502     armnn::IWorkloadFactory& workloadFactory,
503     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
504
505 LayerTestResult<uint8_t, 4> Concatenation4dDiffShapeDim2Uint8Test(
506     armnn::IWorkloadFactory& workloadFactory,
507     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
508
509 LayerTestResult<uint8_t, 4> Concatenation4dDiffShapeDim3Uint8Test(
510     armnn::IWorkloadFactory& workloadFactory,
511     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
512     bool useSubtensor);
513
514 LayerTestResult<uint8_t, 4> SimpleSigmoidUint8Test(
515     armnn::IWorkloadFactory& workloadFactory,
516     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
517
518 LayerTestResult<int16_t, 4> SimpleSigmoidInt16Test(
519         armnn::IWorkloadFactory& workloadFactory,
520         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
521
522 LayerTestResult<float, 4> CompareConvolution2dTest(
523     armnn::IWorkloadFactory& workloadFactory,
524     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
525     armnn::IWorkloadFactory& refWorkloadFactory);
526
527 template<typename T>
528 LayerTestResult<T, 4> CompareDepthwiseConvolution2dTest(
529     armnn::IWorkloadFactory& workloadFactory,
530     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
531     armnn::IWorkloadFactory& refWorkloadFactory,
532     const armnn::DataLayout layout);
533
534 LayerTestResult<float, 4> CompareNormalizationTest(
535     armnn::IWorkloadFactory& workloadFactory,
536     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
537     armnn::IWorkloadFactory& refWorkloadFactory,
538     armnn::NormalizationAlgorithmChannel normChannel,
539     armnn::NormalizationAlgorithmMethod normMethod);
540
541 LayerTestResult<float, 2> CompareSoftmaxTest(
542     armnn::IWorkloadFactory& workloadFactory,
543     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
544     armnn::IWorkloadFactory& refWorkloadFactory,
545     float beta);
546
547 LayerTestResult<float, 2> FullyConnectedFloat32Test(
548     armnn::IWorkloadFactory& workloadFactory,
549     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
550     bool biasEnabled,
551     bool transposeWeights);
552
553 std::vector<LayerTestResult<float, 3>> SplitterTest(
554     armnn::IWorkloadFactory& workloadFactory,
555     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
556
557 LayerTestResult<float, 3> CopyViaSplitterTest(
558     armnn::IWorkloadFactory& workloadFactory,
559     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
560
561 LayerTestResult<float, 3> ConcatTest(
562     armnn::IWorkloadFactory& workloadFactory,
563     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
564
565 LayerTestResult<float, 4> AdditionTest(
566     armnn::IWorkloadFactory& workloadFactory,
567     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
568
569 LayerTestResult<float, 4> AdditionBroadcast1ElementTest(
570     armnn::IWorkloadFactory& workloadFactory,
571     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
572
573 LayerTestResult<float, 4> AdditionBroadcastTest(
574     armnn::IWorkloadFactory& workloadFactory,
575     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
576
577 LayerTestResult<float, 4> CompareAdditionTest(
578     armnn::IWorkloadFactory& workloadFactory,
579     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
580     armnn::IWorkloadFactory& refWorkloadFactory);
581
582 LayerTestResult<float, 4> SubtractionTest(
583     armnn::IWorkloadFactory& workloadFactory,
584     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
585
586 LayerTestResult<float, 4> SubtractionBroadcast1ElementTest(
587     armnn::IWorkloadFactory& workloadFactory,
588     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
589
590 LayerTestResult<float, 4> SubtractionBroadcastTest(
591     armnn::IWorkloadFactory& workloadFactory,
592     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
593
594 LayerTestResult<float, 4> CompareActivationTest(
595     armnn::IWorkloadFactory& workloadFactory,
596     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
597     armnn::IWorkloadFactory& refWorkloadFactory,
598     armnn::ActivationFunction f,
599     unsigned int batchSize);
600
601 LayerTestResult<float, 4> DivisionTest(
602     armnn::IWorkloadFactory& workloadFactory,
603     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
604
605 LayerTestResult<float, 4> DivisionByZeroTest(
606     armnn::IWorkloadFactory& workloadFactory,
607     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
608
609 LayerTestResult<float, 4> DivisionBroadcast1ElementTest(
610     armnn::IWorkloadFactory& workloadFactory,
611     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
612
613 LayerTestResult<float, 4> DivisionBroadcast1DVectorTest(
614     armnn::IWorkloadFactory& workloadFactory,
615     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
616
617 LayerTestResult<float, 4> MultiplicationTest(
618     armnn::IWorkloadFactory& workloadFactory,
619     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
620
621 LayerTestResult<float, 4> MultiplicationBroadcast1ElementTest(
622     armnn::IWorkloadFactory& workloadFactory,
623     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
624
625 LayerTestResult<float, 4> MultiplicationBroadcast1DVectorTest(
626     armnn::IWorkloadFactory& workloadFactory,
627     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
628
629 LayerTestResult<float, 4> CompareMultiplicationTest(
630     armnn::IWorkloadFactory& workloadFactory,
631     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
632     armnn::IWorkloadFactory& refWorkloadFactory);
633
634 LayerTestResult<float, 4> BatchNormTest(
635     armnn::IWorkloadFactory& workloadFactory,
636     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
637
638 LayerTestResult<float, 4> BatchNormNhwcTest(
639     armnn::IWorkloadFactory& workloadFactory,
640     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
641
642 LayerTestResult<float, 4> CompareBatchNormTest(
643     armnn::IWorkloadFactory& workloadFactory,
644     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
645     armnn::IWorkloadFactory& refWorkloadFactory);
646
647 LayerTestResult<float, 4> BoundedReLuUpperAndLowerBoundTest(
648     armnn::IWorkloadFactory& workloadFactory,
649     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
650
651 LayerTestResult<uint8_t, 4> BoundedReLuUint8UpperAndLowerBoundTest(
652     armnn::IWorkloadFactory& workloadFactor,
653     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManagery);
654
655 LayerTestResult<float, 4> BoundedReLuUpperBoundOnlyTest(
656     armnn::IWorkloadFactory& workloadFactory,
657     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
658
659 LayerTestResult<uint8_t, 4> BoundedReLuUint8UpperBoundOnlyTest(
660     armnn::IWorkloadFactory& workloadFactory,
661     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
662
663 LayerTestResult<float, 4> CompareBoundedReLuTest(
664     armnn::IWorkloadFactory& workloadFactory,
665     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
666     armnn::IWorkloadFactory& refWorkloadFactory,
667     float upperBound,
668     float lowerBound);
669
670
671 LayerTestResult<int16_t, 4> ReLuInt16Test(
672         armnn::IWorkloadFactory& workloadFactory,
673         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
674
675 LayerTestResult<int16_t, 4> BoundedReLuInt16Test(
676         armnn::IWorkloadFactory& workloadFactory,
677         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
678
679 LayerTestResult<int16_t, 4> SoftReLuInt16Test(
680         armnn::IWorkloadFactory& workloadFactory,
681         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
682
683 LayerTestResult<int16_t, 4> LeakyReLuInt16Test(
684         armnn::IWorkloadFactory& workloadFactory,
685         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
686
687 LayerTestResult<int16_t, 4> AbsInt16Test(
688         armnn::IWorkloadFactory& workloadFactory,
689         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
690
691 LayerTestResult<int16_t, 4> SqrtInt16Test(
692         armnn::IWorkloadFactory& workloadFactory,
693         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
694
695 LayerTestResult<int16_t, 4> SquareInt16Test(
696         armnn::IWorkloadFactory& workloadFactory,
697         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
698
699 LayerTestResult<int16_t, 4> TanhInt16Test(
700         armnn::IWorkloadFactory& workloadFactory,
701         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
702
703
704 // Tests that the output should be identical to the input when the output dimensions match the input ones.
705 LayerTestResult<float, 4> ResizeBilinearNopTest(
706     armnn::IWorkloadFactory& workloadFactory,
707     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
708     const armnn::DataLayout dataLayout);
709
710 // Tests the behaviour of the resize bilinear operation when rescaling a 2x2 image into a 1x1 image.
711 LayerTestResult<float, 4> SimpleResizeBilinearTest(
712     armnn::IWorkloadFactory& workloadFactory,
713     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
714     const armnn::DataLayout dataLayout);
715
716 // Tests the resize bilinear for minification of a square input matrix (also: input dimensions are a
717 // multiple of output dimensions).
718 LayerTestResult<float, 4> ResizeBilinearSqMinTest(
719     armnn::IWorkloadFactory& workloadFactory,
720     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
721     const armnn::DataLayout dataLayout);
722
723 // Tests the resize bilinear for minification (output dimensions smaller than input dimensions).
724 LayerTestResult<float, 4> ResizeBilinearMinTest(
725     armnn::IWorkloadFactory& workloadFactory,
726     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
727     const armnn::DataLayout dataLayout);
728
729 // Tests the resize bilinear for magnification (output dimensions bigger than input dimensions).
730 LayerTestResult<float, 4> ResizeBilinearMagTest(
731     armnn::IWorkloadFactory& workloadFactory,
732     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
733     const armnn::DataLayout  dataLayout);
734
735 LayerTestResult<float, 2> Rsqrt2dTestCommon(
736         armnn::IWorkloadFactory& workloadFactory,
737         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
738         const armnn::TensorInfo inputTensorInfo,
739         const armnn::TensorInfo outputTensorInfo,
740         std::vector<float> inputValues,
741         std::vector<float> expectedOutputValues);
742
743 LayerTestResult<float, 2> Rsqrt2dTest(
744     armnn::IWorkloadFactory& workloadFactory,
745     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
746
747 LayerTestResult<float, 3> Rsqrt3dTest(
748     armnn::IWorkloadFactory& workloadFactory,
749     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
750
751 LayerTestResult<float, 2> RsqrtZeroTest(
752     armnn::IWorkloadFactory& workloadFactory,
753     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
754
755 LayerTestResult<float, 2> RsqrtNegativeTest(
756     armnn::IWorkloadFactory& workloadFactory,
757     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
758
759 LayerTestResult<float, 4> BatchNormTest(
760     armnn::IWorkloadFactory& workloadFactory,
761     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
762
763 LayerTestResult<float, 4> BatchNormNhwcTest(
764     armnn::IWorkloadFactory& workloadFactory,
765     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
766
767 LayerTestResult<float, 2> FakeQuantizationTest(
768     armnn::IWorkloadFactory& workloadFactory,
769     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
770
771 LayerTestResult<float, 4> L2Normalization1dTest(
772     armnn::IWorkloadFactory& workloadFactory,
773     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
774     const armnn::DataLayout layout);
775
776 LayerTestResult<float, 4> L2Normalization2dTest(
777     armnn::IWorkloadFactory& workloadFactory,
778     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
779     const armnn::DataLayout layout);
780
781 LayerTestResult<float, 4> L2Normalization3dTest(
782     armnn::IWorkloadFactory& workloadFactory,
783     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
784     const armnn::DataLayout layout);
785
786 LayerTestResult<float, 4> L2Normalization4dTest(
787     armnn::IWorkloadFactory& workloadFactory,
788     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
789     const armnn::DataLayout layout);
790
791 LayerTestResult<float, 4> ConstantTest(
792     armnn::IWorkloadFactory& workloadFactory,
793     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
794
795 LayerTestResult<uint8_t, 4> ConstantUint8SimpleQuantizationScaleNoOffsetTest(
796     armnn::IWorkloadFactory& workloadFactory,
797     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
798
799 LayerTestResult<int16_t, 4> ConstantInt16SimpleQuantizationScaleNoOffsetTest(
800     armnn::IWorkloadFactory& workloadFactory,
801     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
802
803 LayerTestResult<uint8_t, 4> BoundedReLuUint8Test(
804     armnn::IWorkloadFactory& workloadFactory,
805     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
806     float upperBound);
807
808 LayerTestResult<uint8_t, 4> BoundedReLuUint8Test(
809     armnn::IWorkloadFactory& workloadFactory,
810     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
811     float upperBound,
812     float lowerBound);
813
814 template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
815 LayerTestResult<T, 2> FullyConnectedTest(
816     armnn::IWorkloadFactory& workloadFactory,
817     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
818     bool biasEnabled);
819
820 std::vector<LayerTestResult<uint8_t, 3>> SplitterUint8Test(
821     armnn::IWorkloadFactory& workloadFactory,
822     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
823
824 LayerTestResult<uint8_t, 3> CopyViaSplitterUint8Test(
825     armnn::IWorkloadFactory& workloadFactory,
826     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
827
828 LayerTestResult<uint8_t, 3> ConcatUint8Test(
829     armnn::IWorkloadFactory& workloadFactory,
830     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
831
832 LayerTestResult<uint16_t, 3> ConcatUint16Test(
833     armnn::IWorkloadFactory& workloadFactory,
834     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
835
836 LayerTestResult<uint8_t, 3> ConcatUint8DifferentQParamsTest(
837     armnn::IWorkloadFactory& workloadFactory,
838     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
839
840 LayerTestResult<uint8_t, 4> AdditionUint8Test(
841     armnn::IWorkloadFactory& workloadFactory,
842     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
843
844 LayerTestResult<uint8_t, 4> AdditionBroadcast1ElementUint8Test(
845     armnn::IWorkloadFactory& workloadFactory,
846     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
847
848 LayerTestResult<uint8_t, 4> AdditionBroadcastUint8Test(
849     armnn::IWorkloadFactory& workloadFactory,
850     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
851
852 LayerTestResult<int16_t, 4> AdditionInt16Test(
853     armnn::IWorkloadFactory& workloadFactory,
854     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
855
856 LayerTestResult<int16_t, 4> AdditionBroadcastInt16Test(
857     armnn::IWorkloadFactory& workloadFactory,
858     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
859
860 LayerTestResult<int16_t, 4> AdditionBroadcast1ElementInt16Test(
861     armnn::IWorkloadFactory& workloadFactory,
862     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
863
864 LayerTestResult<uint8_t, 4> SubtractionUint8Test(
865     armnn::IWorkloadFactory& workloadFactory,
866     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
867
868 LayerTestResult<uint8_t, 4> SubtractionBroadcast1ElementUint8Test(
869     armnn::IWorkloadFactory& workloadFactory,
870     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
871
872 LayerTestResult<uint8_t, 4> SubtractionBroadcastUint8Test(
873     armnn::IWorkloadFactory& workloadFactory,
874     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
875
876 LayerTestResult<int16_t, 4> SubtractionInt16Test(
877     armnn::IWorkloadFactory& workloadFactory,
878     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
879
880 LayerTestResult<int16_t, 4> SubtractionBroadcast1ElementInt16Test(
881     armnn::IWorkloadFactory& workloadFactory,
882     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
883
884 LayerTestResult<int16_t, 4> SubtractionBroadcastInt16Test(
885     armnn::IWorkloadFactory& workloadFactory,
886     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
887
888 LayerTestResult<uint8_t, 4> CompareActivationUint8Test(
889     armnn::IWorkloadFactory& workloadFactory,
890     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
891     armnn::IWorkloadFactory& refWorkloadFactory,
892     armnn::ActivationFunction f);
893
894 LayerTestResult<int16_t, 4> CompareActivationInt16Test(
895         armnn::IWorkloadFactory& workloadFactory,
896         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
897         armnn::IWorkloadFactory& refWorkloadFactory,
898         armnn::ActivationFunction f);
899
900 LayerTestResult<uint8_t, 2> CompareSoftmaxUint8Test(
901     armnn::IWorkloadFactory& workloadFactory,
902     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
903     armnn::IWorkloadFactory& refWorkloadFactory,
904     float beta);
905
906 LayerTestResult<uint8_t, 4> MultiplicationUint8Test(
907     armnn::IWorkloadFactory& workloadFactory,
908     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
909
910 LayerTestResult<uint8_t, 4> MultiplicationBroadcast1ElementUint8Test(
911     armnn::IWorkloadFactory& workloadFactory,
912     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
913
914 LayerTestResult<uint8_t, 4> MultiplicationBroadcast1DVectorUint8Test(
915     armnn::IWorkloadFactory& workloadFactory,
916     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
917
918 LayerTestResult<int16_t, 4> MultiplicationInt16Test(
919     armnn::IWorkloadFactory& workloadFactory,
920     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
921
922 LayerTestResult<int16_t, 4> MultiplicationBroadcast1ElementInt16Test(
923     armnn::IWorkloadFactory& workloadFactory,
924     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
925
926 LayerTestResult<int16_t, 4> MultiplicationBroadcast1DVectorInt16Test(
927     armnn::IWorkloadFactory& workloadFactory,
928     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
929
930 LayerTestResult<uint8_t, 4> DivisionUint8Test(
931     armnn::IWorkloadFactory& workloadFactory,
932     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
933
934 LayerTestResult<uint8_t, 4> DivisionBroadcast1ElementUint8Test(
935     armnn::IWorkloadFactory& workloadFactory,
936     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
937
938 LayerTestResult<uint8_t, 4> DivisionBroadcast1DVectorUint8Test(
939     armnn::IWorkloadFactory& workloadFactory,
940     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
941
942 LayerTestResult<int16_t, 4> DivisionInt16Test(
943     armnn::IWorkloadFactory& workloadFactory,
944     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
945
946 LayerTestResult<int16_t, 4> DivisionBroadcast1ElementInt16Test(
947     armnn::IWorkloadFactory& workloadFactory,
948     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
949
950 LayerTestResult<int16_t, 4> DivisionBroadcast1DVectorInt16Test(
951     armnn::IWorkloadFactory& workloadFactory,
952     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
953
954 LayerTestResult<uint8_t, 4> SimpleConvolution2d3x5Uint8Test(
955     armnn::IWorkloadFactory& workloadFactory,
956     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
957     bool biasEnabled,
958     const armnn::DataLayout layout);
959
960 LayerTestResult<uint8_t, 4> SimpleConvolution2d3x3Uint8Test(
961     armnn::IWorkloadFactory& workloadFactory,
962     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
963     bool biasEnabled,
964     const armnn::DataLayout layout);
965
966 LayerTestResult<int16_t, 4> SimpleConvolution2d3x5QSymm16Test(
967         armnn::IWorkloadFactory& workloadFactory,
968         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
969         bool biasEnabled,
970         const armnn::DataLayout layout);
971
972 LayerTestResult<int16_t, 4> SimpleConvolution2d3x3QSymm16Test(
973         armnn::IWorkloadFactory& workloadFactory,
974         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
975         bool biasEnabled,
976         const armnn::DataLayout layout);
977
978 LayerTestResult<uint8_t, 4> DepthwiseConvolution2dUint8Test(
979     armnn::IWorkloadFactory& workloadFactory,
980     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
981     bool biasEnabled,
982     const armnn::DataLayout layout);
983
984 LayerTestResult<uint8_t, 4> DepthwiseConvolution2dDepthMul1Uint8Test(
985     armnn::IWorkloadFactory& workloadFactory,
986     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
987     bool biasEnabled,
988     const armnn::DataLayout layout);
989
990 LayerTestResult<int16_t, 4> DepthwiseConvolution2dInt16Test(
991     armnn::IWorkloadFactory& workloadFactory,
992     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
993     bool biasEnabled,
994     const armnn::DataLayout layout);
995
996 LayerTestResult<int16_t, 4> DepthwiseConvolution2dDepthMul1Int16Test(
997     armnn::IWorkloadFactory& workloadFactory,
998     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
999     bool biasEnabled,
1000     const armnn::DataLayout layout);
1001
1002 LayerTestResult<uint8_t, 4> ConstantLinearActivationUint8Test(
1003     armnn::IWorkloadFactory& workloadFactory,
1004     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1005
1006 LayerTestResult<int16_t, 4> ConstantLinearActivationInt16Test(
1007     armnn::IWorkloadFactory& workloadFactory,
1008     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1009
1010 LayerTestResult<uint8_t, 4> ResizeBilinearNopUint8Test(
1011     armnn::IWorkloadFactory& workloadFactory,
1012     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1013
1014 LayerTestResult<uint8_t, 4> SimpleResizeBilinearUint8Test(
1015     armnn::IWorkloadFactory& workloadFactory,
1016     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1017
1018 LayerTestResult<uint8_t, 4> ResizeBilinearSqMinUint8Test(
1019     armnn::IWorkloadFactory& workloadFactory,
1020     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1021
1022 LayerTestResult<uint8_t, 4> ResizeBilinearMinUint8Test(
1023     armnn::IWorkloadFactory& workloadFactory,
1024     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1025
1026 LayerTestResult<uint8_t, 4> ResizeBilinearMagUint8Test(
1027     armnn::IWorkloadFactory& workloadFactory,
1028     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1029
1030 LayerTestResult<uint8_t, 4> BatchNormUint8Test(
1031     armnn::IWorkloadFactory& workloadFactory,
1032     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1033
1034 LayerTestResult<uint8_t, 4> BatchNormUint8NhwcTest(
1035     armnn::IWorkloadFactory& workloadFactory,
1036     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1037
1038 LayerTestResult<uint8_t, 4> ConstantUint8CustomQuantizationScaleAndOffsetTest(
1039     armnn::IWorkloadFactory& workloadFactory,
1040     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1041
1042 LayerTestResult<int16_t, 4> ConstantInt16CustomQuantizationScaleAndOffsetTest(
1043     armnn::IWorkloadFactory& workloadFactory,
1044     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1045
1046 LayerTestResult<uint8_t, 1> Concatenation1dUint8Test(
1047     armnn::IWorkloadFactory& workloadFactory,
1048     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1049
1050 LayerTestResult<uint8_t, 2> Concatenation2dDim0Uint8Test(
1051     armnn::IWorkloadFactory& workloadFactory,
1052     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1053
1054 LayerTestResult<uint8_t, 2> Concatenation2dDim1Uint8Test(
1055     armnn::IWorkloadFactory& workloadFactory,
1056     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1057
1058 LayerTestResult<uint8_t, 2> Concatenation2dDim0DiffInputDimsUint8Test(
1059     armnn::IWorkloadFactory& workloadFactory,
1060     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1061
1062 LayerTestResult<uint8_t, 2> Concatenation2dDim1DiffInputDimsUint8Test(
1063     armnn::IWorkloadFactory& workloadFactory,
1064     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1065
1066 LayerTestResult<uint8_t, 3> Concatenation3dDim0Uint8Test(
1067     armnn::IWorkloadFactory& workloadFactory,
1068     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1069
1070 LayerTestResult<uint8_t, 3> Concatenation3dDim1Uint8Test(
1071     armnn::IWorkloadFactory& workloadFactory,
1072     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1073
1074 LayerTestResult<uint8_t, 3> Concatenation3dDim2Uint8Test(
1075     armnn::IWorkloadFactory& workloadFactory,
1076     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1077     bool useSubtensor);
1078
1079 LayerTestResult<uint8_t, 3> Concatenation3dDim0DiffInputDimsUint8Test(
1080     armnn::IWorkloadFactory& workloadFactory,
1081     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1082
1083 LayerTestResult<uint8_t, 3> Concatenation3dDim1DiffInputDimsUint8Test(
1084     armnn::IWorkloadFactory& workloadFactory,
1085     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1086
1087 LayerTestResult<uint8_t, 3> Concatenation3dDim2DiffInputDimsUint8Test(
1088     armnn::IWorkloadFactory& workloadFactory,
1089     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1090     bool useSubtensor);
1091
1092 LayerTestResult<uint8_t, 4> EqualSimpleTest(
1093     armnn::IWorkloadFactory& workloadFactory,
1094     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1095
1096 LayerTestResult<uint8_t, 4> EqualBroadcast1ElementTest(
1097     armnn::IWorkloadFactory& workloadFactory,
1098     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1099
1100 LayerTestResult<uint8_t, 4> EqualBroadcast1DVectorTest(
1101     armnn::IWorkloadFactory& workloadFactory,
1102     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1103
1104 LayerTestResult<uint8_t, 4> EqualUint8Test(
1105     armnn::IWorkloadFactory& workloadFactory,
1106     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1107
1108 LayerTestResult<uint8_t, 4> EqualBroadcast1ElementUint8Test(
1109     armnn::IWorkloadFactory& workloadFactory,
1110     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1111
1112 LayerTestResult<uint8_t, 4> EqualBroadcast1DVectorUint8Test(
1113     armnn::IWorkloadFactory& workloadFactory,
1114     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1115
1116 LayerTestResult<uint8_t, 4> GreaterSimpleTest(
1117     armnn::IWorkloadFactory& workloadFactory,
1118     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1119
1120 LayerTestResult<uint8_t, 4> GreaterBroadcast1ElementTest(
1121     armnn::IWorkloadFactory& workloadFactory,
1122     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1123
1124 LayerTestResult<uint8_t, 4> GreaterBroadcast1DVectorTest(
1125     armnn::IWorkloadFactory& workloadFactory,
1126     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1127
1128 LayerTestResult<uint8_t, 4> GreaterUint8Test(
1129     armnn::IWorkloadFactory& workloadFactory,
1130     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1131
1132 LayerTestResult<uint8_t, 4> GreaterBroadcast1ElementUint8Test(
1133     armnn::IWorkloadFactory& workloadFactory,
1134     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1135
1136 LayerTestResult<uint8_t, 4> GreaterBroadcast1DVectorUint8Test(
1137     armnn::IWorkloadFactory& workloadFactory,
1138     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1139
1140 LayerTestResult<float, 2> FullyConnectedLargeTest(
1141     armnn::IWorkloadFactory& workloadFactory,
1142     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1143     bool transposeWeights);
1144
1145 LayerTestResult<float, 4> SimplePermuteFloat32Test(
1146     armnn::IWorkloadFactory& workloadFactory,
1147     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1148
1149 LayerTestResult<uint8_t, 4> SimplePermuteUint8Test(
1150     armnn::IWorkloadFactory& workloadFactory,
1151     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1152
1153 LayerTestResult<uint8_t, 2> PadUint82dTest(
1154     armnn::IWorkloadFactory& workloadFactory,
1155     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1156
1157 LayerTestResult<uint8_t, 3> PadUint83dTest(
1158     armnn::IWorkloadFactory& workloadFactory,
1159     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1160
1161 LayerTestResult<uint8_t, 4> PadUint84dTest(
1162     armnn::IWorkloadFactory& workloadFactory,
1163     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1164
1165 LayerTestResult<float, 2> PadFloat322dTest(
1166     armnn::IWorkloadFactory& workloadFactory,
1167     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1168
1169 LayerTestResult<float, 3> PadFloat323dTest(
1170     armnn::IWorkloadFactory& workloadFactory,
1171     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1172
1173 LayerTestResult<float, 4> PadFloat324dTest(
1174     armnn::IWorkloadFactory& workloadFactory,
1175     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1176
1177 LayerTestResult<float, 4> PermuteFloat32ValueSet1Test(
1178     armnn::IWorkloadFactory& workloadFactory,
1179     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1180
1181 LayerTestResult<float, 4> PermuteFloat32ValueSet2Test(
1182     armnn::IWorkloadFactory& workloadFactory,
1183     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1184
1185 LayerTestResult<float, 4> PermuteFloat32ValueSet3Test(
1186     armnn::IWorkloadFactory& workloadFactory,
1187     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1188
1189 LayerTestResult<float, 2> LstmLayerFloat32WithCifgWithPeepholeNoProjectionTest(
1190     armnn::IWorkloadFactory& workloadFactory,
1191     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1192
1193 LayerTestResult<float, 2> LstmLayerFloat32NoCifgNoPeepholeNoProjectionTest(
1194     armnn::IWorkloadFactory& workloadFactory,
1195     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1196
1197 LayerTestResult<float, 2> LstmLayerFloat32NoCifgWithPeepholeWithProjectionTest(
1198     armnn::IWorkloadFactory& workloadFactory,
1199     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1200
1201 LayerTestResult<int16_t, 2> LstmLayerInt16NoCifgNoPeepholeNoProjectionTest(
1202     armnn::IWorkloadFactory& workloadFactory,
1203     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1204
1205 LayerTestResult<int16_t, 2> LstmLayerInt16WithCifgWithPeepholeNoProjectionTest(
1206     armnn::IWorkloadFactory& workloadFactory,
1207     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1208
1209 LayerTestResult<int16_t, 2> LstmLayerInt16NoCifgWithPeepholeWithProjectionTest(
1210     armnn::IWorkloadFactory& workloadFactory,
1211     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1212
1213 LayerTestResult<int16_t, 2> LstmLayerInt16NoCifgNoPeepholeNoProjectionInt16ConstantTest(
1214     armnn::IWorkloadFactory& workloadFactory,
1215     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1216
1217 LayerTestResult<float, 4> SimpleConvertFp16ToFp32Test(
1218     armnn::IWorkloadFactory& workloadFactory,
1219     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1220
1221 LayerTestResult<armnn::Half, 4> SimpleConvertFp32ToFp16Test(
1222     armnn::IWorkloadFactory& workloadFactory,
1223     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1224
1225 LayerTestResult<float, 4> MaximumSimpleTest(
1226         armnn::IWorkloadFactory& workloadFactory,
1227         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1228
1229 LayerTestResult<float, 4> MaximumBroadcast1ElementTest(
1230         armnn::IWorkloadFactory& workloadFactory,
1231         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1232
1233 LayerTestResult<float, 4> MaximumBroadcast1DVectorTest(
1234         armnn::IWorkloadFactory& workloadFactory,
1235         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1236
1237 LayerTestResult<uint8_t , 4> MaximumUint8Test(
1238         armnn::IWorkloadFactory& workloadFactory,
1239         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1240
1241 LayerTestResult<uint8_t, 4> MaximumBroadcast1ElementUint8Test(
1242         armnn::IWorkloadFactory& workloadFactory,
1243         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1244
1245 LayerTestResult<uint8_t, 4> MaximumBroadcast1DVectorUint8Test(
1246         armnn::IWorkloadFactory& workloadFactory,
1247         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1248
1249 LayerTestResult<int16_t , 4> MaximumInt16Test(
1250     armnn::IWorkloadFactory& workloadFactory,
1251     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1252
1253 LayerTestResult<int16_t, 4> MaximumBroadcast1ElementInt16Test(
1254     armnn::IWorkloadFactory& workloadFactory,
1255     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1256
1257 LayerTestResult<int16_t, 4> MaximumBroadcast1DVectorInt16Test(
1258     armnn::IWorkloadFactory& workloadFactory,
1259     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1260
1261 LayerTestResult<uint8_t, 1> MeanUint8SimpleTest(
1262     armnn::IWorkloadFactory& workloadFactory,
1263     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1264
1265 LayerTestResult<uint8_t, 3> MeanUint8SimpleAxisTest(
1266     armnn::IWorkloadFactory& workloadFactory,
1267     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1268
1269 LayerTestResult<uint8_t, 4> MeanUint8KeepDimsTest(
1270     armnn::IWorkloadFactory& workloadFactory,
1271     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1272
1273 LayerTestResult<uint8_t, 4> MeanUint8MultipleDimsTest(
1274     armnn::IWorkloadFactory& workloadFactory,
1275     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1276
1277 LayerTestResult<uint8_t, 1> MeanVtsUint8Test(
1278     armnn::IWorkloadFactory& workloadFactory,
1279     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1280
1281 LayerTestResult<float, 1> MeanFloatSimpleTest(
1282     armnn::IWorkloadFactory& workloadFactory,
1283     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1284
1285 LayerTestResult<float, 3> MeanFloatSimpleAxisTest(
1286     armnn::IWorkloadFactory& workloadFactory,
1287     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1288
1289 LayerTestResult<float, 4> MeanFloatKeepDimsTest(
1290     armnn::IWorkloadFactory& workloadFactory,
1291     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1292
1293 LayerTestResult<float, 4> MeanFloatMultipleDimsTest(
1294     armnn::IWorkloadFactory& workloadFactory,
1295     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1296
1297 LayerTestResult<float, 1> MeanVtsFloat1Test(
1298     armnn::IWorkloadFactory& workloadFactory,
1299     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1300
1301 LayerTestResult<float, 3> MeanVtsFloat2Test(
1302     armnn::IWorkloadFactory& workloadFactory,
1303     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1304
1305 LayerTestResult<float, 3> MeanVtsFloat3Test(
1306     armnn::IWorkloadFactory& workloadFactory,
1307     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1308
1309 LayerTestResult<float, 4> MinimumBroadcast1ElementTest1(
1310     armnn::IWorkloadFactory& workloadFactory,
1311     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1312
1313 LayerTestResult<float, 4> MinimumBroadcast1ElementTest2(
1314     armnn::IWorkloadFactory& workloadFactory,
1315     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1316
1317 LayerTestResult<uint8_t, 4> MinimumBroadcast1DVectorUint8Test(
1318     armnn::IWorkloadFactory & workloadFactory,
1319     const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager);
1320
1321 LayerTestResult<int16_t , 4> MinimumInt16Test(
1322     armnn::IWorkloadFactory& workloadFactory,
1323     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1324
1325 LayerTestResult<int16_t, 4> MinimumBroadcast1ElementInt16Test(
1326     armnn::IWorkloadFactory& workloadFactory,
1327     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1328
1329 LayerTestResult<int16_t, 4> MinimumBroadcast1DVectorInt16Test(
1330     armnn::IWorkloadFactory& workloadFactory,
1331     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1332
1333 LayerTestResult<float, 4> AdditionAfterMaxPoolTest(
1334     armnn::IWorkloadFactory& workloadFactory,
1335     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1336
1337 LayerTestResult<float, 4> SpaceToBatchNdSimpleFloat32Test(
1338     armnn::IWorkloadFactory& workloadFactory,
1339     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1340
1341 LayerTestResult<float, 4> SpaceToBatchNdMultiChannelsFloat32Test(
1342     armnn::IWorkloadFactory& workloadFactory,
1343     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1344
1345 LayerTestResult<float, 4> SpaceToBatchNdMultiBlockFloat32Test(
1346     armnn::IWorkloadFactory& workloadFactory,
1347     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1348
1349 LayerTestResult<float, 4> SpaceToBatchNdPaddingFloat32Test(
1350     armnn::IWorkloadFactory& workloadFactory,
1351     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1352
1353 LayerTestResult<uint8_t, 4> SpaceToBatchNdSimpleUint8Test(
1354     armnn::IWorkloadFactory& workloadFactory,
1355     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1356
1357 LayerTestResult<uint8_t, 4> SpaceToBatchNdMultiChannelsUint8Test(
1358     armnn::IWorkloadFactory& workloadFactory,
1359     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1360
1361 LayerTestResult<uint8_t, 4> SpaceToBatchNdMultiBlockUint8Test(
1362     armnn::IWorkloadFactory& workloadFactory,
1363     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1364
1365 LayerTestResult<uint8_t, 4> SpaceToBatchNdPaddingUint8Test(
1366     armnn::IWorkloadFactory& workloadFactory,
1367     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1368
1369 LayerTestResult<float, 4> SpaceToBatchNdSimpleNHWCFloat32Test(
1370     armnn::IWorkloadFactory& workloadFactory,
1371     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1372
1373 LayerTestResult<float, 4> SpaceToBatchNdMultiChannelsNHWCFloat32Test(
1374     armnn::IWorkloadFactory& workloadFactory,
1375     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1376
1377 LayerTestResult<float, 4> SpaceToBatchNdMultiBlockNHWCFloat32Test(
1378     armnn::IWorkloadFactory& workloadFactory,
1379     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1380
1381 LayerTestResult<float, 4> SpaceToBatchNdPaddingNHWCFloat32Test(
1382     armnn::IWorkloadFactory& workloadFactory,
1383     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1384
1385 LayerTestResult<uint8_t, 4> SpaceToBatchNdSimpleNHWCUint8Test(
1386     armnn::IWorkloadFactory& workloadFactory,
1387     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1388
1389 LayerTestResult<uint8_t, 4> SpaceToBatchNdMultiChannelsNHWCUint8Test(
1390     armnn::IWorkloadFactory& workloadFactory,
1391     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1392
1393 LayerTestResult<uint8_t, 4> SpaceToBatchNdMultiBlockNHWCUint8Test(
1394     armnn::IWorkloadFactory& workloadFactory,
1395     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1396
1397 LayerTestResult<uint8_t, 4> SpaceToBatchNdPaddingNHWCUint8Test(
1398     armnn::IWorkloadFactory& workloadFactory,
1399     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1400
1401 LayerTestResult<float, 4> BatchToSpaceNdNhwcFloat32Test1(
1402     armnn::IWorkloadFactory& workloadFactory,
1403     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1404
1405 LayerTestResult<float, 4> BatchToSpaceNdNhwcFloat32Test2(
1406     armnn::IWorkloadFactory& workloadFactory,
1407     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1408
1409 LayerTestResult<float, 4> BatchToSpaceNdNhwcFloat32Test3(
1410     armnn::IWorkloadFactory& workloadFactory,
1411     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1412
1413 LayerTestResult<float, 4> BatchToSpaceNdNhwcFloat32Test4(
1414     armnn::IWorkloadFactory& workloadFactory,
1415     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1416
1417 LayerTestResult<float, 4> BatchToSpaceNdNchwFloat32Test1(
1418     armnn::IWorkloadFactory &workloadFactory,
1419     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1420
1421 LayerTestResult<float, 4> BatchToSpaceNdNchwFloat32Test2(
1422     armnn::IWorkloadFactory &workloadFactory,
1423     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1424
1425 LayerTestResult<float, 4> BatchToSpaceNdNchwFloat32Test3(
1426     armnn::IWorkloadFactory &workloadFactory,
1427     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1428
1429 LayerTestResult<uint8_t, 4> BatchToSpaceNdNhwcUintTest1(
1430     armnn::IWorkloadFactory &workloadFactory,
1431     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1432
1433 LayerTestResult<uint8_t, 4> BatchToSpaceNdNhwcUintTest2(
1434     armnn::IWorkloadFactory &workloadFactory,
1435     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1436
1437 LayerTestResult<uint8_t, 4> BatchToSpaceNdNhwcUintTest3(
1438     armnn::IWorkloadFactory &workloadFactory,
1439     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1440
1441 LayerTestResult<uint8_t, 4> BatchToSpaceNdNchwUintTest1(
1442     armnn::IWorkloadFactory &workloadFactory,
1443     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1444
1445 LayerTestResult<uint8_t, 4> BatchToSpaceNdNchwUintTest2(
1446     armnn::IWorkloadFactory &workloadFactory,
1447     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1448
1449 LayerTestResult<uint8_t, 4> BatchToSpaceNdNchwUintTest3(
1450     armnn::IWorkloadFactory &workloadFactory,
1451     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1452
1453 LayerTestResult<uint8_t, 4> BatchToSpaceNdNchwUintTest4(
1454     armnn::IWorkloadFactory &workloadFactory,
1455     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1456
1457 LayerTestResult<float, 4> StridedSlice4DFloat32Test(
1458     armnn::IWorkloadFactory& workloadFactory,
1459     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1460
1461 LayerTestResult<float, 4> StridedSlice4DReverseFloat32Test(
1462     armnn::IWorkloadFactory& workloadFactory,
1463     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1464
1465 LayerTestResult<float, 4> StridedSliceSimpleStrideFloat32Test(
1466     armnn::IWorkloadFactory& workloadFactory,
1467     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1468
1469 LayerTestResult<float, 4> StridedSliceSimpleRangeMaskFloat32Test(
1470     armnn::IWorkloadFactory& workloadFactory,
1471     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1472
1473 LayerTestResult<float, 2> StridedSliceShrinkAxisMaskFloat32Test(
1474     armnn::IWorkloadFactory& workloadFactory,
1475     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1476
1477 LayerTestResult<float, 3> StridedSlice3DFloat32Test(
1478     armnn::IWorkloadFactory& workloadFactory,
1479     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1480
1481 LayerTestResult<float, 3> StridedSlice3DReverseFloat32Test(
1482     armnn::IWorkloadFactory& workloadFactory,
1483     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1484
1485 LayerTestResult<float, 2> StridedSlice2DFloat32Test(
1486     armnn::IWorkloadFactory& workloadFactory,
1487     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1488
1489 LayerTestResult<float, 2> StridedSlice2DReverseFloat32Test(
1490     armnn::IWorkloadFactory& workloadFactory,
1491     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1492
1493 LayerTestResult<uint8_t, 4> StridedSlice4DUint8Test(
1494     armnn::IWorkloadFactory& workloadFactory,
1495     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1496
1497 LayerTestResult<uint8_t, 4> StridedSlice4DReverseUint8Test(
1498     armnn::IWorkloadFactory& workloadFactory,
1499     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1500
1501 LayerTestResult<uint8_t, 4> StridedSliceSimpleStrideUint8Test(
1502     armnn::IWorkloadFactory& workloadFactory,
1503     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1504
1505 LayerTestResult<uint8_t, 4> StridedSliceSimpleRangeMaskUint8Test(
1506     armnn::IWorkloadFactory& workloadFactory,
1507     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1508
1509 LayerTestResult<uint8_t, 2> StridedSliceShrinkAxisMaskUint8Test(
1510     armnn::IWorkloadFactory& workloadFactory,
1511     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1512
1513 LayerTestResult<uint8_t, 3> StridedSlice3DUint8Test(
1514     armnn::IWorkloadFactory& workloadFactory,
1515     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1516
1517 LayerTestResult<uint8_t, 3> StridedSlice3DReverseUint8Test(
1518     armnn::IWorkloadFactory& workloadFactory,
1519     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1520
1521 LayerTestResult<uint8_t, 2> StridedSlice2DUint8Test(
1522     armnn::IWorkloadFactory& workloadFactory,
1523     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1524
1525 LayerTestResult<uint8_t, 2> StridedSlice2DReverseUint8Test(
1526     armnn::IWorkloadFactory& workloadFactory,
1527     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1528
1529 LayerTestResult<float, 4> Debug4DFloat32Test(
1530     armnn::IWorkloadFactory& workloadFactory,
1531     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1532
1533 LayerTestResult<float, 3> Debug3DFloat32Test(
1534     armnn::IWorkloadFactory& workloadFactory,
1535     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1536
1537 LayerTestResult<float, 2> Debug2DFloat32Test(
1538     armnn::IWorkloadFactory& workloadFactory,
1539     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1540
1541 LayerTestResult<float, 1> Debug1DFloat32Test(
1542     armnn::IWorkloadFactory& workloadFactory,
1543     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1544
1545 LayerTestResult<uint8_t, 4> Debug4DUint8Test(
1546     armnn::IWorkloadFactory& workloadFactory,
1547     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1548
1549 LayerTestResult<uint8_t, 3> Debug3DUint8Test(
1550     armnn::IWorkloadFactory& workloadFactory,
1551     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1552
1553 LayerTestResult<uint8_t, 2> Debug2DUint8Test(
1554     armnn::IWorkloadFactory& workloadFactory,
1555     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1556
1557 LayerTestResult<uint8_t, 1> Debug1DUint8Test(
1558     armnn::IWorkloadFactory& workloadFactory,
1559     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1560
1561 LayerTestResult<uint8_t, 4> PreCompiledConvolution2dTest(
1562     armnn::IWorkloadFactory& workloadFactory,
1563     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1564
1565 LayerTestResult<uint8_t, 4> PreCompiledConvolution2dStride2x2Test(
1566     armnn::IWorkloadFactory& workloadFactory,
1567     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1568
1569 LayerTestResult<uint8_t, 4> PreCompiledDepthwiseConvolution2dTest(
1570     armnn::IWorkloadFactory & workloadFactory,
1571     const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager);
1572
1573 LayerTestResult<uint8_t, 4> PreCompiledDepthwiseConvolution2dStride2x2Test(
1574     armnn::IWorkloadFactory & workloadFactory,
1575     const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager);
1576
1577 LayerTestResult<uint8_t, 4> PreCompiledMaxPooling2dTest(
1578     armnn::IWorkloadFactory& workloadFactory,
1579     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1580
1581 LayerTestResult<float, 4> Debug4DFloat32Test(
1582     armnn::IWorkloadFactory& workloadFactory,
1583     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1584
1585 LayerTestResult<float, 3> Debug3DFloat32Test(
1586     armnn::IWorkloadFactory& workloadFactory,
1587     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1588
1589 LayerTestResult<float, 2> Debug2DFloat32Test(
1590     armnn::IWorkloadFactory& workloadFactory,
1591     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1592
1593 LayerTestResult<float, 1> Debug1DFloat32Test(
1594     armnn::IWorkloadFactory& workloadFactory,
1595     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1596
1597 LayerTestResult<uint8_t, 4> Debug4DUint8Test(
1598     armnn::IWorkloadFactory& workloadFactory,
1599     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1600
1601 LayerTestResult<uint8_t, 3> Debug3DUint8Test(
1602     armnn::IWorkloadFactory& workloadFactory,
1603     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1604
1605 LayerTestResult<uint8_t, 2> Debug2DUint8Test(
1606     armnn::IWorkloadFactory& workloadFactory,
1607     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1608
1609 LayerTestResult<uint8_t, 1> Debug1DUint8Test(
1610     armnn::IWorkloadFactory& workloadFactory,
1611     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1612
1613 LayerTestResult<float, 1> Gather1DParamsFloatTest(
1614     armnn::IWorkloadFactory& workloadFactory,
1615     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1616
1617 LayerTestResult<uint8_t, 1> Gather1DParamsUint8Test(
1618     armnn::IWorkloadFactory& workloadFactory,
1619     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1620
1621 LayerTestResult<float, 2> GatherMultiDimParamsFloatTest(
1622     armnn::IWorkloadFactory& workloadFactory,
1623     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1624
1625 LayerTestResult<uint8_t, 2> GatherMultiDimParamsUint8Test(
1626     armnn::IWorkloadFactory& workloadFactory,
1627     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1628
1629 LayerTestResult<float, 4> GatherMultiDimParamsMultiDimIndicesFloatTest(
1630     armnn::IWorkloadFactory& workloadFactory,
1631     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1632
1633 LayerTestResult<uint8_t, 4> GatherMultiDimParamsMultiDimIndicesUint8Test(
1634     armnn::IWorkloadFactory& workloadFactory,
1635     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1636
1637 LayerTestResult<float, 4> DequantizeSimpleUint8Test(
1638     armnn::IWorkloadFactory& workloadFactory,
1639     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1640
1641 LayerTestResult<float, 4> DequantizeOffsetUint8Test(
1642     armnn::IWorkloadFactory& workloadFactory,
1643     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1644
1645 LayerTestResult<float, 4> DequantizeSimpleInt16Test(
1646     armnn::IWorkloadFactory& workloadFactory,
1647     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1648
1649 LayerTestResult<uint8_t, 4> QuantizeSimpleUint8Test(
1650     armnn::IWorkloadFactory& workloadFactory,
1651     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1652
1653 LayerTestResult<uint8_t, 4> QuantizeClampUint8Test(
1654     armnn::IWorkloadFactory& workloadFactory,
1655     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1656
1657 LayerTestResult<int16_t, 4> QuantizeClampInt16Test(
1658     armnn::IWorkloadFactory& workloadFactory,
1659     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);
1660
1661 template<typename T, typename B>
1662 LayerTestResult<T, 2> SimpleFullyConnectedTestImpl(
1663         armnn::IWorkloadFactory& workloadFactory,
1664         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1665         armnn::TensorInfo inputTensorInfo,
1666         armnn::TensorInfo outputTensorInfo,
1667         armnn::TensorInfo weightsDesc,
1668         armnn::TensorInfo biasesDesc,
1669         boost::multi_array<T, 2>& weights,
1670         boost::multi_array<B, 1>& bias,
1671         boost::multi_array<T, 4>& input,
1672         bool biasEnabled,
1673         bool transposeWeights)
1674 {
1675     std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
1676     std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
1677
1678     armnn::FullyConnectedQueueDescriptor data;
1679     armnn::WorkloadInfo info;
1680     armnn::ScopedCpuTensorHandle weightsTensor(weightsDesc);
1681     armnn::ScopedCpuTensorHandle biasTensor(biasesDesc);
1682
1683     AllocateAndCopyDataToITensorHandle(&weightsTensor, &weights[0][0]);
1684     AllocateAndCopyDataToITensorHandle(&biasTensor, &bias[0]);
1685
1686     AddInputToWorkload(data, info, inputTensorInfo, inputHandle.get());
1687     AddOutputToWorkload(data, info, outputTensorInfo, outputHandle.get());
1688     data.m_Weight = &weightsTensor;
1689     data.m_Bias = &biasTensor;
1690     data.m_Parameters.m_BiasEnabled = biasEnabled;
1691     data.m_Parameters.m_TransposeWeightMatrix = transposeWeights;
1692
1693     std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateFullyConnected(data, info);
1694     LayerTestResult<T, 2> result(outputTensorInfo);
1695
1696     inputHandle->Allocate();
1697     outputHandle->Allocate();
1698     CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
1699
1700     ExecuteWorkload(*workload, memoryManager);
1701
1702     CopyDataFromITensorHandle(&result.output[0][0], outputHandle.get());
1703
1704     return result;
1705 }
1706
1707 template <armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
1708 std::vector<T> ConvertToDataType(const std::vector<float>& input,
1709                                  const armnn::TensorInfo& inputTensorInfo)
1710 {
1711     std::vector<T> output(input.size());
1712     auto outputTensorInfo = inputTensorInfo;
1713     outputTensorInfo.SetDataType(ArmnnType);
1714
1715     std::unique_ptr<armnn::Encoder<float>> pOutputEncoder = armnn::MakeEncoder<float>(outputTensorInfo, output.data());
1716     armnn::Encoder<float>& rOutputEncoder = *pOutputEncoder;
1717
1718     for (auto it = input.begin(); it != input.end(); ++it)
1719     {
1720         rOutputEncoder.Set(*it);
1721         ++rOutputEncoder;
1722     }
1723     return output;
1724 }
1725
1726 template<typename T>
1727 LayerTestResult<T, 4> SimpleReshapeTestImpl(
1728     armnn::IWorkloadFactory& workloadFactory,
1729     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1730     armnn::TensorInfo inputTensorInfo,
1731     armnn::TensorInfo outputTensorInfo,
1732     const std::vector<T>& inputData,
1733     const std::vector<T>& outputExpectedData)
1734 {
1735     auto input = MakeTensor<T, 4>(inputTensorInfo, inputData);
1736
1737     LayerTestResult<T, 4> ret(outputTensorInfo);
1738     ret.outputExpected = MakeTensor<T, 4>(outputTensorInfo, outputExpectedData);
1739
1740     std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
1741     std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
1742
1743     armnn::ReshapeQueueDescriptor data;
1744     armnn::WorkloadInfo info;
1745     AddInputToWorkload(data, info, inputTensorInfo, inputHandle.get());
1746     AddOutputToWorkload(data, info, outputTensorInfo, outputHandle.get());
1747
1748     std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateReshape(data, info);
1749
1750     inputHandle->Allocate();
1751     outputHandle->Allocate();
1752
1753     CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
1754
1755     workload->Execute();
1756
1757     CopyDataFromITensorHandle(&ret.output[0][0][0][0], outputHandle.get());
1758
1759     return ret;
1760 }
1761
1762 template<armnn::DataType ArmnnType, typename T>
1763 LayerTestResult<T, 2> FullyConnectedTest(
1764         armnn::IWorkloadFactory& workloadFactory,
1765         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
1766         bool biasEnabled)
1767 {
1768     constexpr static unsigned int inputWidth = 3u;
1769     constexpr static unsigned int inputHeight = 2u;
1770     constexpr static unsigned int inputChannels = 1u;
1771
1772     constexpr static unsigned int inputSize = inputWidth * inputHeight * inputChannels;
1773
1774     constexpr static unsigned int outputChannels = 2u;
1775
1776     armnn::TensorInfo inputTensorInfo({ 1, inputChannels, inputHeight, inputWidth }, ArmnnType);
1777     inputTensorInfo.SetQuantizationScale(0.1f);
1778     inputTensorInfo.SetQuantizationOffset(63);
1779
1780     armnn::TensorInfo outputTensorInfo({ 1, outputChannels }, ArmnnType);
1781     outputTensorInfo.SetQuantizationScale(5.f);
1782     outputTensorInfo.SetQuantizationOffset(biasEnabled ? -50 : 10);
1783
1784     armnn::TensorInfo weightsDesc({ outputChannels, inputSize }, ArmnnType);
1785     weightsDesc.SetQuantizationScale(0.2f);
1786     weightsDesc.SetQuantizationOffset(93);
1787
1788     armnn::TensorInfo biasesDesc({ outputChannels }, GetBiasTypeFromWeightsType(weightsDesc.GetDataType()).value());
1789     biasesDesc.SetQuantizationScale(inputTensorInfo.GetQuantizationScale() * weightsDesc.GetQuantizationScale());
1790     biasesDesc.SetQuantizationOffset(0);
1791
1792     LayerTestResult<T, 2> result(outputTensorInfo);
1793
1794     auto input = MakeTensor<T, 4>(inputTensorInfo, ConvertToDataType<ArmnnType>(
1795         {
1796             -1.2f, 6.1f, -3.5f,
1797             18.8f, -5.5f, 2.9f
1798         },
1799         inputTensorInfo));
1800
1801     auto weights = MakeTensor<T, 2>(weightsDesc, ConvertToDataType<ArmnnType>(
1802         {
1803             -8.4f, 20.0f, -10.4f, -8, 16.4f, -11.8f,
1804             23.4f, 10.4f, -14.0f, -3.8f, -11.8f, 11.4f
1805         },
1806         weightsDesc));
1807
1808     auto bias = MakeTensor<int32_t, 1>(biasesDesc, std::vector<int32_t>{9250, 67500});
1809
1810     result = SimpleFullyConnectedTestImpl<T>(
1811             workloadFactory,
1812             memoryManager,
1813             inputTensorInfo, outputTensorInfo,
1814             weightsDesc, biasesDesc,
1815             weights, bias, input,
1816             biasEnabled, true
1817     );
1818
1819     if (biasEnabled)
1820     {
1821         result.outputExpected = MakeTensor<T, 2>(outputTensorInfo,
1822                                                  ConvertToDataType<ArmnnType>({80.f, 1460.f}, outputTensorInfo));
1823     }
1824     else
1825     {
1826         result.outputExpected = MakeTensor<T, 2>(outputTensorInfo,
1827                                                  ConvertToDataType<ArmnnType>({-107.04f, 110.f}, outputTensorInfo));
1828     }
1829
1830     return result;
1831 }
1832
1833
1834 template<armnn::DataType ArmnnType, typename T>
1835 LayerTestResult<T, 4> SimpleReshapeTest(
1836     armnn::IWorkloadFactory& workloadFactory,
1837     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
1838 {
1839     armnn::TensorInfo inputTensorInfo;
1840     armnn::TensorInfo outputTensorInfo;
1841
1842     unsigned int inputShape[] = { 2, 2, 3, 3 };
1843     unsigned int outputShape[] = { 2, 2, 9, 1 };
1844
1845     inputTensorInfo = armnn::TensorInfo(4, inputShape, ArmnnType);
1846     inputTensorInfo.SetQuantizationScale(1.0f);
1847     outputTensorInfo = armnn::TensorInfo(4, outputShape, ArmnnType);
1848     outputTensorInfo.SetQuantizationScale(1.0f);
1849
1850     auto input = ConvertToDataType<ArmnnType>(
1851         {
1852             0.0f, 1.0f, 2.0f,
1853             3.0f, 4.0f, 5.0f,
1854             6.0f, 7.0f, 8.0f,
1855
1856             9.0f, 10.0f, 11.0f,
1857             12.0f, 13.0f, 14.0f,
1858             15.0f, 16.0f, 17.0f,
1859
1860             18.0f, 19.0f, 20.0f,
1861             21.0f, 22.0f, 23.0f,
1862             24.0f, 25.0f, 26.0f,
1863
1864             27.0f, 28.0f, 29.0f,
1865             30.0f, 31.0f, 32.0f,
1866             33.0f, 34.0f, 35.0f,
1867         },
1868         inputTensorInfo);
1869
1870     auto outputExpected = ConvertToDataType<ArmnnType>(
1871         {
1872             0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f,
1873
1874             9.0f, 10.0f, 11.0f, 12.0f, 13.0f, 14.0f, 15.0f, 16.0f, 17.0f,
1875
1876             18.0f, 19.0f, 20.0f, 21.0f, 22.0f, 23.0f, 24.0f, 25.0f, 26.0f,
1877
1878             27.0f, 28.0f, 29.0f, 30.0f, 31.0f, 32.0f, 33.0f, 34.0f, 35.0f,
1879         },
1880         outputTensorInfo);
1881
1882     return SimpleReshapeTestImpl<T>(
1883         workloadFactory, memoryManager, inputTensorInfo, outputTensorInfo, input, outputExpected);
1884 }