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