xref: /aosp_15_r20/external/armnn/delegate/test/ElementwiseUnaryTest.cpp (revision 89c4ff92f2867872bb9e2354d150bf0c8c502810)
1*89c4ff92SAndroid Build Coastguard Worker //
2*89c4ff92SAndroid Build Coastguard Worker // Copyright © 2022-2023 Arm Ltd and Contributors. All rights reserved.
3*89c4ff92SAndroid Build Coastguard Worker // SPDX-License-Identifier: MIT
4*89c4ff92SAndroid Build Coastguard Worker //
5*89c4ff92SAndroid Build Coastguard Worker 
6*89c4ff92SAndroid Build Coastguard Worker #include "ElementwiseUnaryTestHelper.hpp"
7*89c4ff92SAndroid Build Coastguard Worker 
8*89c4ff92SAndroid Build Coastguard Worker #include <armnn_delegate.hpp>
9*89c4ff92SAndroid Build Coastguard Worker 
10*89c4ff92SAndroid Build Coastguard Worker #include <flatbuffers/flatbuffers.h>
11*89c4ff92SAndroid Build Coastguard Worker #include <tensorflow/lite/interpreter.h>
12*89c4ff92SAndroid Build Coastguard Worker #include <tensorflow/lite/kernels/register.h>
13*89c4ff92SAndroid Build Coastguard Worker #include <tensorflow/lite/model.h>
14*89c4ff92SAndroid Build Coastguard Worker #include <schema_generated.h>
15*89c4ff92SAndroid Build Coastguard Worker #include <tensorflow/lite/version.h>
16*89c4ff92SAndroid Build Coastguard Worker 
17*89c4ff92SAndroid Build Coastguard Worker #include <doctest/doctest.h>
18*89c4ff92SAndroid Build Coastguard Worker 
19*89c4ff92SAndroid Build Coastguard Worker namespace armnnDelegate
20*89c4ff92SAndroid Build Coastguard Worker {
21*89c4ff92SAndroid Build Coastguard Worker 
22*89c4ff92SAndroid Build Coastguard Worker TEST_SUITE("ElementwiseUnary_GpuAccTests")
23*89c4ff92SAndroid Build Coastguard Worker {
24*89c4ff92SAndroid Build Coastguard Worker 
25*89c4ff92SAndroid Build Coastguard Worker TEST_CASE ("Abs_Float32_GpuAcc_Test")
26*89c4ff92SAndroid Build Coastguard Worker {
27*89c4ff92SAndroid Build Coastguard Worker     // Create the ArmNN Delegate
28*89c4ff92SAndroid Build Coastguard Worker     std::vector<armnn::BackendId> backends = { armnn::Compute::GpuAcc };
29*89c4ff92SAndroid Build Coastguard Worker     // Set input data
30*89c4ff92SAndroid Build Coastguard Worker     std::vector<float> inputValues
31*89c4ff92SAndroid Build Coastguard Worker     {
32*89c4ff92SAndroid Build Coastguard Worker         -0.1f, -0.2f, -0.3f,
33*89c4ff92SAndroid Build Coastguard Worker         0.1f,  0.2f,  0.3f
34*89c4ff92SAndroid Build Coastguard Worker     };
35*89c4ff92SAndroid Build Coastguard Worker     // Calculate output data
36*89c4ff92SAndroid Build Coastguard Worker     std::vector<float> expectedOutputValues(inputValues.size());
37*89c4ff92SAndroid Build Coastguard Worker     for (unsigned int i = 0; i < inputValues.size(); ++i)
38*89c4ff92SAndroid Build Coastguard Worker     {
39*89c4ff92SAndroid Build Coastguard Worker         expectedOutputValues[i] = std::abs(inputValues[i]);
40*89c4ff92SAndroid Build Coastguard Worker     }
41*89c4ff92SAndroid Build Coastguard Worker     ElementwiseUnaryFP32Test(tflite::BuiltinOperator_ABS, backends, inputValues, expectedOutputValues);
42*89c4ff92SAndroid Build Coastguard Worker }
43*89c4ff92SAndroid Build Coastguard Worker 
44*89c4ff92SAndroid Build Coastguard Worker TEST_CASE ("Exp_Float32_GpuAcc_Test")
45*89c4ff92SAndroid Build Coastguard Worker {
46*89c4ff92SAndroid Build Coastguard Worker     // Create the ArmNN Delegate
47*89c4ff92SAndroid Build Coastguard Worker     std::vector<armnn::BackendId> backends = { armnn::Compute::GpuAcc };
48*89c4ff92SAndroid Build Coastguard Worker     // Set input data
49*89c4ff92SAndroid Build Coastguard Worker     std::vector<float> inputValues
50*89c4ff92SAndroid Build Coastguard Worker     {
51*89c4ff92SAndroid Build Coastguard Worker         5.0f, 4.0f,
52*89c4ff92SAndroid Build Coastguard Worker         3.0f, 2.0f,
53*89c4ff92SAndroid Build Coastguard Worker         1.0f, 1.1f
54*89c4ff92SAndroid Build Coastguard Worker     };
55*89c4ff92SAndroid Build Coastguard Worker     // Set output data
56*89c4ff92SAndroid Build Coastguard Worker     std::vector<float> expectedOutputValues
57*89c4ff92SAndroid Build Coastguard Worker     {
58*89c4ff92SAndroid Build Coastguard Worker         148.413159102577f, 54.598150033144f,
59*89c4ff92SAndroid Build Coastguard Worker         20.085536923188f,  7.389056098931f,
60*89c4ff92SAndroid Build Coastguard Worker         2.718281828459f,  3.004166023946f
61*89c4ff92SAndroid Build Coastguard Worker     };
62*89c4ff92SAndroid Build Coastguard Worker 
63*89c4ff92SAndroid Build Coastguard Worker     ElementwiseUnaryFP32Test(tflite::BuiltinOperator_EXP, backends, inputValues, expectedOutputValues);
64*89c4ff92SAndroid Build Coastguard Worker }
65*89c4ff92SAndroid Build Coastguard Worker 
66*89c4ff92SAndroid Build Coastguard Worker TEST_CASE ("Log_Float32_GpuAcc_Test")
67*89c4ff92SAndroid Build Coastguard Worker {
68*89c4ff92SAndroid Build Coastguard Worker     // Create the ArmNN Delegate
69*89c4ff92SAndroid Build Coastguard Worker     std::vector<armnn::BackendId> backends = { armnn::Compute::GpuAcc };
70*89c4ff92SAndroid Build Coastguard Worker     // Set input data
71*89c4ff92SAndroid Build Coastguard Worker     std::vector<float> inputValues
72*89c4ff92SAndroid Build Coastguard Worker     {
73*89c4ff92SAndroid Build Coastguard Worker         1.0f, 1.0f,  2.0f,
74*89c4ff92SAndroid Build Coastguard Worker         3.0f,  4.0f, 2.71828f
75*89c4ff92SAndroid Build Coastguard Worker     };
76*89c4ff92SAndroid Build Coastguard Worker     // Set output data
77*89c4ff92SAndroid Build Coastguard Worker     std::vector<float> expectedOutputValues
78*89c4ff92SAndroid Build Coastguard Worker     {
79*89c4ff92SAndroid Build Coastguard Worker         0.f,  0.f,  0.69314718056f,
80*89c4ff92SAndroid Build Coastguard Worker         1.09861228867f, 1.38629436112f, 0.99999932734f
81*89c4ff92SAndroid Build Coastguard Worker     };
82*89c4ff92SAndroid Build Coastguard Worker 
83*89c4ff92SAndroid Build Coastguard Worker     ElementwiseUnaryFP32Test(tflite::BuiltinOperator_LOG, backends, inputValues, expectedOutputValues);
84*89c4ff92SAndroid Build Coastguard Worker }
85*89c4ff92SAndroid Build Coastguard Worker 
86*89c4ff92SAndroid Build Coastguard Worker TEST_CASE ("Neg_Float32_GpuAcc_Test")
87*89c4ff92SAndroid Build Coastguard Worker {
88*89c4ff92SAndroid Build Coastguard Worker     // Create the ArmNN Delegate
89*89c4ff92SAndroid Build Coastguard Worker     std::vector<armnn::BackendId> backends = { armnn::Compute::GpuAcc };
90*89c4ff92SAndroid Build Coastguard Worker     // Set input data
91*89c4ff92SAndroid Build Coastguard Worker     std::vector<float> inputValues
92*89c4ff92SAndroid Build Coastguard Worker     {
93*89c4ff92SAndroid Build Coastguard Worker         1.f, 0.f, 3.f,
94*89c4ff92SAndroid Build Coastguard Worker         25.f, 64.f, 100.f
95*89c4ff92SAndroid Build Coastguard Worker     };
96*89c4ff92SAndroid Build Coastguard Worker     // Set output data
97*89c4ff92SAndroid Build Coastguard Worker     std::vector<float> expectedOutputValues
98*89c4ff92SAndroid Build Coastguard Worker     {
99*89c4ff92SAndroid Build Coastguard Worker         -1.f, 0.f, -3.f,
100*89c4ff92SAndroid Build Coastguard Worker         -25.f, -64.f, -100.f
101*89c4ff92SAndroid Build Coastguard Worker     };
102*89c4ff92SAndroid Build Coastguard Worker 
103*89c4ff92SAndroid Build Coastguard Worker     ElementwiseUnaryFP32Test(tflite::BuiltinOperator_NEG, backends, inputValues, expectedOutputValues);
104*89c4ff92SAndroid Build Coastguard Worker }
105*89c4ff92SAndroid Build Coastguard Worker 
106*89c4ff92SAndroid Build Coastguard Worker TEST_CASE ("Rsqrt_Float32_GpuAcc_Test")
107*89c4ff92SAndroid Build Coastguard Worker {
108*89c4ff92SAndroid Build Coastguard Worker     // Create the ArmNN Delegate
109*89c4ff92SAndroid Build Coastguard Worker     std::vector<armnn::BackendId> backends = { armnn::Compute::GpuAcc };
110*89c4ff92SAndroid Build Coastguard Worker     // Set input data
111*89c4ff92SAndroid Build Coastguard Worker     std::vector<float> inputValues
112*89c4ff92SAndroid Build Coastguard Worker     {
113*89c4ff92SAndroid Build Coastguard Worker         1.f, 4.f, 16.f,
114*89c4ff92SAndroid Build Coastguard Worker         25.f, 64.f, 100.f
115*89c4ff92SAndroid Build Coastguard Worker     };
116*89c4ff92SAndroid Build Coastguard Worker     // Set output data
117*89c4ff92SAndroid Build Coastguard Worker     std::vector<float> expectedOutputValues
118*89c4ff92SAndroid Build Coastguard Worker     {
119*89c4ff92SAndroid Build Coastguard Worker         1.f, 0.5f, 0.25f,
120*89c4ff92SAndroid Build Coastguard Worker         0.2f, 0.125f, 0.1f
121*89c4ff92SAndroid Build Coastguard Worker     };
122*89c4ff92SAndroid Build Coastguard Worker 
123*89c4ff92SAndroid Build Coastguard Worker     ElementwiseUnaryFP32Test(tflite::BuiltinOperator_RSQRT, backends, inputValues, expectedOutputValues);
124*89c4ff92SAndroid Build Coastguard Worker }
125*89c4ff92SAndroid Build Coastguard Worker 
126*89c4ff92SAndroid Build Coastguard Worker TEST_CASE ("Sin_Float32_GpuAcc_Test")
127*89c4ff92SAndroid Build Coastguard Worker {
128*89c4ff92SAndroid Build Coastguard Worker     // Create the ArmNN Delegate
129*89c4ff92SAndroid Build Coastguard Worker     std::vector<armnn::BackendId> backends = { armnn::Compute::GpuAcc };
130*89c4ff92SAndroid Build Coastguard Worker     // Set input data
131*89c4ff92SAndroid Build Coastguard Worker     std::vector<float> inputValues
132*89c4ff92SAndroid Build Coastguard Worker     {
133*89c4ff92SAndroid Build Coastguard Worker             0.0f, 1.0f, 16.0f,
134*89c4ff92SAndroid Build Coastguard Worker             0.5f, 36.0f, -1.f
135*89c4ff92SAndroid Build Coastguard Worker     };
136*89c4ff92SAndroid Build Coastguard Worker     // Set output data
137*89c4ff92SAndroid Build Coastguard Worker     std::vector<float> expectedOutputValues
138*89c4ff92SAndroid Build Coastguard Worker     {
139*89c4ff92SAndroid Build Coastguard Worker             0.0f, 0.8414709848f, -0.28790331666f,
140*89c4ff92SAndroid Build Coastguard Worker             0.4794255386f, -0.99177885344f, -0.8414709848f
141*89c4ff92SAndroid Build Coastguard Worker     };
142*89c4ff92SAndroid Build Coastguard Worker 
143*89c4ff92SAndroid Build Coastguard Worker     ElementwiseUnaryFP32Test(tflite::BuiltinOperator_SIN, backends, inputValues, expectedOutputValues);
144*89c4ff92SAndroid Build Coastguard Worker }
145*89c4ff92SAndroid Build Coastguard Worker } // TEST_SUITE("ElementwiseUnary_GpuAccTests")
146*89c4ff92SAndroid Build Coastguard Worker 
147*89c4ff92SAndroid Build Coastguard Worker 
148*89c4ff92SAndroid Build Coastguard Worker 
149*89c4ff92SAndroid Build Coastguard Worker TEST_SUITE("ElementwiseUnary_CpuAccTests")
150*89c4ff92SAndroid Build Coastguard Worker {
151*89c4ff92SAndroid Build Coastguard Worker 
152*89c4ff92SAndroid Build Coastguard Worker TEST_CASE ("Abs_Float32_CpuAcc_Test")
153*89c4ff92SAndroid Build Coastguard Worker {
154*89c4ff92SAndroid Build Coastguard Worker     // Create the ArmNN Delegate
155*89c4ff92SAndroid Build Coastguard Worker     std::vector<armnn::BackendId> backends = { armnn::Compute::CpuAcc };
156*89c4ff92SAndroid Build Coastguard Worker     // Set input data
157*89c4ff92SAndroid Build Coastguard Worker     std::vector<float> inputValues
158*89c4ff92SAndroid Build Coastguard Worker     {
159*89c4ff92SAndroid Build Coastguard Worker         -0.1f, -0.2f, -0.3f,
160*89c4ff92SAndroid Build Coastguard Worker         0.1f,  0.2f,  0.3f
161*89c4ff92SAndroid Build Coastguard Worker     };
162*89c4ff92SAndroid Build Coastguard Worker     // Calculate output data
163*89c4ff92SAndroid Build Coastguard Worker     std::vector<float> expectedOutputValues(inputValues.size());
164*89c4ff92SAndroid Build Coastguard Worker     for (unsigned int i = 0; i < inputValues.size(); ++i)
165*89c4ff92SAndroid Build Coastguard Worker     {
166*89c4ff92SAndroid Build Coastguard Worker         expectedOutputValues[i] = std::abs(inputValues[i]);
167*89c4ff92SAndroid Build Coastguard Worker     }
168*89c4ff92SAndroid Build Coastguard Worker 
169*89c4ff92SAndroid Build Coastguard Worker     ElementwiseUnaryFP32Test(tflite::BuiltinOperator_ABS, backends, inputValues, expectedOutputValues);
170*89c4ff92SAndroid Build Coastguard Worker }
171*89c4ff92SAndroid Build Coastguard Worker 
172*89c4ff92SAndroid Build Coastguard Worker TEST_CASE ("Exp_Float32_CpuAcc_Test")
173*89c4ff92SAndroid Build Coastguard Worker {
174*89c4ff92SAndroid Build Coastguard Worker     // Create the ArmNN Delegate
175*89c4ff92SAndroid Build Coastguard Worker     std::vector<armnn::BackendId> backends = { armnn::Compute::CpuAcc };
176*89c4ff92SAndroid Build Coastguard Worker     // Set input data
177*89c4ff92SAndroid Build Coastguard Worker     std::vector<float> inputValues
178*89c4ff92SAndroid Build Coastguard Worker     {
179*89c4ff92SAndroid Build Coastguard Worker         5.0f, 4.0f,
180*89c4ff92SAndroid Build Coastguard Worker         3.0f, 2.0f,
181*89c4ff92SAndroid Build Coastguard Worker         1.0f, 1.1f
182*89c4ff92SAndroid Build Coastguard Worker     };
183*89c4ff92SAndroid Build Coastguard Worker     // Set output data
184*89c4ff92SAndroid Build Coastguard Worker     std::vector<float> expectedOutputValues
185*89c4ff92SAndroid Build Coastguard Worker     {
186*89c4ff92SAndroid Build Coastguard Worker         148.413159102577f, 54.598150033144f,
187*89c4ff92SAndroid Build Coastguard Worker         20.085536923188f,  7.389056098931f,
188*89c4ff92SAndroid Build Coastguard Worker         2.718281828459f,  3.004166023946f
189*89c4ff92SAndroid Build Coastguard Worker     };
190*89c4ff92SAndroid Build Coastguard Worker 
191*89c4ff92SAndroid Build Coastguard Worker     ElementwiseUnaryFP32Test(tflite::BuiltinOperator_EXP, backends, inputValues, expectedOutputValues);
192*89c4ff92SAndroid Build Coastguard Worker }
193*89c4ff92SAndroid Build Coastguard Worker 
194*89c4ff92SAndroid Build Coastguard Worker TEST_CASE ("Log_Float32_CpuAcc_Test")
195*89c4ff92SAndroid Build Coastguard Worker {
196*89c4ff92SAndroid Build Coastguard Worker     // Create the ArmNN Delegate
197*89c4ff92SAndroid Build Coastguard Worker     std::vector<armnn::BackendId> backends = { armnn::Compute::CpuAcc };
198*89c4ff92SAndroid Build Coastguard Worker     // Set input data
199*89c4ff92SAndroid Build Coastguard Worker     std::vector<float> inputValues
200*89c4ff92SAndroid Build Coastguard Worker     {
201*89c4ff92SAndroid Build Coastguard Worker         1.0f, 1.0f,  2.0f,
202*89c4ff92SAndroid Build Coastguard Worker         3.0f,  4.0f, 2.71828f
203*89c4ff92SAndroid Build Coastguard Worker     };
204*89c4ff92SAndroid Build Coastguard Worker     // Set output data
205*89c4ff92SAndroid Build Coastguard Worker     std::vector<float> expectedOutputValues
206*89c4ff92SAndroid Build Coastguard Worker     {
207*89c4ff92SAndroid Build Coastguard Worker         0.f,  0.f,  0.69314718056f,
208*89c4ff92SAndroid Build Coastguard Worker         1.09861228867f, 1.38629436112f, 0.99999932734f
209*89c4ff92SAndroid Build Coastguard Worker     };
210*89c4ff92SAndroid Build Coastguard Worker 
211*89c4ff92SAndroid Build Coastguard Worker     ElementwiseUnaryFP32Test(tflite::BuiltinOperator_LOG, backends, inputValues, expectedOutputValues);
212*89c4ff92SAndroid Build Coastguard Worker }
213*89c4ff92SAndroid Build Coastguard Worker 
214*89c4ff92SAndroid Build Coastguard Worker TEST_CASE ("Neg_Float32_CpuAcc_Test")
215*89c4ff92SAndroid Build Coastguard Worker {
216*89c4ff92SAndroid Build Coastguard Worker     // Create the ArmNN Delegate
217*89c4ff92SAndroid Build Coastguard Worker     std::vector<armnn::BackendId> backends = { armnn::Compute::CpuAcc };
218*89c4ff92SAndroid Build Coastguard Worker     // Set input data
219*89c4ff92SAndroid Build Coastguard Worker     std::vector<float> inputValues
220*89c4ff92SAndroid Build Coastguard Worker     {
221*89c4ff92SAndroid Build Coastguard Worker         1.f, 0.f, 3.f,
222*89c4ff92SAndroid Build Coastguard Worker         25.f, 64.f, 100.f
223*89c4ff92SAndroid Build Coastguard Worker     };
224*89c4ff92SAndroid Build Coastguard Worker     // Set output data
225*89c4ff92SAndroid Build Coastguard Worker     std::vector<float> expectedOutputValues
226*89c4ff92SAndroid Build Coastguard Worker     {
227*89c4ff92SAndroid Build Coastguard Worker         -1.f, 0.f, -3.f,
228*89c4ff92SAndroid Build Coastguard Worker         -25.f, -64.f, -100.f
229*89c4ff92SAndroid Build Coastguard Worker     };
230*89c4ff92SAndroid Build Coastguard Worker 
231*89c4ff92SAndroid Build Coastguard Worker     ElementwiseUnaryFP32Test(tflite::BuiltinOperator_NEG, backends, inputValues, expectedOutputValues);
232*89c4ff92SAndroid Build Coastguard Worker }
233*89c4ff92SAndroid Build Coastguard Worker 
234*89c4ff92SAndroid Build Coastguard Worker TEST_CASE ("Rsqrt_Float32_CpuAcc_Test")
235*89c4ff92SAndroid Build Coastguard Worker {
236*89c4ff92SAndroid Build Coastguard Worker     // Create the ArmNN Delegate
237*89c4ff92SAndroid Build Coastguard Worker     std::vector<armnn::BackendId> backends = { armnn::Compute::CpuAcc };
238*89c4ff92SAndroid Build Coastguard Worker     // Set input data
239*89c4ff92SAndroid Build Coastguard Worker     std::vector<float> inputValues
240*89c4ff92SAndroid Build Coastguard Worker     {
241*89c4ff92SAndroid Build Coastguard Worker         1.f, 4.f, 16.f,
242*89c4ff92SAndroid Build Coastguard Worker         25.f, 64.f, 100.f
243*89c4ff92SAndroid Build Coastguard Worker     };
244*89c4ff92SAndroid Build Coastguard Worker     // Set output data
245*89c4ff92SAndroid Build Coastguard Worker     std::vector<float> expectedOutputValues
246*89c4ff92SAndroid Build Coastguard Worker     {
247*89c4ff92SAndroid Build Coastguard Worker         1.f, 0.5f, 0.25f,
248*89c4ff92SAndroid Build Coastguard Worker         0.2f, 0.125f, 0.1f
249*89c4ff92SAndroid Build Coastguard Worker     };
250*89c4ff92SAndroid Build Coastguard Worker 
251*89c4ff92SAndroid Build Coastguard Worker     ElementwiseUnaryFP32Test(tflite::BuiltinOperator_RSQRT, backends, inputValues, expectedOutputValues);
252*89c4ff92SAndroid Build Coastguard Worker }
253*89c4ff92SAndroid Build Coastguard Worker 
254*89c4ff92SAndroid Build Coastguard Worker TEST_CASE ("Sin_Float32_CpuAcc_Test")
255*89c4ff92SAndroid Build Coastguard Worker {
256*89c4ff92SAndroid Build Coastguard Worker     // Create the ArmNN Delegate
257*89c4ff92SAndroid Build Coastguard Worker     std::vector<armnn::BackendId> backends = { armnn::Compute::CpuAcc };
258*89c4ff92SAndroid Build Coastguard Worker     // Set input data
259*89c4ff92SAndroid Build Coastguard Worker     std::vector<float> inputValues
260*89c4ff92SAndroid Build Coastguard Worker     {
261*89c4ff92SAndroid Build Coastguard Worker         0.0f, 1.0f, 16.0f,
262*89c4ff92SAndroid Build Coastguard Worker         0.5f, 36.0f, -1.f
263*89c4ff92SAndroid Build Coastguard Worker     };
264*89c4ff92SAndroid Build Coastguard Worker     // Set output data
265*89c4ff92SAndroid Build Coastguard Worker     std::vector<float> expectedOutputValues
266*89c4ff92SAndroid Build Coastguard Worker     {
267*89c4ff92SAndroid Build Coastguard Worker         0.0f, 0.8414709848f, -0.28790331666f,
268*89c4ff92SAndroid Build Coastguard Worker         0.4794255386f, -0.99177885344f, -0.8414709848f
269*89c4ff92SAndroid Build Coastguard Worker     };
270*89c4ff92SAndroid Build Coastguard Worker 
271*89c4ff92SAndroid Build Coastguard Worker     ElementwiseUnaryFP32Test(tflite::BuiltinOperator_SIN, backends, inputValues, expectedOutputValues);
272*89c4ff92SAndroid Build Coastguard Worker }
273*89c4ff92SAndroid Build Coastguard Worker } // TEST_SUITE("ElementwiseUnary_CpuAccTests")
274*89c4ff92SAndroid Build Coastguard Worker 
275*89c4ff92SAndroid Build Coastguard Worker TEST_SUITE("ElementwiseUnary_CpuRefTests")
276*89c4ff92SAndroid Build Coastguard Worker {
277*89c4ff92SAndroid Build Coastguard Worker 
278*89c4ff92SAndroid Build Coastguard Worker TEST_CASE ("Abs_Float32_CpuRef_Test")
279*89c4ff92SAndroid Build Coastguard Worker {
280*89c4ff92SAndroid Build Coastguard Worker     // Create the ArmNN Delegate
281*89c4ff92SAndroid Build Coastguard Worker     std::vector<armnn::BackendId> backends = { armnn::Compute::CpuRef };
282*89c4ff92SAndroid Build Coastguard Worker     // Set input data
283*89c4ff92SAndroid Build Coastguard Worker     std::vector<float> inputValues
284*89c4ff92SAndroid Build Coastguard Worker     {
285*89c4ff92SAndroid Build Coastguard Worker         -0.1f, -0.2f, -0.3f,
286*89c4ff92SAndroid Build Coastguard Worker         0.1f,  0.2f,  0.3f
287*89c4ff92SAndroid Build Coastguard Worker     };
288*89c4ff92SAndroid Build Coastguard Worker     // Calculate output data
289*89c4ff92SAndroid Build Coastguard Worker     std::vector<float> expectedOutputValues(inputValues.size());
290*89c4ff92SAndroid Build Coastguard Worker     for (unsigned int i = 0; i < inputValues.size(); ++i)
291*89c4ff92SAndroid Build Coastguard Worker     {
292*89c4ff92SAndroid Build Coastguard Worker         expectedOutputValues[i] = std::abs(inputValues[i]);
293*89c4ff92SAndroid Build Coastguard Worker     }
294*89c4ff92SAndroid Build Coastguard Worker 
295*89c4ff92SAndroid Build Coastguard Worker     ElementwiseUnaryFP32Test(tflite::BuiltinOperator_ABS, backends, inputValues, expectedOutputValues);
296*89c4ff92SAndroid Build Coastguard Worker }
297*89c4ff92SAndroid Build Coastguard Worker 
298*89c4ff92SAndroid Build Coastguard Worker TEST_CASE ("Ceil_Float32_CpuRef_Test")
299*89c4ff92SAndroid Build Coastguard Worker {
300*89c4ff92SAndroid Build Coastguard Worker     // Create the ArmNN Delegate
301*89c4ff92SAndroid Build Coastguard Worker     std::vector<armnn::BackendId> backends = { armnn::Compute::CpuRef };
302*89c4ff92SAndroid Build Coastguard Worker     // Set input data
303*89c4ff92SAndroid Build Coastguard Worker     std::vector<float> inputValues
304*89c4ff92SAndroid Build Coastguard Worker     {
305*89c4ff92SAndroid Build Coastguard Worker         0.0f, 1.1f, -16.1f,
306*89c4ff92SAndroid Build Coastguard Worker         0.5f, -0.5f, -1.3f
307*89c4ff92SAndroid Build Coastguard Worker     };
308*89c4ff92SAndroid Build Coastguard Worker     // Set output data
309*89c4ff92SAndroid Build Coastguard Worker     std::vector<float> expectedOutputValues
310*89c4ff92SAndroid Build Coastguard Worker     {
311*89c4ff92SAndroid Build Coastguard Worker         0.0f, 2.0f, -16.0f,
312*89c4ff92SAndroid Build Coastguard Worker         1.0f, 0.0f, -1.0f
313*89c4ff92SAndroid Build Coastguard Worker     };
314*89c4ff92SAndroid Build Coastguard Worker 
315*89c4ff92SAndroid Build Coastguard Worker     ElementwiseUnaryFP32Test(tflite::BuiltinOperator_CEIL, backends, inputValues, expectedOutputValues);
316*89c4ff92SAndroid Build Coastguard Worker }
317*89c4ff92SAndroid Build Coastguard Worker 
318*89c4ff92SAndroid Build Coastguard Worker TEST_CASE ("Exp_Float32_CpuRef_Test")
319*89c4ff92SAndroid Build Coastguard Worker {
320*89c4ff92SAndroid Build Coastguard Worker     // Create the ArmNN Delegate
321*89c4ff92SAndroid Build Coastguard Worker     std::vector<armnn::BackendId> backends = { armnn::Compute::CpuRef };
322*89c4ff92SAndroid Build Coastguard Worker     // Set input data
323*89c4ff92SAndroid Build Coastguard Worker     std::vector<float> inputValues
324*89c4ff92SAndroid Build Coastguard Worker     {
325*89c4ff92SAndroid Build Coastguard Worker         5.0f, 4.0f,
326*89c4ff92SAndroid Build Coastguard Worker         3.0f, 2.0f,
327*89c4ff92SAndroid Build Coastguard Worker         1.0f, 1.1f
328*89c4ff92SAndroid Build Coastguard Worker     };
329*89c4ff92SAndroid Build Coastguard Worker     // Set output data
330*89c4ff92SAndroid Build Coastguard Worker     std::vector<float> expectedOutputValues
331*89c4ff92SAndroid Build Coastguard Worker     {
332*89c4ff92SAndroid Build Coastguard Worker         148.413159102577f, 54.598150033144f,
333*89c4ff92SAndroid Build Coastguard Worker         20.085536923188f,  7.389056098931f,
334*89c4ff92SAndroid Build Coastguard Worker         2.718281828459f,  3.004166023946f
335*89c4ff92SAndroid Build Coastguard Worker     };
336*89c4ff92SAndroid Build Coastguard Worker 
337*89c4ff92SAndroid Build Coastguard Worker     ElementwiseUnaryFP32Test(tflite::BuiltinOperator_EXP, backends, inputValues, expectedOutputValues);
338*89c4ff92SAndroid Build Coastguard Worker }
339*89c4ff92SAndroid Build Coastguard Worker 
340*89c4ff92SAndroid Build Coastguard Worker TEST_CASE ("Log_Float32_CpuRef_Test")
341*89c4ff92SAndroid Build Coastguard Worker {
342*89c4ff92SAndroid Build Coastguard Worker     // Create the ArmNN Delegate
343*89c4ff92SAndroid Build Coastguard Worker     std::vector<armnn::BackendId> backends = { armnn::Compute::CpuRef };
344*89c4ff92SAndroid Build Coastguard Worker     // Set input data
345*89c4ff92SAndroid Build Coastguard Worker     std::vector<float> inputValues
346*89c4ff92SAndroid Build Coastguard Worker     {
347*89c4ff92SAndroid Build Coastguard Worker         1.0f, 1.0f,  2.0f,
348*89c4ff92SAndroid Build Coastguard Worker         3.0f,  4.0f, 2.71828f
349*89c4ff92SAndroid Build Coastguard Worker     };
350*89c4ff92SAndroid Build Coastguard Worker     // Set output data
351*89c4ff92SAndroid Build Coastguard Worker     std::vector<float> expectedOutputValues
352*89c4ff92SAndroid Build Coastguard Worker     {
353*89c4ff92SAndroid Build Coastguard Worker         0.f,  0.f,  0.69314718056f,
354*89c4ff92SAndroid Build Coastguard Worker         1.09861228867f, 1.38629436112f, 0.99999932734f
355*89c4ff92SAndroid Build Coastguard Worker     };
356*89c4ff92SAndroid Build Coastguard Worker 
357*89c4ff92SAndroid Build Coastguard Worker     ElementwiseUnaryFP32Test(tflite::BuiltinOperator_LOG, backends, inputValues, expectedOutputValues);
358*89c4ff92SAndroid Build Coastguard Worker }
359*89c4ff92SAndroid Build Coastguard Worker 
360*89c4ff92SAndroid Build Coastguard Worker TEST_CASE ("Neg_Float32_CpuRef_Test")
361*89c4ff92SAndroid Build Coastguard Worker {
362*89c4ff92SAndroid Build Coastguard Worker     // Create the ArmNN Delegate
363*89c4ff92SAndroid Build Coastguard Worker     std::vector<armnn::BackendId> backends = { armnn::Compute::CpuRef };
364*89c4ff92SAndroid Build Coastguard Worker     // Set input data
365*89c4ff92SAndroid Build Coastguard Worker     std::vector<float> inputValues
366*89c4ff92SAndroid Build Coastguard Worker     {
367*89c4ff92SAndroid Build Coastguard Worker         1.f, 0.f, 3.f,
368*89c4ff92SAndroid Build Coastguard Worker         25.f, 64.f, 100.f
369*89c4ff92SAndroid Build Coastguard Worker     };
370*89c4ff92SAndroid Build Coastguard Worker     // Set output data
371*89c4ff92SAndroid Build Coastguard Worker     std::vector<float> expectedOutputValues
372*89c4ff92SAndroid Build Coastguard Worker     {
373*89c4ff92SAndroid Build Coastguard Worker         -1.f, 0.f, -3.f,
374*89c4ff92SAndroid Build Coastguard Worker         -25.f, -64.f, -100.f
375*89c4ff92SAndroid Build Coastguard Worker     };
376*89c4ff92SAndroid Build Coastguard Worker 
377*89c4ff92SAndroid Build Coastguard Worker     ElementwiseUnaryFP32Test(tflite::BuiltinOperator_NEG, backends, inputValues, expectedOutputValues);
378*89c4ff92SAndroid Build Coastguard Worker }
379*89c4ff92SAndroid Build Coastguard Worker 
380*89c4ff92SAndroid Build Coastguard Worker TEST_CASE ("Rsqrt_Float32_CpuRef_Test")
381*89c4ff92SAndroid Build Coastguard Worker {
382*89c4ff92SAndroid Build Coastguard Worker     // Create the ArmNN Delegate
383*89c4ff92SAndroid Build Coastguard Worker     std::vector<armnn::BackendId> backends = { armnn::Compute::CpuRef };
384*89c4ff92SAndroid Build Coastguard Worker     // Set input data
385*89c4ff92SAndroid Build Coastguard Worker     std::vector<float> inputValues
386*89c4ff92SAndroid Build Coastguard Worker     {
387*89c4ff92SAndroid Build Coastguard Worker         1.f, 4.f, 16.f,
388*89c4ff92SAndroid Build Coastguard Worker         25.f, 64.f, 100.f
389*89c4ff92SAndroid Build Coastguard Worker     };
390*89c4ff92SAndroid Build Coastguard Worker     // Set output data
391*89c4ff92SAndroid Build Coastguard Worker     std::vector<float> expectedOutputValues
392*89c4ff92SAndroid Build Coastguard Worker     {
393*89c4ff92SAndroid Build Coastguard Worker         1.f, 0.5f, 0.25f,
394*89c4ff92SAndroid Build Coastguard Worker         0.2f, 0.125f, 0.1f
395*89c4ff92SAndroid Build Coastguard Worker     };
396*89c4ff92SAndroid Build Coastguard Worker 
397*89c4ff92SAndroid Build Coastguard Worker     ElementwiseUnaryFP32Test(tflite::BuiltinOperator_RSQRT, backends, inputValues, expectedOutputValues);
398*89c4ff92SAndroid Build Coastguard Worker }
399*89c4ff92SAndroid Build Coastguard Worker 
400*89c4ff92SAndroid Build Coastguard Worker TEST_CASE ("Sqrt_Float32_CpuRef_Test")
401*89c4ff92SAndroid Build Coastguard Worker {
402*89c4ff92SAndroid Build Coastguard Worker     std::vector<armnn::BackendId> backends = { armnn::Compute::CpuRef };
403*89c4ff92SAndroid Build Coastguard Worker     // Set input data
404*89c4ff92SAndroid Build Coastguard Worker     std::vector<float> inputValues
405*89c4ff92SAndroid Build Coastguard Worker     {
406*89c4ff92SAndroid Build Coastguard Worker         9.0f, 4.25f, 81.9f,
407*89c4ff92SAndroid Build Coastguard Worker         0.1f,  0.9f,  169.0f
408*89c4ff92SAndroid Build Coastguard Worker     };
409*89c4ff92SAndroid Build Coastguard Worker     // Calculate output data
410*89c4ff92SAndroid Build Coastguard Worker     std::vector<float> expectedOutputValues(inputValues.size());
411*89c4ff92SAndroid Build Coastguard Worker     for (unsigned int i = 0; i < inputValues.size(); ++i)
412*89c4ff92SAndroid Build Coastguard Worker     {
413*89c4ff92SAndroid Build Coastguard Worker         expectedOutputValues[i] = std::sqrt(inputValues[i]);
414*89c4ff92SAndroid Build Coastguard Worker     }
415*89c4ff92SAndroid Build Coastguard Worker 
416*89c4ff92SAndroid Build Coastguard Worker     ElementwiseUnaryFP32Test(tflite::BuiltinOperator_SQRT, backends, inputValues, expectedOutputValues);
417*89c4ff92SAndroid Build Coastguard Worker }
418*89c4ff92SAndroid Build Coastguard Worker 
419*89c4ff92SAndroid Build Coastguard Worker TEST_CASE ("Sin_Float32_CpuRef_Test")
420*89c4ff92SAndroid Build Coastguard Worker {
421*89c4ff92SAndroid Build Coastguard Worker     // Create the ArmNN Delegate
422*89c4ff92SAndroid Build Coastguard Worker     std::vector<armnn::BackendId> backends = { armnn::Compute::CpuRef };
423*89c4ff92SAndroid Build Coastguard Worker     // Set input data
424*89c4ff92SAndroid Build Coastguard Worker     std::vector<float> inputValues
425*89c4ff92SAndroid Build Coastguard Worker     {
426*89c4ff92SAndroid Build Coastguard Worker             0.0f, 1.0f, 16.0f,
427*89c4ff92SAndroid Build Coastguard Worker             0.5f, 36.0f, -1.f
428*89c4ff92SAndroid Build Coastguard Worker     };
429*89c4ff92SAndroid Build Coastguard Worker     // Set output data
430*89c4ff92SAndroid Build Coastguard Worker     std::vector<float> expectedOutputValues
431*89c4ff92SAndroid Build Coastguard Worker     {
432*89c4ff92SAndroid Build Coastguard Worker             0.0f, 0.8414709848f, -0.28790331666f,
433*89c4ff92SAndroid Build Coastguard Worker             0.4794255386f, -0.99177885344f, -0.8414709848f
434*89c4ff92SAndroid Build Coastguard Worker     };
435*89c4ff92SAndroid Build Coastguard Worker 
436*89c4ff92SAndroid Build Coastguard Worker     ElementwiseUnaryFP32Test(tflite::BuiltinOperator_SIN, backends, inputValues, expectedOutputValues);
437*89c4ff92SAndroid Build Coastguard Worker }
438*89c4ff92SAndroid Build Coastguard Worker } // TEST_SUITE("ElementwiseUnary_CpuRefTests")
439*89c4ff92SAndroid Build Coastguard Worker 
440*89c4ff92SAndroid Build Coastguard Worker } // namespace armnnDelegate