blob: deaa8eb81b35a44f7c0f50d767fbd60017e284d2 [file] [log] [blame]
Aron Virginas-Tar70104002018-10-24 15:33:28 +01001//
2// Copyright © 2017 Arm Ltd. All rights reserved.
3// SPDX-License-Identifier: MIT
4//
5
Aron Virginas-Tarc9cc8042018-11-01 16:15:57 +00006#include <backendsCommon/test/EndToEndTestImpl.hpp>
narpra01b9546cf2018-11-20 15:21:28 +00007#include <backendsCommon/test/MergerTestImpl.hpp>
kevmay01eed85922019-01-28 08:37:25 +00008#include <backendsCommon/test/ArithmeticTestImpl.hpp>
Aron Virginas-Tar70104002018-10-24 15:33:28 +01009
10#include <boost/test/unit_test.hpp>
11
12BOOST_AUTO_TEST_SUITE(NeonEndToEnd)
13
narpra01b9546cf2018-11-20 15:21:28 +000014std::vector<armnn::BackendId> defaultBackends = {armnn::Compute::CpuAcc};
15
Aron Virginas-Tar70104002018-10-24 15:33:28 +010016BOOST_AUTO_TEST_CASE(ConstantUsage_Neon_Float32)
17{
narpra01b9546cf2018-11-20 15:21:28 +000018 BOOST_TEST(ConstantUsageFloat32Test(defaultBackends));
Aron Virginas-Tar70104002018-10-24 15:33:28 +010019}
20
21BOOST_AUTO_TEST_CASE(FallbackToCpuRef)
22{
23 using namespace armnn;
24
25 // Create runtime in which test will run and allow fallback to CpuRef.
26 IRuntime::CreationOptions options;
27 IRuntimePtr runtime(IRuntime::Create(options));
28
29 // Builds up the structure of the network.
30 INetworkPtr net(INetwork::Create());
31
32 IConnectableLayer* input = net->AddInputLayer(0);
33
34 // This layer configuration isn't supported by CpuAcc but we allow fallback to CpuRef so it shoud pass.
35 NormalizationDescriptor descriptor;
36 IConnectableLayer* pooling = net->AddNormalizationLayer(descriptor);
37
38 IConnectableLayer* output = net->AddOutputLayer(0);
39
40 input->GetOutputSlot(0).Connect(pooling->GetInputSlot(0));
41 pooling->GetOutputSlot(0).Connect(output->GetInputSlot(0));
42
43 input->GetOutputSlot(0).SetTensorInfo(TensorInfo({ 1, 1, 4, 4 }, DataType::Float32));
44 pooling->GetOutputSlot(0).SetTensorInfo(TensorInfo({ 1, 1, 4, 4 }, DataType::Float32));
45
46 // optimize the network
47 std::vector<BackendId> backends = {Compute::CpuAcc, Compute::CpuRef};
48 IOptimizedNetworkPtr optNet = Optimize(*net, backends, runtime->GetDeviceSpec());
49
50 // Load it into the runtime. It should pass.
51 NetworkId netId;
52 BOOST_TEST(runtime->LoadNetwork(netId, std::move(optNet)) == Status::Success);
53}
54
kevmay01eed85922019-01-28 08:37:25 +000055BOOST_AUTO_TEST_CASE(NeonGreaterSimpleEndToEndTest)
56{
57 const std::vector<uint8_t> expectedOutput({ 0, 0, 0, 0, 1, 1, 1, 1,
58 0, 0, 0, 0, 0, 0, 0, 0 });
59
60 ArithmeticSimpleEndToEnd<armnn::DataType::Float32, armnn::DataType::Boolean>(defaultBackends,
61 LayerType::Greater,
62 expectedOutput);
63}
64
65BOOST_AUTO_TEST_CASE(NeonGreaterSimpleEndToEndUint8Test)
66{
67 const std::vector<uint8_t> expectedOutput({ 0, 0, 0, 0, 1, 1, 1, 1,
68 0, 0, 0, 0, 0, 0, 0, 0 });
69
70 ArithmeticSimpleEndToEnd<armnn::DataType::QuantisedAsymm8, armnn::DataType::Boolean>(defaultBackends,
71 LayerType::Greater,
72 expectedOutput);
73}
74
75BOOST_AUTO_TEST_CASE(NeonGreaterBroadcastEndToEndTest)
76{
77 const std::vector<uint8_t> expectedOutput({ 0, 1, 0, 0, 0, 1,
78 1, 1, 1, 1, 1, 1 });
79
80 ArithmeticBroadcastEndToEnd<armnn::DataType::Float32, armnn::DataType::Boolean>(defaultBackends,
81 LayerType::Greater,
82 expectedOutput);
83}
84
85BOOST_AUTO_TEST_CASE(NeonGreaterBroadcastEndToEndUint8Test)
86{
87 const std::vector<uint8_t> expectedOutput({ 0, 1, 0, 0, 0, 1,
88 1, 1, 1, 1, 1, 1 });
89
90 ArithmeticBroadcastEndToEnd<armnn::DataType::QuantisedAsymm8, armnn::DataType::Boolean>(defaultBackends,
91 LayerType::Greater,
92 expectedOutput);
93}
94
narpra01b9546cf2018-11-20 15:21:28 +000095BOOST_AUTO_TEST_CASE(NeonMergerEndToEndDim0Test)
96{
Nattapat Chaimanowong649dd952019-01-22 16:10:44 +000097 MergerDim0EndToEnd<armnn::DataType::Float32>(defaultBackends);
narpra01b9546cf2018-11-20 15:21:28 +000098}
99
100BOOST_AUTO_TEST_CASE(NeonMergerEndToEndDim0Uint8Test)
101{
Nattapat Chaimanowong649dd952019-01-22 16:10:44 +0000102 MergerDim0EndToEnd<armnn::DataType::QuantisedAsymm8>(defaultBackends);
narpra01b9546cf2018-11-20 15:21:28 +0000103}
104
105BOOST_AUTO_TEST_CASE(NeonMergerEndToEndDim1Test)
106{
Nattapat Chaimanowong649dd952019-01-22 16:10:44 +0000107 MergerDim1EndToEnd<armnn::DataType::Float32>(defaultBackends);
narpra01b9546cf2018-11-20 15:21:28 +0000108}
109
110BOOST_AUTO_TEST_CASE(NeonMergerEndToEndDim1Uint8Test)
111{
Nattapat Chaimanowong649dd952019-01-22 16:10:44 +0000112 MergerDim1EndToEnd<armnn::DataType::QuantisedAsymm8>(defaultBackends);
narpra01b9546cf2018-11-20 15:21:28 +0000113}
114
115BOOST_AUTO_TEST_CASE(NeonMergerEndToEndDim3Test)
116{
Nattapat Chaimanowong649dd952019-01-22 16:10:44 +0000117 MergerDim3EndToEnd<armnn::DataType::Float32>(defaultBackends);
narpra01b9546cf2018-11-20 15:21:28 +0000118}
119
120BOOST_AUTO_TEST_CASE(NeonMergerEndToEndDim3Uint8Test)
121{
Nattapat Chaimanowong649dd952019-01-22 16:10:44 +0000122 MergerDim3EndToEnd<armnn::DataType::QuantisedAsymm8>(defaultBackends);
narpra01b9546cf2018-11-20 15:21:28 +0000123}
124
Aron Virginas-Tar70104002018-10-24 15:33:28 +0100125BOOST_AUTO_TEST_SUITE_END()