• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //
2 // Copyright © 2017 Arm Ltd. All rights reserved.
3 // SPDX-License-Identifier: MIT
4 //
5 
6 #include <backendsCommon/test/EndToEndTestImpl.hpp>
7 
8 #include <backendsCommon/test/ActivationEndToEndTestImpl.hpp>
9 #include <backendsCommon/test/ArgMinMaxEndToEndTestImpl.hpp>
10 #include <backendsCommon/test/ComparisonEndToEndTestImpl.hpp>
11 #include <backendsCommon/test/ConcatEndToEndTestImpl.hpp>
12 #include <backendsCommon/test/DepthToSpaceEndToEndTestImpl.hpp>
13 #include <backendsCommon/test/DequantizeEndToEndTestImpl.hpp>
14 #include <backendsCommon/test/DetectionPostProcessEndToEndTestImpl.hpp>
15 #include <backendsCommon/test/ElementwiseUnaryEndToEndTestImpl.hpp>
16 #include <backendsCommon/test/FillEndToEndTestImpl.hpp>
17 #include <backendsCommon/test/InstanceNormalizationEndToEndTestImpl.hpp>
18 #include <backendsCommon/test/PreluEndToEndTestImpl.hpp>
19 #include <backendsCommon/test/QLstmEndToEndTestImpl.hpp>
20 #include <backendsCommon/test/QuantizedLstmEndToEndTestImpl.hpp>
21 #include <backendsCommon/test/SpaceToDepthEndToEndTestImpl.hpp>
22 #include <backendsCommon/test/SplitterEndToEndTestImpl.hpp>
23 #include <backendsCommon/test/TransposeConvolution2dEndToEndTestImpl.hpp>
24 
25 #include <boost/test/unit_test.hpp>
26 
27 BOOST_AUTO_TEST_SUITE(NeonEndToEnd)
28 
29 std::vector<armnn::BackendId> defaultBackends = {armnn::Compute::CpuAcc};
30 
31 // Abs
BOOST_AUTO_TEST_CASE(NeonAbsEndToEndTestFloat32)32 BOOST_AUTO_TEST_CASE(NeonAbsEndToEndTestFloat32)
33 {
34     std::vector<float> expectedOutput =
35     {
36         1.f, 1.f, 1.f, 1.f, 5.f, 5.f, 5.f, 5.f,
37         3.f, 3.f, 3.f, 3.f, 4.f, 4.f, 4.f, 4.f
38     };
39 
40     ElementwiseUnarySimpleEndToEnd<armnn::DataType::Float32>(defaultBackends,
41                                                              UnaryOperation::Abs,
42                                                              expectedOutput);
43 }
44 
45 // Constant
BOOST_AUTO_TEST_CASE(ConstantUsage_Neon_Float32)46 BOOST_AUTO_TEST_CASE(ConstantUsage_Neon_Float32)
47 {
48     BOOST_TEST(ConstantUsageFloat32Test(defaultBackends));
49 }
50 
51 #if defined(ARMNNREF_ENABLED)
52 
53 // This test unit needs the reference backend, it's not available if the reference backend is not built
54 
BOOST_AUTO_TEST_CASE(FallbackToCpuRef)55 BOOST_AUTO_TEST_CASE(FallbackToCpuRef)
56 {
57     using namespace armnn;
58 
59     // Create runtime in which test will run and allow fallback to CpuRef.
60     IRuntime::CreationOptions options;
61     IRuntimePtr runtime(IRuntime::Create(options));
62 
63     // Builds up the structure of the network.
64     INetworkPtr net(INetwork::Create());
65 
66     IConnectableLayer* input = net->AddInputLayer(0);
67 
68     // This layer configuration isn't supported by CpuAcc but we allow fallback to CpuRef so it shoud pass.
69     NormalizationDescriptor descriptor;
70     IConnectableLayer* pooling = net->AddNormalizationLayer(descriptor);
71 
72     IConnectableLayer* output = net->AddOutputLayer(0);
73 
74     input->GetOutputSlot(0).Connect(pooling->GetInputSlot(0));
75     pooling->GetOutputSlot(0).Connect(output->GetInputSlot(0));
76 
77     input->GetOutputSlot(0).SetTensorInfo(TensorInfo({ 1, 1, 4, 4 }, DataType::Float32));
78     pooling->GetOutputSlot(0).SetTensorInfo(TensorInfo({ 1, 1, 4, 4 }, DataType::Float32));
79 
80     // optimize the network
81     std::vector<BackendId> backends = {Compute::CpuAcc, Compute::CpuRef};
82     IOptimizedNetworkPtr optNet = Optimize(*net, backends, runtime->GetDeviceSpec());
83 
84     // Load it into the runtime. It should pass.
85     NetworkId netId;
86     BOOST_TEST(runtime->LoadNetwork(netId, std::move(optNet)) == Status::Success);
87 }
88 
89 #endif
90 
BOOST_AUTO_TEST_CASE(NeonGreaterSimpleEndToEndTest)91 BOOST_AUTO_TEST_CASE(NeonGreaterSimpleEndToEndTest)
92 {
93     const std::vector<uint8_t> expectedOutput({ 0, 0, 0, 0,  1, 1, 1, 1,
94                                                 0, 0, 0, 0,  0, 0, 0, 0 });
95 
96     ComparisonSimpleEndToEnd<armnn::DataType::Float32>(defaultBackends,
97                                                        ComparisonOperation::Greater,
98                                                        expectedOutput);
99 }
100 
BOOST_AUTO_TEST_CASE(NeonGreaterSimpleEndToEndUint8Test)101 BOOST_AUTO_TEST_CASE(NeonGreaterSimpleEndToEndUint8Test)
102 {
103     const std::vector<uint8_t> expectedOutput({ 0, 0, 0, 0,  1, 1, 1, 1,
104                                                 0, 0, 0, 0,  0, 0, 0, 0 });
105 
106     ComparisonSimpleEndToEnd<armnn::DataType::QAsymmU8>(defaultBackends,
107                                                                ComparisonOperation::Greater,
108                                                                expectedOutput);
109 }
110 
BOOST_AUTO_TEST_CASE(NeonGreaterBroadcastEndToEndTest)111 BOOST_AUTO_TEST_CASE(NeonGreaterBroadcastEndToEndTest)
112 {
113     const std::vector<uint8_t> expectedOutput({ 0, 1, 0, 0, 0, 1,
114                                                 1, 1, 1, 1, 1, 1 });
115 
116     ComparisonBroadcastEndToEnd<armnn::DataType::Float32>(defaultBackends,
117                                                           ComparisonOperation::Greater,
118                                                           expectedOutput);
119 }
120 
BOOST_AUTO_TEST_CASE(NeonGreaterBroadcastEndToEndUint8Test)121 BOOST_AUTO_TEST_CASE(NeonGreaterBroadcastEndToEndUint8Test)
122 {
123     const std::vector<uint8_t> expectedOutput({ 0, 1, 0, 0, 0, 1,
124                                                 1, 1, 1, 1, 1, 1 });
125 
126     ComparisonBroadcastEndToEnd<armnn::DataType::QAsymmU8>(defaultBackends,
127                                                                   ComparisonOperation::Greater,
128                                                                   expectedOutput);
129 }
130 
BOOST_AUTO_TEST_CASE(NeonConcatEndToEndDim0Test)131 BOOST_AUTO_TEST_CASE(NeonConcatEndToEndDim0Test)
132 {
133     ConcatDim0EndToEnd<armnn::DataType::Float32>(defaultBackends);
134 }
135 
BOOST_AUTO_TEST_CASE(NeonConcatEndToEndDim0Uint8Test)136 BOOST_AUTO_TEST_CASE(NeonConcatEndToEndDim0Uint8Test)
137 {
138     ConcatDim0EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
139 }
140 
BOOST_AUTO_TEST_CASE(NeonConcatEndToEndDim1Test)141 BOOST_AUTO_TEST_CASE(NeonConcatEndToEndDim1Test)
142 {
143     ConcatDim1EndToEnd<armnn::DataType::Float32>(defaultBackends);
144 }
145 
BOOST_AUTO_TEST_CASE(NeonConcatEndToEndDim1Uint8Test)146 BOOST_AUTO_TEST_CASE(NeonConcatEndToEndDim1Uint8Test)
147 {
148     ConcatDim1EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
149 }
150 
BOOST_AUTO_TEST_CASE(NeonConcatEndToEndDim3Test)151 BOOST_AUTO_TEST_CASE(NeonConcatEndToEndDim3Test)
152 {
153     ConcatDim3EndToEnd<armnn::DataType::Float32>(defaultBackends);
154 }
155 
BOOST_AUTO_TEST_CASE(NeonConcatEndToEndDim3Uint8Test)156 BOOST_AUTO_TEST_CASE(NeonConcatEndToEndDim3Uint8Test)
157 {
158     ConcatDim3EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
159 }
160 
161 // DepthToSpace
BOOST_AUTO_TEST_CASE(DephtToSpaceEndToEndNchwFloat32)162 BOOST_AUTO_TEST_CASE(DephtToSpaceEndToEndNchwFloat32)
163 {
164     DepthToSpaceEndToEnd<armnn::DataType::Float32>(defaultBackends, armnn::DataLayout::NCHW);
165 }
166 
BOOST_AUTO_TEST_CASE(DephtToSpaceEndToEndNchwFloat16)167 BOOST_AUTO_TEST_CASE(DephtToSpaceEndToEndNchwFloat16)
168 {
169     DepthToSpaceEndToEnd<armnn::DataType::Float16>(defaultBackends, armnn::DataLayout::NCHW);
170 }
171 
BOOST_AUTO_TEST_CASE(DephtToSpaceEndToEndNchwUint8)172 BOOST_AUTO_TEST_CASE(DephtToSpaceEndToEndNchwUint8)
173 {
174     DepthToSpaceEndToEnd<armnn::DataType::QAsymmU8>(defaultBackends, armnn::DataLayout::NCHW);
175 }
176 
BOOST_AUTO_TEST_CASE(DephtToSpaceEndToEndNchwInt16)177 BOOST_AUTO_TEST_CASE(DephtToSpaceEndToEndNchwInt16)
178 {
179     DepthToSpaceEndToEnd<armnn::DataType::QSymmS16>(defaultBackends, armnn::DataLayout::NCHW);
180 }
181 
BOOST_AUTO_TEST_CASE(DephtToSpaceEndToEndNhwcFloat32)182 BOOST_AUTO_TEST_CASE(DephtToSpaceEndToEndNhwcFloat32)
183 {
184     DepthToSpaceEndToEnd<armnn::DataType::Float32>(defaultBackends, armnn::DataLayout::NHWC);
185 }
186 
BOOST_AUTO_TEST_CASE(DephtToSpaceEndToEndNhwcFloat16)187 BOOST_AUTO_TEST_CASE(DephtToSpaceEndToEndNhwcFloat16)
188 {
189     DepthToSpaceEndToEnd<armnn::DataType::Float16>(defaultBackends, armnn::DataLayout::NHWC);
190 }
191 
BOOST_AUTO_TEST_CASE(DephtToSpaceEndToEndNhwcUint8)192 BOOST_AUTO_TEST_CASE(DephtToSpaceEndToEndNhwcUint8)
193 {
194     DepthToSpaceEndToEnd<armnn::DataType::QAsymmU8>(defaultBackends, armnn::DataLayout::NHWC);
195 }
196 
BOOST_AUTO_TEST_CASE(DephtToSpaceEndToEndNhwcInt16)197 BOOST_AUTO_TEST_CASE(DephtToSpaceEndToEndNhwcInt16)
198 {
199     DepthToSpaceEndToEnd<armnn::DataType::QSymmS16>(defaultBackends, armnn::DataLayout::NHWC);
200 }
201 
202 // Dequantize
BOOST_AUTO_TEST_CASE(DequantizeEndToEndSimpleTest)203 BOOST_AUTO_TEST_CASE(DequantizeEndToEndSimpleTest)
204 {
205     DequantizeEndToEndSimple<armnn::DataType::QAsymmU8>(defaultBackends);
206 }
207 
BOOST_AUTO_TEST_CASE(DequantizeEndToEndOffsetTest)208 BOOST_AUTO_TEST_CASE(DequantizeEndToEndOffsetTest)
209 {
210     DequantizeEndToEndOffset<armnn::DataType::QAsymmU8>(defaultBackends);
211 }
212 
BOOST_AUTO_TEST_CASE(NeonEluEndToEndTestFloat32)213 BOOST_AUTO_TEST_CASE(NeonEluEndToEndTestFloat32)
214 {
215     EluEndToEndTest<armnn::DataType::Float32>(defaultBackends);
216 }
217 
BOOST_AUTO_TEST_CASE(NeonEluEndToEndTestFloat16)218 BOOST_AUTO_TEST_CASE(NeonEluEndToEndTestFloat16)
219 {
220     EluEndToEndTest<armnn::DataType::Float16>(defaultBackends);
221 }
222 
223 // HardSwish
BOOST_AUTO_TEST_CASE(NeonHardSwishEndToEndTestFloat32)224 BOOST_AUTO_TEST_CASE(NeonHardSwishEndToEndTestFloat32)
225 {
226     HardSwishEndToEndTest<armnn::DataType::Float32>(defaultBackends);
227 }
228 
BOOST_AUTO_TEST_CASE(NeonHardSwishEndToEndTestFloat16)229 BOOST_AUTO_TEST_CASE(NeonHardSwishEndToEndTestFloat16)
230 {
231     HardSwishEndToEndTest<armnn::DataType::Float16>(defaultBackends);
232 }
233 
BOOST_AUTO_TEST_CASE(NeonHardSwishEndToEndTestQAsymmS8)234 BOOST_AUTO_TEST_CASE(NeonHardSwishEndToEndTestQAsymmS8)
235 {
236     HardSwishEndToEndTest<armnn::DataType::QAsymmS8>(defaultBackends);
237 }
238 
BOOST_AUTO_TEST_CASE(NeonHardSwishEndToEndTestQAsymmU8)239 BOOST_AUTO_TEST_CASE(NeonHardSwishEndToEndTestQAsymmU8)
240 {
241     HardSwishEndToEndTest<armnn::DataType::QAsymmU8>(defaultBackends);
242 }
243 
BOOST_AUTO_TEST_CASE(NeonPreluEndToEndFloat32Test)244 BOOST_AUTO_TEST_CASE(NeonPreluEndToEndFloat32Test)
245 {
246     PreluEndToEndNegativeTest<armnn::DataType::Float32>(defaultBackends);
247 }
248 
BOOST_AUTO_TEST_CASE(NeonPreluEndToEndTestUint8Test)249 BOOST_AUTO_TEST_CASE(NeonPreluEndToEndTestUint8Test)
250 {
251     PreluEndToEndPositiveTest<armnn::DataType::QAsymmU8>(defaultBackends);
252 }
253 
BOOST_AUTO_TEST_CASE(NeonSpaceToDepthNhwcEndToEndTest1)254 BOOST_AUTO_TEST_CASE(NeonSpaceToDepthNhwcEndToEndTest1)
255 {
256     SpaceToDepthNhwcEndToEndTest1(defaultBackends);
257 }
258 
BOOST_AUTO_TEST_CASE(NeonSpaceToDepthNchwEndToEndTest1)259 BOOST_AUTO_TEST_CASE(NeonSpaceToDepthNchwEndToEndTest1)
260 {
261     SpaceToDepthNchwEndToEndTest1(defaultBackends);
262 }
263 
BOOST_AUTO_TEST_CASE(NeonSpaceToDepthNhwcEndToEndTest2)264 BOOST_AUTO_TEST_CASE(NeonSpaceToDepthNhwcEndToEndTest2)
265 {
266     SpaceToDepthNhwcEndToEndTest2(defaultBackends);
267 }
268 
BOOST_AUTO_TEST_CASE(NeonSpaceToDepthNchwEndToEndTest2)269 BOOST_AUTO_TEST_CASE(NeonSpaceToDepthNchwEndToEndTest2)
270 {
271     SpaceToDepthNchwEndToEndTest2(defaultBackends);
272 }
273 
BOOST_AUTO_TEST_CASE(NeonSplitter1dEndToEndTest)274 BOOST_AUTO_TEST_CASE(NeonSplitter1dEndToEndTest)
275 {
276     Splitter1dEndToEnd<armnn::DataType::Float32>(defaultBackends);
277 }
278 
BOOST_AUTO_TEST_CASE(NeonSplitter1dEndToEndUint8Test)279 BOOST_AUTO_TEST_CASE(NeonSplitter1dEndToEndUint8Test)
280 {
281     Splitter1dEndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
282 }
283 
BOOST_AUTO_TEST_CASE(NeonSplitter2dDim0EndToEndTest)284 BOOST_AUTO_TEST_CASE(NeonSplitter2dDim0EndToEndTest)
285 {
286     Splitter2dDim0EndToEnd<armnn::DataType::Float32>(defaultBackends);
287 }
288 
BOOST_AUTO_TEST_CASE(NeonSplitter2dDim1EndToEndTest)289 BOOST_AUTO_TEST_CASE(NeonSplitter2dDim1EndToEndTest)
290 {
291     Splitter2dDim1EndToEnd<armnn::DataType::Float32>(defaultBackends);
292 }
293 
BOOST_AUTO_TEST_CASE(NeonSplitter2dDim0EndToEndUint8Test)294 BOOST_AUTO_TEST_CASE(NeonSplitter2dDim0EndToEndUint8Test)
295 {
296     Splitter2dDim0EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
297 }
298 
BOOST_AUTO_TEST_CASE(NeonSplitter2dDim1EndToEndUint8Test)299 BOOST_AUTO_TEST_CASE(NeonSplitter2dDim1EndToEndUint8Test)
300 {
301     Splitter2dDim1EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
302 }
303 
BOOST_AUTO_TEST_CASE(NeonSplitter3dDim0EndToEndTest)304 BOOST_AUTO_TEST_CASE(NeonSplitter3dDim0EndToEndTest)
305 {
306     Splitter3dDim0EndToEnd<armnn::DataType::Float32>(defaultBackends);
307 }
308 
BOOST_AUTO_TEST_CASE(NeonSplitter3dDim1EndToEndTest)309 BOOST_AUTO_TEST_CASE(NeonSplitter3dDim1EndToEndTest)
310 {
311     Splitter3dDim1EndToEnd<armnn::DataType::Float32>(defaultBackends);
312 }
313 
BOOST_AUTO_TEST_CASE(NeonSplitter3dDim2EndToEndTest)314 BOOST_AUTO_TEST_CASE(NeonSplitter3dDim2EndToEndTest)
315 {
316     Splitter3dDim2EndToEnd<armnn::DataType::Float32>(defaultBackends);
317 }
318 
BOOST_AUTO_TEST_CASE(NeonSplitter3dDim0EndToEndUint8Test)319 BOOST_AUTO_TEST_CASE(NeonSplitter3dDim0EndToEndUint8Test)
320 {
321     Splitter3dDim0EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
322 }
323 
BOOST_AUTO_TEST_CASE(NeonSplitter3dDim1EndToEndUint8Test)324 BOOST_AUTO_TEST_CASE(NeonSplitter3dDim1EndToEndUint8Test)
325 {
326     Splitter3dDim1EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
327 }
328 
BOOST_AUTO_TEST_CASE(NeonSplitter3dDim2EndToEndUint8Test)329 BOOST_AUTO_TEST_CASE(NeonSplitter3dDim2EndToEndUint8Test)
330 {
331     Splitter3dDim2EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
332 }
333 
BOOST_AUTO_TEST_CASE(NeonSplitter4dDim0EndToEndTest)334 BOOST_AUTO_TEST_CASE(NeonSplitter4dDim0EndToEndTest)
335 {
336     Splitter4dDim0EndToEnd<armnn::DataType::Float32>(defaultBackends);
337 }
338 
BOOST_AUTO_TEST_CASE(NeonSplitter4dDim1EndToEndTest)339 BOOST_AUTO_TEST_CASE(NeonSplitter4dDim1EndToEndTest)
340 {
341     Splitter4dDim1EndToEnd<armnn::DataType::Float32>(defaultBackends);
342 }
343 
BOOST_AUTO_TEST_CASE(NeonSplitter4dDim2EndToEndTest)344 BOOST_AUTO_TEST_CASE(NeonSplitter4dDim2EndToEndTest)
345 {
346     Splitter4dDim2EndToEnd<armnn::DataType::Float32>(defaultBackends);
347 }
348 
BOOST_AUTO_TEST_CASE(NeonSplitter4dDim3EndToEndTest)349 BOOST_AUTO_TEST_CASE(NeonSplitter4dDim3EndToEndTest)
350 {
351     Splitter4dDim3EndToEnd<armnn::DataType::Float32>(defaultBackends);
352 }
353 
BOOST_AUTO_TEST_CASE(NeonSplitter4dDim0EndToEndUint8Test)354 BOOST_AUTO_TEST_CASE(NeonSplitter4dDim0EndToEndUint8Test)
355 {
356     Splitter4dDim0EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
357 }
358 
BOOST_AUTO_TEST_CASE(NeonSplitter4dDim1EndToEndUint8Test)359 BOOST_AUTO_TEST_CASE(NeonSplitter4dDim1EndToEndUint8Test)
360 {
361     Splitter4dDim1EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
362 }
363 
BOOST_AUTO_TEST_CASE(NeonSplitter4dDim2EndToEndUint8Test)364 BOOST_AUTO_TEST_CASE(NeonSplitter4dDim2EndToEndUint8Test)
365 {
366     Splitter4dDim2EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
367 }
368 
BOOST_AUTO_TEST_CASE(NeonSplitter4dDim3EndToEndUint8Test)369 BOOST_AUTO_TEST_CASE(NeonSplitter4dDim3EndToEndUint8Test)
370 {
371     Splitter4dDim3EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
372 }
373 
BOOST_AUTO_TEST_CASE(NeonQuantizedLstmEndToEndTest)374 BOOST_AUTO_TEST_CASE(NeonQuantizedLstmEndToEndTest)
375 {
376     QuantizedLstmEndToEnd(defaultBackends);
377 }
378 
BOOST_AUTO_TEST_CASE(NeonTransposeConvolution2dEndToEndFloatNchwTest)379 BOOST_AUTO_TEST_CASE(NeonTransposeConvolution2dEndToEndFloatNchwTest)
380 {
381     TransposeConvolution2dEndToEnd<armnn::DataType::Float32, armnn::DataType::Float32>(
382         defaultBackends, armnn::DataLayout::NCHW);
383 }
384 
BOOST_AUTO_TEST_CASE(NeonTransposeConvolution2dEndToEndUint8NchwTest)385 BOOST_AUTO_TEST_CASE(NeonTransposeConvolution2dEndToEndUint8NchwTest)
386 {
387     TransposeConvolution2dEndToEnd<armnn::DataType::QAsymmU8, armnn::DataType::Signed32>(
388         defaultBackends, armnn::DataLayout::NCHW);
389 }
390 
BOOST_AUTO_TEST_CASE(NeonTransposeConvolution2dEndToEndFloatNhwcTest)391 BOOST_AUTO_TEST_CASE(NeonTransposeConvolution2dEndToEndFloatNhwcTest)
392 {
393     TransposeConvolution2dEndToEnd<armnn::DataType::Float32, armnn::DataType::Float32>(
394         defaultBackends, armnn::DataLayout::NHWC);
395 }
396 
BOOST_AUTO_TEST_CASE(NeonTransposeConvolution2dEndToEndUint8NhwcTest)397 BOOST_AUTO_TEST_CASE(NeonTransposeConvolution2dEndToEndUint8NhwcTest)
398 {
399     TransposeConvolution2dEndToEnd<armnn::DataType::QAsymmU8, armnn::DataType::Signed32>(
400         defaultBackends, armnn::DataLayout::NHWC);
401 }
402 
BOOST_AUTO_TEST_CASE(NeonImportNonAlignedInputPointerTest)403 BOOST_AUTO_TEST_CASE(NeonImportNonAlignedInputPointerTest)
404 {
405     ImportNonAlignedInputPointerTest(defaultBackends);
406 }
407 
BOOST_AUTO_TEST_CASE(NeonExportNonAlignedOutputPointerTest)408 BOOST_AUTO_TEST_CASE(NeonExportNonAlignedOutputPointerTest)
409 {
410     ExportNonAlignedOutputPointerTest(defaultBackends);
411 }
412 
BOOST_AUTO_TEST_CASE(NeonImportAlignedPointerTest)413 BOOST_AUTO_TEST_CASE(NeonImportAlignedPointerTest)
414 {
415     ImportAlignedPointerTest(defaultBackends);
416 }
417 
BOOST_AUTO_TEST_CASE(NeonImportOnlyWorkload)418 BOOST_AUTO_TEST_CASE(NeonImportOnlyWorkload)
419 {
420     ImportOnlyWorkload(defaultBackends);
421 }
422 
BOOST_AUTO_TEST_CASE(NeonExportOnlyWorkload)423 BOOST_AUTO_TEST_CASE(NeonExportOnlyWorkload)
424 {
425     ExportOnlyWorkload(defaultBackends);
426 }
427 
BOOST_AUTO_TEST_CASE(NeonImportAndExportWorkload)428 BOOST_AUTO_TEST_CASE(NeonImportAndExportWorkload)
429 {
430     ImportAndExportWorkload(defaultBackends);
431 }
432 
BOOST_AUTO_TEST_CASE(NeonExportOutputWithSeveralOutputSlotConnectionsTest)433 BOOST_AUTO_TEST_CASE(NeonExportOutputWithSeveralOutputSlotConnectionsTest)
434 {
435     ExportOutputWithSeveralOutputSlotConnectionsTest(defaultBackends);
436 }
437 
438 // InstanceNormalization
BOOST_AUTO_TEST_CASE(NeonInstanceNormalizationNchwEndToEndTest1)439 BOOST_AUTO_TEST_CASE(NeonInstanceNormalizationNchwEndToEndTest1)
440 {
441     InstanceNormalizationNchwEndToEndTest1(defaultBackends);
442 }
443 
BOOST_AUTO_TEST_CASE(NeonInstanceNormalizationNchwEndToEndTest2)444 BOOST_AUTO_TEST_CASE(NeonInstanceNormalizationNchwEndToEndTest2)
445 {
446     InstanceNormalizationNchwEndToEndTest2(defaultBackends);
447 }
448 
449 // Fill
BOOST_AUTO_TEST_CASE(NeonFillEndToEndTest)450 BOOST_AUTO_TEST_CASE(NeonFillEndToEndTest)
451 {
452     FillEndToEnd<armnn::DataType::Float32>(defaultBackends);
453 }
454 
BOOST_AUTO_TEST_CASE(RefFillEndToEndTestFloat16)455 BOOST_AUTO_TEST_CASE(RefFillEndToEndTestFloat16)
456 {
457     FillEndToEnd<armnn::DataType::Float16>(defaultBackends);
458 }
459 
BOOST_AUTO_TEST_CASE(NeonFillEndToEndTestInt32)460 BOOST_AUTO_TEST_CASE(NeonFillEndToEndTestInt32)
461 {
462     FillEndToEnd<armnn::DataType::Signed32>(defaultBackends);
463 }
464 
465 // ArgMinMax
BOOST_AUTO_TEST_CASE(NeonArgMaxSimpleTest)466 BOOST_AUTO_TEST_CASE(NeonArgMaxSimpleTest)
467 {
468     ArgMaxEndToEndSimple<armnn::DataType::Float32>(defaultBackends);
469 }
470 
BOOST_AUTO_TEST_CASE(NeonArgMinSimpleTest)471 BOOST_AUTO_TEST_CASE(NeonArgMinSimpleTest)
472 {
473     ArgMinEndToEndSimple<armnn::DataType::Float32>(defaultBackends);
474 }
475 
BOOST_AUTO_TEST_CASE(NeonArgMaxAxis0Test)476 BOOST_AUTO_TEST_CASE(NeonArgMaxAxis0Test)
477 {
478     ArgMaxAxis0EndToEnd<armnn::DataType::Float32>(defaultBackends);
479 }
480 
BOOST_AUTO_TEST_CASE(NeonArgMinAxis0Test)481 BOOST_AUTO_TEST_CASE(NeonArgMinAxis0Test)
482 {
483     ArgMinAxis0EndToEnd<armnn::DataType::Float32>(defaultBackends);
484 }
485 
BOOST_AUTO_TEST_CASE(NeonArgMaxAxis1Test)486 BOOST_AUTO_TEST_CASE(NeonArgMaxAxis1Test)
487 {
488     ArgMaxAxis1EndToEnd<armnn::DataType::Float32>(defaultBackends);
489 }
490 
BOOST_AUTO_TEST_CASE(NeonArgMinAxis1Test)491 BOOST_AUTO_TEST_CASE(NeonArgMinAxis1Test)
492 {
493     ArgMinAxis1EndToEnd<armnn::DataType::Float32>(defaultBackends);
494 }
495 
BOOST_AUTO_TEST_CASE(NeonArgMaxAxis2Test)496 BOOST_AUTO_TEST_CASE(NeonArgMaxAxis2Test)
497 {
498     ArgMaxAxis2EndToEnd<armnn::DataType::Float32>(defaultBackends);
499 }
500 
BOOST_AUTO_TEST_CASE(NeonArgMinAxis2Test)501 BOOST_AUTO_TEST_CASE(NeonArgMinAxis2Test)
502 {
503     ArgMinAxis2EndToEnd<armnn::DataType::Float32>(defaultBackends);
504 }
505 
BOOST_AUTO_TEST_CASE(NeonArgMaxAxis3Test)506 BOOST_AUTO_TEST_CASE(NeonArgMaxAxis3Test)
507 {
508     ArgMaxAxis3EndToEnd<armnn::DataType::Float32>(defaultBackends);
509 }
510 
BOOST_AUTO_TEST_CASE(NeonArgMinAxis3Test)511 BOOST_AUTO_TEST_CASE(NeonArgMinAxis3Test)
512 {
513     ArgMinAxis3EndToEnd<armnn::DataType::Float32>(defaultBackends);
514 }
515 
BOOST_AUTO_TEST_CASE(NeonArgMaxSimpleTestQuantisedAsymm8)516 BOOST_AUTO_TEST_CASE(NeonArgMaxSimpleTestQuantisedAsymm8)
517 {
518     ArgMaxEndToEndSimple<armnn::DataType::QAsymmU8>(defaultBackends);
519 }
520 
BOOST_AUTO_TEST_CASE(NeonArgMinSimpleTestQuantisedAsymm8)521 BOOST_AUTO_TEST_CASE(NeonArgMinSimpleTestQuantisedAsymm8)
522 {
523     ArgMinEndToEndSimple<armnn::DataType::QAsymmU8>(defaultBackends);
524 }
525 
BOOST_AUTO_TEST_CASE(NeonArgMaxAxis0TestQuantisedAsymm8)526 BOOST_AUTO_TEST_CASE(NeonArgMaxAxis0TestQuantisedAsymm8)
527 {
528     ArgMaxAxis0EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
529 }
530 
BOOST_AUTO_TEST_CASE(NeonArgMinAxis0TestQuantisedAsymm8)531 BOOST_AUTO_TEST_CASE(NeonArgMinAxis0TestQuantisedAsymm8)
532 {
533     ArgMinAxis0EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
534 }
535 
BOOST_AUTO_TEST_CASE(NeonArgMaxAxis1TestQuantisedAsymm8)536 BOOST_AUTO_TEST_CASE(NeonArgMaxAxis1TestQuantisedAsymm8)
537 {
538     ArgMaxAxis1EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
539 }
540 
BOOST_AUTO_TEST_CASE(NeonArgMinAxis1TestQuantisedAsymm8)541 BOOST_AUTO_TEST_CASE(NeonArgMinAxis1TestQuantisedAsymm8)
542 {
543     ArgMinAxis1EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
544 }
545 
BOOST_AUTO_TEST_CASE(NeonArgMaxAxis2TestQuantisedAsymm8)546 BOOST_AUTO_TEST_CASE(NeonArgMaxAxis2TestQuantisedAsymm8)
547 {
548     ArgMaxAxis2EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
549 }
550 
BOOST_AUTO_TEST_CASE(NeonArgMinAxis2TestQuantisedAsymm8)551 BOOST_AUTO_TEST_CASE(NeonArgMinAxis2TestQuantisedAsymm8)
552 {
553     ArgMinAxis2EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
554 }
555 
BOOST_AUTO_TEST_CASE(NeonArgMaxAxis3TestQuantisedAsymm8)556 BOOST_AUTO_TEST_CASE(NeonArgMaxAxis3TestQuantisedAsymm8)
557 {
558     ArgMaxAxis3EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
559 }
560 
BOOST_AUTO_TEST_CASE(NeonArgMinAxis3TestQuantisedAsymm8)561 BOOST_AUTO_TEST_CASE(NeonArgMinAxis3TestQuantisedAsymm8)
562 {
563     ArgMinAxis3EndToEnd<armnn::DataType::QAsymmU8>(defaultBackends);
564 }
565 
BOOST_AUTO_TEST_CASE(NeonStridedSliceInvalidSliceEndToEndTest)566 BOOST_AUTO_TEST_CASE(NeonStridedSliceInvalidSliceEndToEndTest)
567 {
568     StridedSliceInvalidSliceEndToEndTest(defaultBackends);
569 }
570 
571 BOOST_AUTO_TEST_CASE(NeonDetectionPostProcessRegularNmsTest, * boost::unit_test::disabled())
572 {
573     std::vector<float> boxEncodings({
574                                         0.0f, 0.0f, 0.0f, 0.0f,
575                                         0.0f, 1.0f, 0.0f, 0.0f,
576                                         0.0f, -1.0f, 0.0f, 0.0f,
577                                         0.0f, 0.0f, 0.0f, 0.0f,
578                                         0.0f, 1.0f, 0.0f, 0.0f,
579                                         0.0f, 0.0f, 0.0f, 0.0f
580                                     });
581     std::vector<float> scores({
582                                   0.0f, 0.9f, 0.8f,
583                                   0.0f, 0.75f, 0.72f,
584                                   0.0f, 0.6f, 0.5f,
585                                   0.0f, 0.93f, 0.95f,
586                                   0.0f, 0.5f, 0.4f,
587                                   0.0f, 0.3f, 0.2f
588                               });
589     std::vector<float> anchors({
590                                    0.5f, 0.5f, 1.0f, 1.0f,
591                                    0.5f, 0.5f, 1.0f, 1.0f,
592                                    0.5f, 0.5f, 1.0f, 1.0f,
593                                    0.5f, 10.5f, 1.0f, 1.0f,
594                                    0.5f, 10.5f, 1.0f, 1.0f,
595                                    0.5f, 100.5f, 1.0f, 1.0f
596                                });
597     DetectionPostProcessRegularNmsEndToEnd<armnn::DataType::Float32>(defaultBackends, boxEncodings, scores, anchors);
598 }
599 
QuantizeData(uint8_t * quant,const float * dequant,const TensorInfo & info)600 inline void QuantizeData(uint8_t* quant, const float* dequant, const TensorInfo& info)
601 {
602     for (size_t i = 0; i < info.GetNumElements(); i++)
603     {
604         quant[i] = armnn::Quantize<uint8_t>(dequant[i], info.GetQuantizationScale(), info.GetQuantizationOffset());
605     }
606 }
607 
608 BOOST_AUTO_TEST_CASE(NeonDetectionPostProcessRegularNmsUint8Test, * boost::unit_test::disabled())
609 {
610     armnn::TensorInfo boxEncodingsInfo({ 1, 6, 4 }, armnn::DataType::Float32);
611     armnn::TensorInfo scoresInfo({ 1, 6, 3 }, armnn::DataType::Float32);
612     armnn::TensorInfo anchorsInfo({ 6, 4 }, armnn::DataType::Float32);
613 
614     boxEncodingsInfo.SetQuantizationScale(1.0f);
615     boxEncodingsInfo.SetQuantizationOffset(1);
616     scoresInfo.SetQuantizationScale(0.01f);
617     scoresInfo.SetQuantizationOffset(0);
618     anchorsInfo.SetQuantizationScale(0.5f);
619     anchorsInfo.SetQuantizationOffset(0);
620 
621     std::vector<float> boxEncodings({
622                                         0.0f, 0.0f, 0.0f, 0.0f,
623                                         0.0f, 1.0f, 0.0f, 0.0f,
624                                         0.0f, -1.0f, 0.0f, 0.0f,
625                                         0.0f, 0.0f, 0.0f, 0.0f,
626                                         0.0f, 1.0f, 0.0f, 0.0f,
627                                         0.0f, 0.0f, 0.0f, 0.0f
628                                     });
629     std::vector<float> scores({
630                                   0.0f, 0.9f, 0.8f,
631                                   0.0f, 0.75f, 0.72f,
632                                   0.0f, 0.6f, 0.5f,
633                                   0.0f, 0.93f, 0.95f,
634                                   0.0f, 0.5f, 0.4f,
635                                   0.0f, 0.3f, 0.2f
636                               });
637     std::vector<float> anchors({
638                                    0.5f, 0.5f, 1.0f, 1.0f,
639                                    0.5f, 0.5f, 1.0f, 1.0f,
640                                    0.5f, 0.5f, 1.0f, 1.0f,
641                                    0.5f, 10.5f, 1.0f, 1.0f,
642                                    0.5f, 10.5f, 1.0f, 1.0f,
643                                    0.5f, 100.5f, 1.0f, 1.0f
644                                });
645 
646     std::vector<uint8_t> qBoxEncodings(boxEncodings.size(), 0);
647     std::vector<uint8_t> qScores(scores.size(), 0);
648     std::vector<uint8_t> qAnchors(anchors.size(), 0);
649     QuantizeData(qBoxEncodings.data(), boxEncodings.data(), boxEncodingsInfo);
650     QuantizeData(qScores.data(), scores.data(), scoresInfo);
651     QuantizeData(qAnchors.data(), anchors.data(), anchorsInfo);
652     DetectionPostProcessRegularNmsEndToEnd<armnn::DataType::QAsymmU8>(defaultBackends, qBoxEncodings,
653                                                                              qScores, qAnchors,
654                                                                              1.0f, 1, 0.01f, 0, 0.5f, 0);
655 }
656 
657 BOOST_AUTO_TEST_CASE(NeonDetectionPostProcessFastNmsTest, * boost::unit_test::disabled())
658 {
659     std::vector<float> boxEncodings({
660                                         0.0f, 0.0f, 0.0f, 0.0f,
661                                         0.0f, 1.0f, 0.0f, 0.0f,
662                                         0.0f, -1.0f, 0.0f, 0.0f,
663                                         0.0f, 0.0f, 0.0f, 0.0f,
664                                         0.0f, 1.0f, 0.0f, 0.0f,
665                                         0.0f, 0.0f, 0.0f, 0.0f
666                                     });
667     std::vector<float> scores({
668                                   0.0f, 0.9f, 0.8f,
669                                   0.0f, 0.75f, 0.72f,
670                                   0.0f, 0.6f, 0.5f,
671                                   0.0f, 0.93f, 0.95f,
672                                   0.0f, 0.5f, 0.4f,
673                                   0.0f, 0.3f, 0.2f
674                               });
675     std::vector<float> anchors({
676                                    0.5f, 0.5f, 1.0f, 1.0f,
677                                    0.5f, 0.5f, 1.0f, 1.0f,
678                                    0.5f, 0.5f, 1.0f, 1.0f,
679                                    0.5f, 10.5f, 1.0f, 1.0f,
680                                    0.5f, 10.5f, 1.0f, 1.0f,
681                                    0.5f, 100.5f, 1.0f, 1.0f
682                                });
683     DetectionPostProcessFastNmsEndToEnd<armnn::DataType::Float32>(defaultBackends, boxEncodings, scores, anchors);
684 }
685 
686 BOOST_AUTO_TEST_CASE(NeonDetectionPostProcessFastNmsUint8Test, * boost::unit_test::disabled())
687 {
688     armnn::TensorInfo boxEncodingsInfo({ 1, 6, 4 }, armnn::DataType::Float32);
689     armnn::TensorInfo scoresInfo({ 1, 6, 3 }, armnn::DataType::Float32);
690     armnn::TensorInfo anchorsInfo({ 6, 4 }, armnn::DataType::Float32);
691 
692     boxEncodingsInfo.SetQuantizationScale(1.0f);
693     boxEncodingsInfo.SetQuantizationOffset(1);
694     scoresInfo.SetQuantizationScale(0.01f);
695     scoresInfo.SetQuantizationOffset(0);
696     anchorsInfo.SetQuantizationScale(0.5f);
697     anchorsInfo.SetQuantizationOffset(0);
698 
699     std::vector<float> boxEncodings({
700                                         0.0f, 0.0f, 0.0f, 0.0f,
701                                         0.0f, 1.0f, 0.0f, 0.0f,
702                                         0.0f, -1.0f, 0.0f, 0.0f,
703                                         0.0f, 0.0f, 0.0f, 0.0f,
704                                         0.0f, 1.0f, 0.0f, 0.0f,
705                                         0.0f, 0.0f, 0.0f, 0.0f
706                                     });
707     std::vector<float> scores({
708                                   0.0f, 0.9f, 0.8f,
709                                   0.0f, 0.75f, 0.72f,
710                                   0.0f, 0.6f, 0.5f,
711                                   0.0f, 0.93f, 0.95f,
712                                   0.0f, 0.5f, 0.4f,
713                                   0.0f, 0.3f, 0.2f
714                               });
715     std::vector<float> anchors({
716                                    0.5f, 0.5f, 1.0f, 1.0f,
717                                    0.5f, 0.5f, 1.0f, 1.0f,
718                                    0.5f, 0.5f, 1.0f, 1.0f,
719                                    0.5f, 10.5f, 1.0f, 1.0f,
720                                    0.5f, 10.5f, 1.0f, 1.0f,
721                                    0.5f, 100.5f, 1.0f, 1.0f
722                                });
723 
724     std::vector<uint8_t> qBoxEncodings(boxEncodings.size(), 0);
725     std::vector<uint8_t> qScores(scores.size(), 0);
726     std::vector<uint8_t> qAnchors(anchors.size(), 0);
727     QuantizeData(qBoxEncodings.data(), boxEncodings.data(), boxEncodingsInfo);
728     QuantizeData(qScores.data(), scores.data(), scoresInfo);
729     QuantizeData(qAnchors.data(), anchors.data(), anchorsInfo);
730     DetectionPostProcessFastNmsEndToEnd<armnn::DataType::QAsymmU8>(defaultBackends, qBoxEncodings,
731                                                                           qScores, qAnchors,
732                                                                           1.0f, 1, 0.01f, 0, 0.5f, 0);
733 }
734 
BOOST_AUTO_TEST_CASE(NeonQLstmEndToEndTest)735 BOOST_AUTO_TEST_CASE(NeonQLstmEndToEndTest)
736 {
737     QLstmEndToEnd(defaultBackends);
738 }
739 
740 BOOST_AUTO_TEST_SUITE_END()
741