blob: 3200423b10e50d8320f1da9a95b665128ae8b213 [file] [log] [blame]
Sadik Armagan0534e032020-10-27 17:30:18 +00001//
2// Copyright © 2020 Arm Ltd and Contributors. All rights reserved.
3// SPDX-License-Identifier: MIT
4//
5
6#include "ElementwiseUnaryTestHelper.hpp"
7
8#include <armnn_delegate.hpp>
9
10#include <flatbuffers/flatbuffers.h>
11#include <tensorflow/lite/interpreter.h>
12#include <tensorflow/lite/kernels/register.h>
13#include <tensorflow/lite/model.h>
14#include <tensorflow/lite/schema/schema_generated.h>
15#include <tensorflow/lite/version.h>
16
17#include <doctest/doctest.h>
18
19namespace armnnDelegate
20{
21
Jan Eilers187b3a72020-11-19 17:50:34 +000022TEST_SUITE("ElementwiseUnary_GpuAccTests")
Sadik Armagan0534e032020-10-27 17:30:18 +000023{
24
25TEST_CASE ("Abs_Float32_GpuAcc_Test")
26{
27 // Create the ArmNN Delegate
Jan Eilers187b3a72020-11-19 17:50:34 +000028 std::vector<armnn::BackendId> backends = { armnn::Compute::GpuAcc };
Sadik Armagan0534e032020-10-27 17:30:18 +000029 // Set input data
30 std::vector<float> inputValues
31 {
32 -0.1f, -0.2f, -0.3f,
33 0.1f, 0.2f, 0.3f
34 };
35 // Calculate output data
36 std::vector<float> expectedOutputValues(inputValues.size());
37 for (unsigned int i = 0; i < inputValues.size(); ++i)
38 {
39 expectedOutputValues[i] = std::abs(inputValues[i]);
40 }
41 ElementwiseUnaryFP32Test(tflite::BuiltinOperator_ABS, backends, inputValues, expectedOutputValues);
42}
43
Sadik Armagan0534e032020-10-27 17:30:18 +000044TEST_CASE ("Exp_Float32_GpuAcc_Test")
45{
46 // Create the ArmNN Delegate
Jan Eilers187b3a72020-11-19 17:50:34 +000047 std::vector<armnn::BackendId> backends = { armnn::Compute::GpuAcc };
Sadik Armagan0534e032020-10-27 17:30:18 +000048 // Set input data
49 std::vector<float> inputValues
50 {
51 5.0f, 4.0f,
52 3.0f, 2.0f,
53 1.0f, 1.1f
54 };
55 // Set output data
56 std::vector<float> expectedOutputValues
57 {
58 148.413159102577f, 54.598150033144f,
59 20.085536923188f, 7.389056098931f,
60 2.718281828459f, 3.004166023946f
61 };
62
63 ElementwiseUnaryFP32Test(tflite::BuiltinOperator_EXP, backends, inputValues, expectedOutputValues);
64}
65
66TEST_CASE ("Neg_Float32_GpuAcc_Test")
67{
68 // Create the ArmNN Delegate
Jan Eilers187b3a72020-11-19 17:50:34 +000069 std::vector<armnn::BackendId> backends = { armnn::Compute::GpuAcc };
Sadik Armagan0534e032020-10-27 17:30:18 +000070 // Set input data
71 std::vector<float> inputValues
72 {
73 1.f, 0.f, 3.f,
74 25.f, 64.f, 100.f
75 };
76 // Set output data
77 std::vector<float> expectedOutputValues
78 {
79 -1.f, 0.f, -3.f,
80 -25.f, -64.f, -100.f
81 };
82
83 ElementwiseUnaryFP32Test(tflite::BuiltinOperator_NEG, backends, inputValues, expectedOutputValues);
84}
85
86TEST_CASE ("Rsqrt_Float32_GpuAcc_Test")
87{
88 // Create the ArmNN Delegate
Jan Eilers187b3a72020-11-19 17:50:34 +000089 std::vector<armnn::BackendId> backends = { armnn::Compute::GpuAcc };
Sadik Armagan0534e032020-10-27 17:30:18 +000090 // Set input data
91 std::vector<float> inputValues
92 {
93 1.f, 4.f, 16.f,
94 25.f, 64.f, 100.f
95 };
96 // Set output data
97 std::vector<float> expectedOutputValues
98 {
99 1.f, 0.5f, 0.25f,
100 0.2f, 0.125f, 0.1f
101 };
102
103 ElementwiseUnaryFP32Test(tflite::BuiltinOperator_RSQRT, backends, inputValues, expectedOutputValues);
104}
105
Jan Eilers187b3a72020-11-19 17:50:34 +0000106} // TEST_SUITE("ElementwiseUnary_GpuAccTests")
107
108
109
110TEST_SUITE("ElementwiseUnary_CpuAccTests")
111{
112
113TEST_CASE ("Abs_Float32_CpuAcc_Test")
114{
115 // Create the ArmNN Delegate
116 std::vector<armnn::BackendId> backends = { armnn::Compute::CpuAcc };
117 // Set input data
118 std::vector<float> inputValues
119 {
120 -0.1f, -0.2f, -0.3f,
121 0.1f, 0.2f, 0.3f
122 };
123 // Calculate output data
124 std::vector<float> expectedOutputValues(inputValues.size());
125 for (unsigned int i = 0; i < inputValues.size(); ++i)
126 {
127 expectedOutputValues[i] = std::abs(inputValues[i]);
128 }
129
130 ElementwiseUnaryFP32Test(tflite::BuiltinOperator_ABS, backends, inputValues, expectedOutputValues);
131}
132
133TEST_CASE ("Exp_Float32_CpuAcc_Test")
134{
135 // Create the ArmNN Delegate
136 std::vector<armnn::BackendId> backends = { armnn::Compute::CpuAcc };
137 // Set input data
138 std::vector<float> inputValues
139 {
140 5.0f, 4.0f,
141 3.0f, 2.0f,
142 1.0f, 1.1f
143 };
144 // Set output data
145 std::vector<float> expectedOutputValues
146 {
147 148.413159102577f, 54.598150033144f,
148 20.085536923188f, 7.389056098931f,
149 2.718281828459f, 3.004166023946f
150 };
151
152 ElementwiseUnaryFP32Test(tflite::BuiltinOperator_EXP, backends, inputValues, expectedOutputValues);
153}
154
155TEST_CASE ("Neg_Float32_CpuAcc_Test")
156{
157 // Create the ArmNN Delegate
158 std::vector<armnn::BackendId> backends = { armnn::Compute::CpuAcc };
159 // Set input data
160 std::vector<float> inputValues
161 {
162 1.f, 0.f, 3.f,
163 25.f, 64.f, 100.f
164 };
165 // Set output data
166 std::vector<float> expectedOutputValues
167 {
168 -1.f, 0.f, -3.f,
169 -25.f, -64.f, -100.f
170 };
171
172 ElementwiseUnaryFP32Test(tflite::BuiltinOperator_NEG, backends, inputValues, expectedOutputValues);
173}
174
175TEST_CASE ("Rsqrt_Float32_CpuAcc_Test")
176{
177 // Create the ArmNN Delegate
178 std::vector<armnn::BackendId> backends = { armnn::Compute::CpuAcc };
179 // Set input data
180 std::vector<float> inputValues
181 {
182 1.f, 4.f, 16.f,
183 25.f, 64.f, 100.f
184 };
185 // Set output data
186 std::vector<float> expectedOutputValues
187 {
188 1.f, 0.5f, 0.25f,
189 0.2f, 0.125f, 0.1f
190 };
191
192 ElementwiseUnaryFP32Test(tflite::BuiltinOperator_RSQRT, backends, inputValues, expectedOutputValues);
193}
194
Jan Eilers187b3a72020-11-19 17:50:34 +0000195} // TEST_SUITE("ElementwiseUnary_CpuAccTests")
196
Jan Eilers187b3a72020-11-19 17:50:34 +0000197TEST_SUITE("ElementwiseUnary_CpuRefTests")
198{
199
200TEST_CASE ("Abs_Float32_CpuRef_Test")
201{
202 // Create the ArmNN Delegate
203 std::vector<armnn::BackendId> backends = { armnn::Compute::CpuRef };
204 // Set input data
205 std::vector<float> inputValues
206 {
207 -0.1f, -0.2f, -0.3f,
208 0.1f, 0.2f, 0.3f
209 };
210 // Calculate output data
211 std::vector<float> expectedOutputValues(inputValues.size());
212 for (unsigned int i = 0; i < inputValues.size(); ++i)
213 {
214 expectedOutputValues[i] = std::abs(inputValues[i]);
215 }
216
217 ElementwiseUnaryFP32Test(tflite::BuiltinOperator_ABS, backends, inputValues, expectedOutputValues);
Sadik Armagan0534e032020-10-27 17:30:18 +0000218}
219
Jan Eilers187b3a72020-11-19 17:50:34 +0000220TEST_CASE ("Exp_Float32_CpuRef_Test")
221{
222 // Create the ArmNN Delegate
223 std::vector<armnn::BackendId> backends = { armnn::Compute::CpuRef };
224 // Set input data
225 std::vector<float> inputValues
226 {
227 5.0f, 4.0f,
228 3.0f, 2.0f,
229 1.0f, 1.1f
230 };
231 // Set output data
232 std::vector<float> expectedOutputValues
233 {
234 148.413159102577f, 54.598150033144f,
235 20.085536923188f, 7.389056098931f,
236 2.718281828459f, 3.004166023946f
237 };
238
239 ElementwiseUnaryFP32Test(tflite::BuiltinOperator_EXP, backends, inputValues, expectedOutputValues);
240}
241
242TEST_CASE ("Neg_Float32_CpuRef_Test")
243{
244 // Create the ArmNN Delegate
245 std::vector<armnn::BackendId> backends = { armnn::Compute::CpuRef };
246 // Set input data
247 std::vector<float> inputValues
248 {
249 1.f, 0.f, 3.f,
250 25.f, 64.f, 100.f
251 };
252 // Set output data
253 std::vector<float> expectedOutputValues
254 {
255 -1.f, 0.f, -3.f,
256 -25.f, -64.f, -100.f
257 };
258
259 ElementwiseUnaryFP32Test(tflite::BuiltinOperator_NEG, backends, inputValues, expectedOutputValues);
260}
261
262TEST_CASE ("Rsqrt_Float32_CpuRef_Test")
263{
264 // Create the ArmNN Delegate
265 std::vector<armnn::BackendId> backends = { armnn::Compute::CpuRef };
266 // Set input data
267 std::vector<float> inputValues
268 {
269 1.f, 4.f, 16.f,
270 25.f, 64.f, 100.f
271 };
272 // Set output data
273 std::vector<float> expectedOutputValues
274 {
275 1.f, 0.5f, 0.25f,
276 0.2f, 0.125f, 0.1f
277 };
278
279 ElementwiseUnaryFP32Test(tflite::BuiltinOperator_RSQRT, backends, inputValues, expectedOutputValues);
280}
281
282TEST_CASE ("Sqrt_Float32_CpuRef_Test")
283{
284 std::vector<armnn::BackendId> backends = { armnn::Compute::CpuRef };
285 // Set input data
286 std::vector<float> inputValues
287 {
288 9.0f, 4.25f, 81.9f,
289 0.1f, 0.9f, 169.0f
290 };
291 // Calculate output data
292 std::vector<float> expectedOutputValues(inputValues.size());
293 for (unsigned int i = 0; i < inputValues.size(); ++i)
294 {
295 expectedOutputValues[i] = std::sqrt(inputValues[i]);
296 }
297
298 ElementwiseUnaryFP32Test(tflite::BuiltinOperator_SQRT, backends, inputValues, expectedOutputValues);
299}
300
301} // TEST_SUITE("ElementwiseUnary_CpuRefTests")
302
Sadik Armagan0534e032020-10-27 17:30:18 +0000303} // namespace armnnDelegate