xref: /aosp_15_r20/external/armnn/src/backends/backendsCommon/test/layerTests/LogTestImpl.cpp (revision 89c4ff92f2867872bb9e2354d150bf0c8c502810)
1 //
2 // Copyright © 2021 Arm Ltd and Contributors. All rights reserved.
3 // SPDX-License-Identifier: MIT
4 //
5 
6 #include "LogTestImpl.hpp"
7 #include "ElementwiseUnaryTestImpl.hpp"
8 
9 template<armnn::DataType ArmnnType, typename T>
Log2dTest(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)10 LayerTestResult<T, 2> Log2dTest(
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.7182818284f,
20         1.0f, 1.1f
21     };
22 
23     std::vector<float> expectedOutputValues
24     {
25         1.09861228867f, 0.99999999997f,
26         0.0f, 0.0953101798f
27     };
28 
29     return ElementwiseUnaryTestHelper<2, ArmnnType>(
30         workloadFactory,
31         memoryManager,
32         armnn::UnaryOperation::Log,
33         inputShape,
34         inputValues,
35         inputShape,
36         expectedOutputValues,
37         tensorHandleFactory);
38 }
39 
40 template<armnn::DataType ArmnnType, typename T>
Log3dTest(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)41 LayerTestResult<T, 3> Log3dTest(
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.7182818284f,
52         1.0f, 1.1f
53     };
54 
55     std::vector<float> expectedOutputValues
56     {
57         1.60943791243f, 1.38629436112f,
58         1.09861228867f, 0.99999999997f,
59         0.0f, 0.0953101798f
60     };
61 
62     return ElementwiseUnaryTestHelper<3, ArmnnType>(
63         workloadFactory,
64         memoryManager,
65         armnn::UnaryOperation::Log,
66         inputShape,
67         inputValues,
68         inputShape,
69         expectedOutputValues,
70         tensorHandleFactory);
71 }
72 
73 template<armnn::DataType ArmnnType, typename T>
LogZeroTest(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)74 LayerTestResult<T, 2> LogZeroTest(
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         -std::numeric_limits<float>::infinity(), -std::numeric_limits<float>::infinity()
89     };
90 
91     return ElementwiseUnaryTestHelper<2, ArmnnType>(
92         workloadFactory,
93         memoryManager,
94         armnn::UnaryOperation::Log,
95         inputShape,
96         inputValues,
97         inputShape,
98         expectedOutputValues,
99         tensorHandleFactory);
100 }
101 
102 template<armnn::DataType ArmnnType, typename T>
LogNegativeTest(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)103 LayerTestResult<T, 2> LogNegativeTest(
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         -std::numeric_limits<float>::quiet_NaN(), -std::numeric_limits<float>::quiet_NaN()
118     };
119 
120     return ElementwiseUnaryTestHelper<2, ArmnnType>(
121         workloadFactory,
122         memoryManager,
123         armnn::UnaryOperation::Log,
124         inputShape,
125         inputValues,
126         inputShape,
127         expectedOutputValues,
128         tensorHandleFactory);
129 }
130 
131 //
132 // Loglicit template specializations
133 //
134 
135 template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 2>
136 Log2dTest<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 Log2dTest<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 Log2dTest<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 Log2dTest<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 Log2dTest<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 Log3dTest<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 Log3dTest<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 Log3dTest<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 Log3dTest<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 Log3dTest<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 LogZeroTest<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 LogNegativeTest<armnn::DataType::Float32>(
203     armnn::IWorkloadFactory& workloadFactory,
204     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
205     const armnn::ITensorHandleFactory& tensorHandleFactory);