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