xref: /aosp_15_r20/external/armnn/src/backends/backendsCommon/test/layerTests/ExpTestImpl.cpp (revision 89c4ff92f2867872bb9e2354d150bf0c8c502810)
1 //
2 // Copyright © 2020 Arm Ltd. All rights reserved.
3 // SPDX-License-Identifier: MIT
4 //
5 
6 #include "ExpTestImpl.hpp"
7 #include "ElementwiseUnaryTestImpl.hpp"
8 
9 template<armnn::DataType ArmnnType, typename T>
Exp2dTest(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)10 LayerTestResult<T, 2> Exp2dTest(
11         armnn::IWorkloadFactory& workloadFactory,
12         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
13         const armnn::ITensorHandleFactory& tensorHandleFactory)
14 {
15     const unsigned int inputShape[] = { 2, 2 };
16 
17     std::vector<float> inputValues
18     {
19         3.0f, 2.0f,
20         1.0f, 1.1f
21     };
22 
23     std::vector<float> expectedOutputValues
24     {
25         20.085536923188f, 7.389056098931f,
26          2.718281828459f, 3.004166023946f
27     };
28 
29     return ElementwiseUnaryTestHelper<2, ArmnnType>(
30         workloadFactory,
31         memoryManager,
32         armnn::UnaryOperation::Exp,
33         inputShape,
34         inputValues,
35         inputShape,
36         expectedOutputValues,
37         tensorHandleFactory);
38 }
39 
40 template<armnn::DataType ArmnnType, typename T>
Exp3dTest(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)41 LayerTestResult<T, 3> Exp3dTest(
42     armnn::IWorkloadFactory& workloadFactory,
43     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
44     const armnn::ITensorHandleFactory& tensorHandleFactory)
45 {
46     const unsigned int inputShape[] = { 3, 1, 2 };
47 
48     std::vector<float> inputValues
49     {
50         5.0f, 4.0f,
51         3.0f, 2.0f,
52         1.0f, 1.1f
53     };
54 
55     std::vector<float> expectedOutputValues
56     {
57         148.413159102577f, 54.598150033144f,
58          20.085536923188f,  7.389056098931f,
59           2.718281828459f,  3.004166023946f
60     };
61 
62     return ElementwiseUnaryTestHelper<3, ArmnnType>(
63         workloadFactory,
64         memoryManager,
65         armnn::UnaryOperation::Exp,
66         inputShape,
67         inputValues,
68         inputShape,
69         expectedOutputValues,
70         tensorHandleFactory);
71 }
72 
73 template<armnn::DataType ArmnnType, typename T>
ExpZeroTest(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)74 LayerTestResult<T, 2> ExpZeroTest(
75         armnn::IWorkloadFactory& workloadFactory,
76         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
77         const armnn::ITensorHandleFactory& tensorHandleFactory)
78 {
79     const unsigned int inputShape[] = { 1, 2 };
80 
81     std::vector<float> inputValues
82     {
83         0.f, 0.f
84     };
85 
86     std::vector<float> expectedOutputValues
87     {
88         1.0f, 1.0f
89     };
90 
91     return ElementwiseUnaryTestHelper<2, ArmnnType>(
92         workloadFactory,
93         memoryManager,
94         armnn::UnaryOperation::Exp,
95         inputShape,
96         inputValues,
97         inputShape,
98         expectedOutputValues,
99         tensorHandleFactory);
100 }
101 
102 template<armnn::DataType ArmnnType, typename T>
ExpNegativeTest(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)103 LayerTestResult<T, 2> ExpNegativeTest(
104         armnn::IWorkloadFactory& workloadFactory,
105         const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
106         const armnn::ITensorHandleFactory& tensorHandleFactory)
107 {
108     const unsigned int inputShape[] = { 1, 2 };
109 
110     std::vector<float> inputValues
111     {
112         -5.9f, -5.8f
113     };
114 
115     std::vector<float> expectedOutputValues
116     {
117         0.0027394448187683684f, 0.0030275547453758153f,
118     };
119 
120     return ElementwiseUnaryTestHelper<2, ArmnnType>(
121         workloadFactory,
122         memoryManager,
123         armnn::UnaryOperation::Exp,
124         inputShape,
125         inputValues,
126         inputShape,
127         expectedOutputValues,
128         tensorHandleFactory);
129 }
130 
131 //
132 // Explicit template specializations
133 //
134 
135 template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 2>
136 Exp2dTest<armnn::DataType::Float32>(
137     armnn::IWorkloadFactory& workloadFactory,
138     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
139     const armnn::ITensorHandleFactory& tensorHandleFactory);
140 
141 template LayerTestResult<armnn::ResolveType<armnn::DataType::Float16>, 2>
142 Exp2dTest<armnn::DataType::Float16>(
143     armnn::IWorkloadFactory& workloadFactory,
144     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
145     const armnn::ITensorHandleFactory& tensorHandleFactory);
146 
147 template LayerTestResult<armnn::ResolveType<armnn::DataType::QAsymmS8>, 2>
148 Exp2dTest<armnn::DataType::QAsymmS8>(
149     armnn::IWorkloadFactory& workloadFactory,
150     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
151     const armnn::ITensorHandleFactory& tensorHandleFactory);
152 
153 template LayerTestResult<armnn::ResolveType<armnn::DataType::QAsymmU8>, 2>
154 Exp2dTest<armnn::DataType::QAsymmU8>(
155     armnn::IWorkloadFactory& workloadFactory,
156     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
157     const armnn::ITensorHandleFactory& tensorHandleFactory);
158 
159 template LayerTestResult<armnn::ResolveType<armnn::DataType::QSymmS16>, 2>
160 Exp2dTest<armnn::DataType::QSymmS16>(
161     armnn::IWorkloadFactory& workloadFactory,
162     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
163     const armnn::ITensorHandleFactory& tensorHandleFactory);
164 
165 template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 3>
166 Exp3dTest<armnn::DataType::Float32>(
167     armnn::IWorkloadFactory& workloadFactory,
168     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
169     const armnn::ITensorHandleFactory& tensorHandleFactory);
170 
171 template LayerTestResult<armnn::ResolveType<armnn::DataType::Float16>, 3>
172 Exp3dTest<armnn::DataType::Float16>(
173     armnn::IWorkloadFactory& workloadFactory,
174     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
175     const armnn::ITensorHandleFactory& tensorHandleFactory);
176 
177 template LayerTestResult<armnn::ResolveType<armnn::DataType::QAsymmS8>, 3>
178 Exp3dTest<armnn::DataType::QAsymmS8>(
179     armnn::IWorkloadFactory& workloadFactory,
180     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
181     const armnn::ITensorHandleFactory& tensorHandleFactory);
182 
183 template LayerTestResult<armnn::ResolveType<armnn::DataType::QAsymmU8>, 3>
184 Exp3dTest<armnn::DataType::QAsymmU8>(
185     armnn::IWorkloadFactory& workloadFactory,
186     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
187     const armnn::ITensorHandleFactory& tensorHandleFactory);
188 
189 template LayerTestResult<armnn::ResolveType<armnn::DataType::QSymmS16>, 3>
190 Exp3dTest<armnn::DataType::QSymmS16>(
191     armnn::IWorkloadFactory& workloadFactory,
192     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
193     const armnn::ITensorHandleFactory& tensorHandleFactory);
194 
195 template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 2>
196 ExpZeroTest<armnn::DataType::Float32>(
197     armnn::IWorkloadFactory& workloadFactory,
198     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
199     const armnn::ITensorHandleFactory& tensorHandleFactory);
200 
201 template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 2>
202 ExpNegativeTest<armnn::DataType::Float32>(
203     armnn::IWorkloadFactory& workloadFactory,
204     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
205     const armnn::ITensorHandleFactory& tensorHandleFactory);